24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1683  |  回复: 12

mataohk

银虫 (初入文坛)

[求助] Matlab:Newton-Raphson 解线非线性性方程组的问题

大家好,能否帮我解决一个Matlab用Newton-Raphson 解线非线性性方程组的问题,可以肯定这五个方程组肯定是有解的。程序代码在最后。 但是运行之后出现了问题,提示消息是:Warning: Matrix is singular, close to singular or badly scaled.          Results may be inaccurate. RCOND = NaN.
因为刚学matlab,不是很熟悉这些东西和算法,能否帮我看一下问题出在哪?谢谢大家。

maxiter=1000;
epsilon=0.0000000001;
nsys=5;
Voc=33.4;
Isc=8.12;
Vm=26.2;
Im=7.63;
Ns=54;
Np=1;

%equations
F1 = @(x) Np*x(1)-Np*x(2)*(exp(Voc/Ns/x(5))-1)-Np*Voc/Ns/x(4);
F2 = @(x) Np*x(1)-Np*x(2)*(exp(Isc*x(3)/Np/x(5))-1)-Isc*x(3)/x(4)-Isc;
F3 = @(x) Np*x(1)-Np*x(2)*(exp((Vm/Ns+Im*x(3)/Np)/x(5))-1)-Np/x(4)*(Vm/Ns+Im*x(3)/Np)-Im;
F4 = @(x) (Np*x(2)*exp((Vm+Im*Ns*x(3)/Np)/Ns/x(5))/Ns/x(5)+Np/Ns/x(4))/(1+x(3)*x(2)*exp((Vm+Im*Ns*x(3)/Np)/Ns/x(5))/x(5)+x(3)/x(4))-Im/Vm;
F5 = @(x) (Np*x(2)*exp(Isc*Ns*x(3)/Np/Ns/x(5))/Ns/x(5)+Np/Ns/x(4))/(1+x(3)*x(2)*exp(Isc*Ns*x(3)/Np/Ns/x(5))/x(5)+x(3)/x(4))-1/x(4);

F={F1,F2,F3,F4,F5};

%initial values
x(1)=8.12;
x(2)=2e-9;
x(3)=6e-7;
x(4)=8700;
x(5)=0.0275;



nloop=0;
nconverg=0;

while nloop    
    dFidxj=zeros(nsys,nsys);

    for i=1:1:nsys
        for j=1:1:nsys
            fx=F{i};
            xj=x;

            xj(j)=x(j)+epsilon/2;
            y1=fx(xj);

            xj(j)=x(j)-epsilon/2;
            y0=fx(xj);

            dFidxj(i,j)=(y1-y0)/epsilon;
        end
    end
   
%%
       for i=1:1:nsys
       j=F{i};
       D(i,1)=j(x);
    end
   
%%
       A=inv(dFidxj);
    error=A*D;
    dx=error';
   
%%   
   
    x=x-dx;
   
%%   
        nloop=nloop+1;
        nconverg=nconverg+1;
%%        
            
        maxdx=max(abs(error));
        
        if maxdx             nloop=maxiter;
        end

        
end
%%
%results output

x
nconverg
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
mataohk: 金币+1, ★★★很有帮助 2012-10-16 09:48:38
jjdg: 金币+1, 辛苦了 2012-10-16 10:45:40
1stOpt求解:
CODE:
Algorithm = SM2[30,0.1];
Parameter x(5)= [0,];
Constant nsys=5,Voc=33.4,Isc=8.12,Vm=26.2,Im=7.63,Ns=54,Np=1;
Function  np*x1-np*x2*(exp(voc/ns/x5)-1)-np*voc/ns/x4;
          np*x1-np*x2*(exp(isc*x3/np/x5)-1)-isc*x3/x4-isc;
          np*x1-np*x2*(exp((vm/ns+im*x3/np)/x5)-1)-np/x4*(vm/ns+im*x3/np)-im;
          (np*x2*exp((vm+im*ns*x3/np)/ns/x5)/ns/x5+np/ns/x4)/(1+x3*x2*exp((vm+im*ns*x3/np)/ns/x5)/x5+x3/x4)-im/vm;
          (np*x2*exp(isc*ns*x3/np/ns/x5)/ns/x5+np/ns/x4)/(1+x3*x2*exp(isc*ns*x3/np/ns/x5)/x5+x3/x4)-1/x4;

x1: 8.12000001121304
x2: 1.4626798923652E-9
x3: 0.00733098619458878
x4: 7.48696238461757E34
x5: 0.0275664990951606
2楼2012-10-16 08:48:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mataohk

