jsp613 发表于 2007-10-15 20:30

请问用fsolve求解非线性问题如何得到收敛解。

请问 fsolve 得到的解如何判断是否有意义

Optimizer appears to be converging to a point which is not a root.
Relative function value changing by less than max(options.TolFun^2,eps) but
sum-of-squares of function values is greater than or equal to sqrt(options.TolFun)
Try again with a new starting guess.
function ff=jifen3(x)
r1=9.5*10^(-3);r2=9.6*10^(-3);
r3=11.5*10^(-3);r4=11.6*10^(-3);P4=600;
C10=115100;C01=101300;P0=1.01325*10^5;h1=0.003;%h1是铜块的厚度;%令P0=0才能得到实际结果。
rad1=[];
rad2=[];
rad3=[];
rad4=[];
for n=1000:50:1400;
w=2*pi*n/60;
midu=8920;
P1=midu*w.^2*((x(1)^2-(r2^2-r1^2))^(3/2)-((x(1)^2-(r2^2-r1^2))^(1/2)-h1)^3)/(3*(x(1)^2-(r2^2-r1^2))^(1/2));
P3=1.0*10^3*w.^2*((x(2)^2-(r4^2-r2^2))^(3/2)-x(1)^3)/(3*(x(2)^2-(r4^2-r3^2))^(1/2));
%-----------------------------
ff(1)=2*(C10+C01)*((r1^2-(x(1)^2-(r2^2-r1^2)))*(-1/2)*((x(1)^2-(r2^2-r1^2))-x(1)^2)/((x(1)^2-(r2^2-r1^2))*x(1)^2)+log(x(1)/(x(1)^2-(r2^2-r1^2))^(1/2))-(1/2)*log((r1^2-(x(1)^2-(r2^2-r1^2))+x(1)^2)/r1^2))+P0+P1+2*(C10+C01)*((r3^2-(x(2)^2-(r4^2-r3^2)))*(-1/2)*((x(2)^2-(r4^2-r3^2))-x(2)^2)/((x(2)^2-(r4^2-r3^2))*x(2)^2)+log(x(2)/(x(2)^2-(r4^2-r3^2))^(1/2))-(1/2)*log((r3^2-(x(2)^2-(r4^2-r3^2))+x(2)^2)/r3^2))+P3-P4;
s1=(((x(1)^2-(r2^2-r1^2))^(1/2)-r1)/sqrt(2)+r1)*((x(1)^2-(r2^2-r1^2))^(1/2)-r1)/sqrt(2)*2-asin(((x(1)^2-(r2^2-r1^2))^(1/2)-r1)/sqrt(2)/r1)*r1.^2;
s2=pi/4*r1^2-((pi/4-asin(((x(1)^2-(r2^2-r1^2))^(1/2)-r1)/sqrt(2)/r1))*r1^2-((x(1)^2-(r2^2-r1^2))^(1/2)-r1)*r1*sin(pi/4-asin(((x(1)^2-(r2^2-r1^2))^(1/2)-r1)/sqrt(2)/r1)));
%-----------------------------
ff(2)=4*(s1+s2)-pi*((x(2)^2-(r4^2-r3^2))-r3^2);
rad1((1000-950)/50)=(x(1)^2-(r2^2-r1^2))^(1/2)*1000
rad2((1000-950)/50)=x(1)*1000
rad3((1000-950)/50)=(x(2)^2-(r4^2-r3^2))^(1/2)*1000
rad4((1000-950)/50)=x(2)*1000
end

fsolve(@jifen3,)
这样得到的解完全没有意义吗?如何改进才能收敛?
实际物理模型应该有零解得,为什么得不到呢,需要对options进行什么设置吗?请教高手。

无水1324 发表于 2007-10-15 21:53

回复 #1 jsp613 的帖子

这个可能就是fsolve本身算法的缺陷了,你可以参考一下其它的算法,有关搜索延拓法什么的,见过

jsp613 发表于 2007-10-15 21:57

MATLAB的延拓法吗?
Optimization terminated: relative function value changing by less
than max(options.TolFun^2,eps) and sum-of-squares of function
values is less than sqrt(options.TolFun).

无水1324 发表于 2007-10-15 22:00

回复 #3 jsp613 的帖子

恩,是有一个这样的方法,但是我只看了一点原理,matlab中可能没有现成的程序

jsp613 发表于 2007-10-15 22:18

非线性求零解这么困难吗??有没有其他求解方法

心灯 发表于 2007-10-15 23:01

发现使用fsolve在变量增多到一定程度的时候,很难收敛,有点头痛这类问题。

jsp613 发表于 2007-10-16 08:42

可是我的变量才2个阿,继续求助

无水1324 发表于 2007-10-16 12:22

回复 #7 jsp613 的帖子

不要说2个了,一个有时候也出现这样的问题。

octopussheng 发表于 2007-10-16 20:19

回复 #7 jsp613 的帖子

非线性方程不收敛很正常的哦,呵呵

dingd 发表于 2007-10-16 20:40

试一下1stOpt看行不行。

无水1324 发表于 2007-10-16 21:59

回复 #10 dingd 的帖子

同意楼上的,我看了很多帖子都是用这个解决的,还不错
只是还没有学

jsp613 发表于 2007-10-17 15:07

回复 #10 dingd 的帖子

你能帮我运行一下我的源程序吗?告诉我结果阿,多谢了,在线等!

[ 本帖最后由 无水1324 于 2007-11-3 09:01 编辑 ]

jsp613 发表于 2007-10-29 15:45

:'( 只需要一个结果而已。
非线性方程组还有什么其他数学方法吗?能用MATLAB求解啊?

无水1324 发表于 2007-11-3 09:02

回复 #13 jsp613 的帖子

考虑用优化的方法!

jsp613 发表于 2007-11-3 18:34

回复 #14 无水1324 的帖子

请说的明白些,不懂阁下的意思
页: [1] 2
查看完整版本: 请问用fsolve求解非线性问题如何得到收敛解。