yanice 发表于 2008-8-15 15:05

求助:求解非线性方程

方程如下

可以看到此方程是关于lamuda和alf的方程,其中lamuta的取值范围是0到1,我现在要画一组曲线,对应于不同的lamuda的alf的跟,也就是给定一个lamuda的值,求解一个alf。
下边是一个上面方程右边vsalf的一个曲线,其中lamuda=0.4

可以看见该方程在左右各有一个根,如图红色圈和蓝色圈。现在想得到当lamuda从0到1,对应于上面左边和右边的两个跟,分别作出红色根vs lamuda和蓝色vs lamuda的图。
我自己画了好几天了,总是有问题。
附上方程右边的表达式的m文件



function F=F(lamuta,alf)
F=-(3+17*lamuta)*cos((1-lamuta)*alf)-(11+23*lamuta)*cos((1+lamuta)*alf)-3*(1+lamuta)*cos((-3+lamuta)*alf)+5*(1-lamuta)*cos((3+lamuta)*alf)+cot(lamuta*pi)*((14+2*lamuta)*sin((-1+lamuta)*alf)-(10+2*lamuta)*sin((1+lamuta)*alf)+(62-18*lamuta)*sin((-3+lamuta)*alf)+(1-lamuta)*sin((3+lamuta)*alf)+5*(1-lamuta)*sin((-5+lamuta)*alf));
F=-F;


[ 本帖最后由 sigma665 于 2008-8-15 15:52 编辑 ]

sigma665 发表于 2008-8-15 15:51

是2个方程,2个未知数?

yanice 发表于 2008-8-15 19:37

回复 沙发 sigma665 的帖子

一个方程,其中的lamuda会预先给定,是一个参数,实际上是关于alf的方程

messenger 发表于 2008-8-15 22:54

好象你的方程有问题,

虽然你说“lamuta的取值范围是0到1”,但好象lamuta为0时方程无意义,为1时的解也有问题,

而且alf在0~3.5时,方程有三个根

做了一个0.1~0.9的,不知道对不对。



[ 本帖最后由 messenger 于 2008-8-15 22:59 编辑 ]

yanice 发表于 2008-8-16 10:19

回复 地板 messenger 的帖子

多谢,貌似有点问题,应该是横坐标是lamuda,纵坐标是alf,可能看的有问题吧,我正在想别的办法,因为用fsolve做总是找不到我想要的根。
不过谢谢你啊,另外,lamuda的值是开区间

[ 本帖最后由 无水1324 于 2008-8-16 12:28 编辑 ]

无水1324 发表于 2008-8-16 22:14

回复 5楼 yanice 的帖子

fsolve不行的时候试一下最优化的方法,寻找其最优解,matlab中有自带的工具箱和函数命令

yanice 发表于 2008-8-19 10:54

回复 6楼 无水1324 的帖子

我用的最简单的方法,就是做出100或者多少个点,然后比较相邻两个点的乘机是否为负值,如果是的话,那么这两个点中间这个值就可以近似为根了,很简单,但是很有效,也不存在什么收敛问题,呵呵
页: [1]
查看完整版本: 求助:求解非线性方程