银虫 (初入文坛)

引用回帖:
9楼: Originally posted by dingd at 2012-10-16 17:14:15
文献答案是针对你一楼还是你修改后三楼的公式?
如果对一楼:
1stOpt验证(2楼结果):公式左右相减
-3.375077995E-14
-5.329070518E-15
1.776356839E-15
6.77236045E-15
8.515250924E-9

文献验证:公式左 ...

非常感谢你耐心的回答,很有帮助。
可不可以再帮我计算一次,真的是麻烦你了,用下面修正过的方程再到1stOpt计算一次,麻烦你把计算得到的结果x1,x2,x3,x4,x5 和验证的结果告诉我。
谢谢了。
修正的后的方程组:
Function  np*x1-np*x2*(exp(voc/ns/x5)-1)-np*voc/ns/x4;
          np*x1-np*x2*(exp(isc*x3/np/x5)-1)-isc*x3/x4-isc;
          np*x1-np*x2*(exp((vm/ns+im*x3/np)/x5)-1)-np/x4*(vm/ns+im*x3/np)-im;
          (np*x2*exp((vm+im*ns*x3/np)/ns/x5)/ns/x5+np/ns/x4)/(1+x3*x2*exp((vm+im*ns*x3/np)/ns/x5)/x5+x3/x4)-im/vm;
          (np*x2*exp(voc/ns/x5)/ns/x5+np/ns/x4)/(1+x3*x2*exp(voc/ns/x5)/x5+x3/x4)-1/x3;
10楼2012-10-16 18:43:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖


mataohk: 金币+1, ★★★很有帮助 2012-10-17 11:02:11
误差似乎更大了:
x1: 5.2500000093581
x2: 1.56221361819448E-5
x3: 19673282.1637198
x4: 4.93747145194247E23
x5: 1.82237131171676E19

验证结果:
5.250000009
-2.869999991
-2.379999991
-0.291221374
-5.083035925E-8
11楼2012-10-17 09:18:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

mataohk

银虫 (初入文坛)

引用回帖:
2楼: Originally posted by dingd at 2012-10-16 08:48:36
1stOpt求解:

