lianghuan 发表于 2011-6-23 17:07:04

牛拉法解非线性方程的程序

我写了一个关于牛拉法解非线性方程的程序,进行故障测距的。但结果总是发散,哪位同行前辈或高手帮忙看看,到底哪出错了呀?
万分感激

function nlf2 =nlf2(Um1,Um2,Un1,Un2,Im1,Im2,In1,In2,r1,Zc1)
x=150%迭代过程没问题
L=300;
kk=0;
e=1;
%使用牛顿-拉夫逊法迭代求解
while (kk<10000&&e>0.001)
%A=(Um1*cosh(r1*x)-Im1*Zc1*sinh(r1*x))*(Un2*cosh(r1*(L-x))-In2*Zc1*sinh(r1*(L-x)))...
%-(Um2*cosh(r1*x)-Im2*Zc1*sinh(r1*x))*(Un1*cosh(r1*(L-x))-In1*Zc1*sinh(r1*(L-x)));
   %对A展开整理得(sinh(x))'=cosh(x)   (cosh(x))'=sinh(x)
D=(Um1*Un2-Um2*Un1)*(cosh(r1*x)*cosh(r1*(L-x)))...
   +(Um2*In1*Zc1-Um1*In2*Zc1)*(cosh(r1*x)*sinh(r1*(L-x)))...
   +(Im2*Un1*Zc1-Un2*Im1*Zc1)*(sinh(r1*x)*cosh(r1*(L-x)))...
   +(Im1*In2*(Zc1.^2)-Im2*In1*(Zc1.^2))*(sinh(r1*x)*sinh(r1*(L-x)))
    f1 = real(D);
    f2 = imag(D);
    f = .'
%A对x求偏导数
B1=(Um1*Un2-Um2*Un1)*(r1*sinh(r1*x)*cosh(r1*L-r1*x)-r1*cosh(r1*x)*sinh(r1*L-r1*x))...
    +(Um2*In1*Zc1-Um1*In2*Zc1)*(r1*sinh(r1*x)*sinh(r1*L-r1*x)-r1*cosh(r1*x)*cosh(r1*L-r1*x))...
    +(Im2*Un1*Zc1-Un2*Im1*Zc1)*(r1*cosh(r1*x)*cosh(r1*L-r1*x)-r1*sinh(r1*x)*sinh(r1*L-r1*x))...
    +(Im1*In2*(Zc1.^2)-Im2*In1*(Zc1.^2))*(r1*cosh(r1*x)*sinh(r1*L-r1*x)-r1*cosh(r1*L-r1*x)*sinh(r1*x))
       a11=real(B1);
       a21=imag(B1);
%A对L求偏导数
B2=(Um1*Un2-Um2*Un1)*(r1*cosh(r1*x)*sinh(r1*L-r1*x))...
      +(Um2*In1*Zc1-Um1*In2*Zc1)*(r1*cosh(r1*x)*cosh(r1*L-r1*x))...
      +(Im2*Un1*Zc1-Un2*Im1*Zc1)*(r1*sinh(r1*x)*sinh(r1*L-r1*x))...
      +(Im1*In2*(Zc1.^2)-Im2*In1*(Zc1.^2))*(r1*cosh(r1*L-r1*x)*sinh(r1*x))
      a12 = real(B2);
      a22 = imag(B2);

   R =
    RR=inv(R);
    detb=inv(R) * f
    %detb =R\f;
   L=L-detb(1);
   x=x-detb(2);
   e1=abs(detb(1));
   e2=abs(detb(2));
   e=max(e1,e2)
   kk = kk + 1
end
nlf2 =
页: [1]
查看完整版本: 牛拉法解非线性方程的程序

招聘斑竹