24小时热门版块排行榜    

查看: 1540  |  回复: 5

bobo1314

银虫 (小有名气)

[求助] fsolve求解非线性方程组 已有1人参与

我的程序,总有这样那样的问题,最终还是会出现错误
M文件:
function F=myfunfsolve(x)
Iph=x(1);
I0=x(2);
Rs=x(3);
Rp=x(4);
Vt=x(5);
Voc=44.6/72;
Vm=35.4/72;
Isc=5.43;
Im=4.95;
Ns=1;
Np=1;
q=1.602E-19;
K=1.381E-23;
Alpha=0.0008;
beita=-0.145;
T0=298.15;
T01=323.15;
Eg0=1.16-7.02e-4*T0^2/(T0-1108);
Eg01=1.16-7.02e-4*T01^2/(T01-1108);
I01bi=T01^3/T0^3*exp(q*Eg0/(Vt)-q*T0*Eg01/(Vt));
F=[Np*Iph-Np*I0*(exp(Voc/Ns/Vt)-1)-Np/Ns*Voc/Rp;
Np*Iph-Np*I0*(exp(Isc*Rs/Np/Vt)-1)-Isc*Rs/Rp-Isc;
Np*Iph-Np*I0*(exp((Vm/Ns+Im/Np*Rs)/Vt)-1)-Np*(Vm/Ns+Im/Np*Rs)/Rp-Im;
(Np/Ns/Vt*I0*exp((Vm+Im*Ns/Np*Rs)/Ns/Vt)+1/(Ns/Np*Rp))/(1+Rs/Vt*I0*exp((Vm+Im*Ns/Np*Rs)/Ns/Vt)+Rs/Rp)-Im/Vm;
(-Np/Ns/Vt*I0*exp(Isc*Ns*Rs/Np/Ns/Vt)-1/(Ns/Np*Rp))/(1+Rs/Vt*I0*exp(Isc*Ns*Rs/Np/Ns/Vt)+Rs/Rp)+1/Rp;
Np*Iph*(1+(T01-T0)*Alpha/Isc)-Np*I0*I01bi*(exp(Voc*(1+(T01-T0)*beita/Voc)/Ns/Vt*T0/T01)-1)-Np/Ns*Voc*(1+(T01-T0)*beita/Voc)/Rp];
命令行输入:
clear;
x0 = [5.4 2e-9 0.02 2 0.05];  % Make a starting guess at the solution
options=optimset('Display','iter','TolFun',1e-3,'TolX',1e-100,'Algorithm','levenberg-marquardt', 'MaxIter',1e4,'MaxFunEvals',1e5,'Diagnostics','on'); %option to display output
[x,fval] = fsolve(@myfunfsolve5,x0,options); % Call solver

出现下列提示:
No solution found.
fsolve stopped because the problem appears regular as measured by the gradient,
but the vector of function values is not near zero as measured by the
selected value of the function tolerance.


我就不知道该如何处理了,如何才能得到解,顺便说一声,这个应该有前人的正确解,[5.449 1.2e-9 0.092 2.725 0.028]
回复此楼
一个矛盾无知的人
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

儒雅圣士

新虫 (正式写手)

得到的解是【-0.076195037566324  -0.000000573386969  -2.251437071748727   2.440695364463143   0.046798441863606】  请查看方程并确认是否写正确了,估计是你写错了方程

» 本帖已获得的红花(最新10朵)

一起努力
2楼2017-12-02 18:28:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bobo1314

银虫 (小有名气)

方程已经过了无数次的检查,而且将前人迭代的正确解反带入原档程,几乎每个式子都在0附近

发自小木虫Android客户端
一个矛盾无知的人
3楼2017-12-02 21:02:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bobo1314

银虫 (小有名气)

送红花一朵
引用回帖:
2楼: Originally posted by 儒雅圣士 at 2017-12-02 18:28:52
得到的解是【-0.076195037566324  -0.000000573386969  -2.251437071748727   2.440695364463143   0.046798441863606】  请查看方程并确认是否写正确了,估计是你写错了方程

方程已经过了无数次的检查,而且将前人迭代的正确解反带入原档程,几乎每个式子都在0附近

发自小木虫Android客户端
一个矛盾无知的人
4楼2017-12-02 21:03:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
6个方程5个未知数,本身就不存在精确解吧。
而且,所谓的“这个应该有前人的正确解,[5.449 1.2e-9 0.092 2.725 0.028]”,带回原方程验证,误差是非常之大,下面随便一组近似解都要比这个“正解”好的多:

iph: -2.44512940626882E-8
i0: 234876089.693707
rs: 2.65964117382912E15
rp: 2.01138445074181E24
vt: -6.24686104906122E23
5楼2017-12-03 13:16:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bobo1314

银虫 (小有名气)

引用回帖:
5楼: Originally posted by dingd at 2017-12-03 13:16:50
6个方程5个未知数,本身就不存在精确解吧。
而且,所谓的“这个应该有前人的正确解,”,带回原方程验证,误差是非常之大,下面随便一组近似解都要比这个“正解”好的多:

iph: -2.44512940626882E-8
i0: 2348 ...

非常感谢回复,主要是求其优化解,用的fsolve的l-m算法

发自小木虫Android客户端
一个矛盾无知的人
6楼2017-12-03 16:20:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 bobo1314 的主题更新
信息提示
请填处理意见