24小时热门版块排行榜    

查看: 1011  |  回复: 5

chuzhenhui

金虫 (小有名气)

[交流] 【求助】用fsolve求解非线性一元方程 已有2人参与

我用fsolve()求解非线性方程,程序如下:
>> t=@(D)(8/pi^2)*exp(-12000000*pi^2*D)-0.092034;
>> [D,f,flag,out]=fsolve(t,0)

运行后结果如下:
Optimization terminated: norm of relative change in X is less
than max(options.TolX^2,eps) and  sum-of-squares of function
values is less than sqrt(options.TolFun).


D =

  1.8370e-008


f =

-8.6133e-006


flag =

     2


out =

       iterations: 22
        funcCount: 36
        algorithm: 'trust-region dogleg'
    firstorderopt: 44.0855
          message: [1x167 char]

请问红色部分是什么意思?我的这个解好像不是很准确,怎么改进啊?
要用optmiset设置参数吗?
大侠指导下,感激不尽!!
回复此楼
找到自己。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
robert2020(金币+1):谢谢提供意见,欢迎常来仿真模拟版交流。 2010-05-13 22:31:36
怎么成了非线性方程了啊?
变换一下不就成了一个计算式子啊?
D=log(0.092034*pi^2/8)/(-12000000*pi^2)
D =

    1.836935307093815e-008
2楼2010-05-13 19:34:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chuzhenhui

金虫 (小有名气)


zzuwangshilei:给个红包,欢迎积极关注自己的帖子 2010-05-14 08:11:52
nono2009(金币+1):红包补上。 2010-05-14 13:06:56
引用回帖:
Originally posted by change0618 at 2010-05-13 19:34:56:
怎么成了非线性方程了啊?
变换一下不就成了一个计算式子啊?
D=log(0.092034*pi^2/8)/(-12000000*pi^2)
D =

    1.836935307093815e-008

谢谢,不好意思我粗心了,其实我想解的方程是有好多项加起来的,我图方便拿了其中的一项,具体的方程是

s=0
for n=0:inf
s=s+(-8/pi^2)*(1/(2*n+1)^2)*exp(-(2*n+1)^2*pi^2*12000000*D)
end
要解的方程是由上面得到的 s-0.907966=0
我拿了其中几项用同样的方法运行程序,得到上面的红色字的提示。
t=@(D)(8/pi^2)*(exp(-12000000*pi^2*D)+(1/9)*exp(-9*12000000*pi^2*D)+(1/25)*exp(-25*12000000*pi^2*D))-0.907966;
[D,f,flag,out]=fsolve(t,0)

Optimization terminated: norm of relative change in X is less
than max(options.TolX^2,eps) and  sum-of-squares of function
values is less than sqrt(options.TolFun).


D =

  9.2703e-011


f =

-1.7886e-005


flag =

     2

我想知道的是红色字提示的是什么意思,我得到的解与精确解差的多不多,有什么提高的方法。希望得到指点。

[ Last edited by chuzhenhui on 2010-5-13 at 22:42 ]
找到自己。
3楼2010-05-13 22:27:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009(金币+1):鼓励应助! 2010-05-14 13:12:52
你可以将12000000*D作为新未知数D,结果最后除去12000000即可
>>t=@(D)(8/pi^2)*(exp(-pi^2*D)+(1/9)*exp(-9*pi^2*D)+(1/25)*exp(-25*pi^2*D))-0.907966;
>>[D,f,flag,out]=fsolve(t,0)

D =

   0.001111597655874


f =

    5.475275788313638e-011


flag =

     1


out =

       iterations: 3
        funcCount: 8
        algorithm: 'trust-region dogleg'
    firstorderopt: 1.163031023008677e-009
          message: [1x695 char]



>> D/12000000

ans =

    9.263313798950567e-011

[ Last edited by change0618 on 2010-5-14 at 12:47 ]
4楼2010-05-14 12:46:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
adu886886(金币+1):鼓励交流 2010-05-14 14:56:47
好像你n值逐渐增大,D值会不断增加
可以用symsum对级数求和,但是我没有求出来
5楼2010-05-14 14:24:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chuzhenhui

金虫 (小有名气)

引用回帖:
Originally posted by change0618 at 2010-05-14 12:46:40:
你可以将12000000*D作为新未知数D,结果最后除去12000000即可
>>t=@(D)(8/pi^2)*(exp(-pi^2*D)+(1/9)*exp(-9*pi^2*D)+(1/25)*exp(-25*pi^2*D))-0.907966;
>>[D,f,flag,out]=fsolve(t,0)

D =

  ...

谢谢你的指点,我用你说的函数去求一下!
找到自己。
6楼2010-05-16 12:54:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 chuzhenhui 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见