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

我的matlab程序如下:functiona=myfun(m)E=1e12;t=0.34e-9;C1=0.524;T=0.2;h=0.25e-6;a0=2e-6;pe=8... 我的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])
展开
dukinkin
推荐于2017-05-16 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:937万
展开全部

[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有偏差
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式