Algorithm = SM2;
Parameter x(5)= ;
Constant nsys=5,Voc=33.4,Isc=8.12,Vm=26.2,Im=7.63,Ns=54,Np=1;
Function  np*x1-np*x2*(exp(voc/ns/x5)-1)-np*voc/ns/x4;
          np*x1-np*x2*(exp( ...

1. 谢谢你的回答和计算。但是我用你的程序到进去之后算出来的结果和你算出来的结果差别很大,我用的是1stOpt15PRO。是不是版本不同的原因?麻烦你告诉我问题在哪?
2. 对于你的结果,x4的结算结果差别很大,数量级应该在10^3,不会到10^34. 其他结果还比较准确。
3. 现在我把第五个方程修改一下,你再帮我算算这一次的结果,我想看一下哪一种方法更准确。谢谢你。修改后的方程组为:
Function  np*x1-np*x2*(exp(voc/ns/x5)-1)-np*voc/ns/x4;
          np*x1-np*x2*(exp(isc*x3/np/x5)-1)-isc*x3/x4-isc;
          np*x1-np*x2*(exp((vm/ns+im*x3/np)/x5)-1)-np/x4*(vm/ns+im*x3/np)-im;
          (np*x2*exp((vm+im*ns*x3/np)/ns/x5)/ns/x5+np/ns/x4)/(1+x3*x2*exp((vm+im*ns*x3/np)/ns/x5)/x5+x3/x4)-im/vm;
          (np*x2*exp(Voc/ns/x5)/ns/x5+np/ns/x4)/(1+x3*x2*exp(Voc/ns/x5)/x5+x3/x4)-1/x4;
3楼2012-10-16 09:57:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖


mataohk: 金币+1, 有帮助 2012-10-16 14:51:25
x1: 8.3036342614272
x2: 8.23586506487608E-145
x3: 0.016175036046607
x4: 0.900972587715136
x5: 0.0018529795611491
4楼2012-10-16 11:58:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mataohk

银虫 (初入文坛)

引用回帖:
4楼: Originally posted by dingd at 2012-10-16 11:58:18
x1: 8.3036342614272
x2: 8.23586506487608E-145
x3: 0.016175036046607
x4: 0.900972587715136
x5: 0.0018529795611491

谢谢你的回复,但是结果差的更远了,还出现了10^145了。
还有为什么你的程序不能在我安装的1stOpt进行计算啊?
5楼2012-10-16 14:51:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖


mataohk: 金币+1, ★★★很有帮助 2012-10-16 16:45:04
是“10^(-145)”,接近于0但不等于0.

“结果差的更远了”,不知道你的正确结果是多少?贴出来看看,结果的好坏带回原方程验证一下就知道了。

用的是5.0版。
6楼2012-10-16 15:22:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mataohk

银虫 (初入文坛)

引用回帖:
6楼: Originally posted by dingd at 2012-10-16 15:22:56
是“10^(-145)”,接近于0但不等于0.

“结果差的更远了”,不知道你的正确结果是多少?贴出来看看,结果的好坏带回原方程验证一下就知道了。

用的是5.0版。

谢谢一直的支持啊。
文献的答案是:
x1 = 8.120006854001;
x2 = 1.459e-9;
x3 = 7.33184114e-3;
x4 = 8700;
x5 = 0.027563144359;

我自己的答案还没有算出来,但是应该和这个很接近。至少数量级应该是正确的。你可以用第一套方程和第二套方程都验证一下,谢谢!
7楼2012-10-16 16:44:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mataohk

银虫 (初入文坛)

引用回帖:
7楼: Originally posted by mataohk at 2012-10-16 16:44:49
谢谢一直的支持啊。
文献的答案是:
x1 = 8.120006854001;
x2 = 1.459e-9;
x3 = 7.33184114e-3;
x4 = 8700;
x5 = 0.027563144359;

我自己的答案还没有算出来,但是应该和这个很接近。至少数量级应该是正确 ...

不还意思,做个小小的修正,第一套方程保持不变:
np*x1-np*x2*(exp(voc/ns/x5)-1)-np*voc/ns/x4;
          np*x1-np*x2*(exp(isc*x3/np/x5)-1)-isc*x3/x4-isc;
          np*x1-np*x2*(exp((vm/ns+im*x3/np)/x5)-1)-np/x4*(vm/ns+im*x3/np)-im;
          (np*x2*exp((vm+im*ns*x3/np)/ns/x5)/ns/x5+np/ns/x4)/(1+x3*x2*exp((vm+im*ns*x3/np)/ns/x5)/x5+x3/x4)-im/vm;
          (np*x2*exp(isc*ns*x3/np/ns/x5)/ns/x5+np/ns/x4)/(1+x3*x2*exp(isc*ns*x3/np/ns/x5)/x5+x3/x4)-1/x4;

第二套方程应该是:(做了一点小小的修改,麻烦你帮我重新算一下,谢谢)
Function  np*x1-np*x2*(exp(voc/ns/x5)-1)-np*voc/ns/x4;
          np*x1-np*x2*(exp(isc*x3/np/x5)-1)-isc*x3/x4-isc;
          np*x1-np*x2*(exp((vm/ns+im*x3/np)/x5)-1)-np/x4*(vm/ns+im*x3/np)-im;
          (np*x2*exp((vm+im*ns*x3/np)/ns/x5)/ns/x5+np/ns/x4)/(1+x3*x2*exp((vm+im*ns*x3/np)/ns/x5)/x5+x3/x4)-im/vm;
          (np*x2*exp(voc/ns/x5)/ns/x5+np/ns/x4)/(1+x3*x2*exp(voc/ns/x5)/x5+x3/x4)-1/x3;
8楼2012-10-16 17:11:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★
mataohk: 金币+1, ★★★很有帮助 2012-10-16 18:43:58
jjdg: 金币+1, 辛苦了 2012-10-17 00:53:24
文献答案是针对你一楼还是你修改后三楼的公式?
如果对一楼:
1stOpt验证(2楼结果):公式左右相减
-3.375077995E-14
-5.329070518E-15
1.776356839E-15
6.77236045E-15
8.515250924E-9

文献验证:公式左右相减
-0.001784587439
-2.420748046E-10
-0.0001076813772
5.662268229E-5
-0.000112805466

如果对三楼:

1stOpt验证(4楼结果):公式左右相减
8.679745341E-5
0.0378520978
-0.03793594713
-0.005267011529
0.0180096136

文献验证:公式左右相减
-0.001784587439
-2.420748046E-10
-0.0001076813772
5.662268229E-5
1.72645739

无论那种情况,文献值都要比1stOpt得到的结果差。
9楼2012-10-16 17:14:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 mataohk 的主题更新
信息提示
请填处理意见