我想使用matlab中fsolve函数求解方程组,但是初始值不同时计算结果也不同,计算结果也不对,为什么?

我的matlab程序如下:
function a = myfun(m)
E=1e12;t=0.34e-9;C1=0.524;T=0.2;h=0.25e-6;a0=2e-6;pe=8.3e4;S0=0.15;v=0.16;p0=1.937e6;
V0=3.14*h*a0^2;
a2=m(1);
w2=m(2);
a(1)=(4*w2/a2^2*(S0+2*E*t*w2^2/(3*a2^2*(1-v)))+pe)*(V0+C1*3.14*a2^2*w2)-p0*V0;
a(2)=-12*C1*3.14*w2^2*S0/a2+8*C1*3.14*E*t*S0*w2^4/(3*S0*a2^3*(1-v)+6*E*t*w2^2*a2)-...
20*C1*3.14*E*t*w2^4/(3*a2^3*(1-v))+2*3.14*T*a2;
end
求解主函数如下:
clc;clear;
x=fsolve('myfun',[2e-6,250e-9])

[x,fval,exitflag]=fsolve(fun,x0)

你可以利用fsolve函数多返回两个信息

一个是返回的x对应的函数值fval,一个是函数返回状态exitflag


fsolve也不是万能的,不是对所有的函数都能找到解

特别是你的初值选取离正确解很远的时候

或者是函数比较多奇异点,不连续点

又或者选取的精度不合理

很可能找不到正确解的解,得到的x不是正确的

又或者问题太复杂,在经过设定的最大计算步数后,还没收敛到正确解


这个时候你可以利用fval和exitflag判断返回的解是否正确有效


fval对应的是返回的x值是,原来函数的值

如果x是正确解,那么得到的fval应该都满足误差要求,是很接近零的值


而exitflag是更直接地获得返回信息的标志

当返回的exitflag等于1时,是最后的情况,表明找到了符合精度要求的解

如果exitflag不等于1,就表明有一定的问题,解x不太可信,或者根本即使错误的

以下是exitflag返回值对应的所有意义



你可以多让fsolve返回这两个信息,然后根据它们判断时候得到正确解

如果得不到正确解

那么可以尝试更换初值

更改误差要求或者最大计算步数

追问

计算结果与真实值a2=2e-6,w2=2.61e-7有偏差

温馨提示:答案为网友推荐,仅供参考
相似回答