查看: 923|回复: 3|关注: 0

[已答复] 牛顿迭代法报错:无法从 sym 转换为 logical

[复制链接]

新手

5 麦片

财富积分


050


2

主题

4

帖子

0

最佳答案
发表于 2019-6-10 21:30:47 | 显示全部楼层 |阅读模式
请大家多多指导:报错信息:
无法从 sym 转换为 logical。

出错 M (line 65)
    while differ>eps
程序如下:

  1. clc
  2. clear
  3. %Newton iteration-Multi Points

  4. syms x1 x2 x3 x4 x5 x6 sum_n n_NaF n_AlF3;
  5. syms RR;
  6. syms N
  7. RR=ones(1,7)/10e11;


  8. %****************
  9. T=['n_AlF3  ','x1  ', 'x2  ', 'x3  ', 'x4  ', 'x5  ', 'x6  ','n_sum  '];        %
  10. disp(T);

  11. N=0;
  12. for n_AlF3=0.01:0.01:0.5;                %%

  13.     disp(n_AlF3);
  14.     disp('--------');

  15.     if N==0
  16.         s1=1-3*n_AlF3;
  17.         s2=0;
  18.         s3=0;
  19.         s4=n_AlF3/3;
  20.         s5=0;
  21.         s6=1-n_AlF3;
  22.         s7=0;
  23.     elseif N>0
  24.         s1=RR(1);
  25.         s2=RR(2);
  26.         s3=RR(3);
  27.         s4=RR(4);
  28.         s5=RR(5);
  29.         s6=RR(6);
  30.         s7=RR(7);
  31.     end

  32.     eps=1.0e-6;
  33.     differ=1;
  34.     n=1;

  35.     f1=x1*x3-0.2471*sum_n*x2; %0.247146 改为0.2471
  36.     f2=x1*x4-0.1352*sum_n*x3;%0.135198 改为0.1352
  37.     f3=x1*x5-0.0003*x4^2; %0.000299 改为0.0003
  38.     f4=x1+6*x2+5*x3+4*x4+7*x5+14*x6-( n_NaF+3*n_AlF3);
  39.     f5=x2+x3+x4+2*x5+3*x6-n_AlF3;
  40.     f6=x1+x2+x3+x4+x5+x6-sum_n;
  41.     f7=x4^2*x2-0.0000008*x6*sum_n^2;
  42.     F=[f1 f2 f3 f4 f5 f6 f7];

  43.     dF=transpose([diff(F,'x1');diff(F,'x2') ;diff(F,'x3');diff(F,'x4');diff(F,'x5'); diff(F,'sum_n'); diff(F,'x6')]);

  44.     x0 = [s1,s2,s3,s4,s5,s6,s7];

  45.     Fx = subs(F,[x1 x2 x3 x4 x5 sum_n x6],x0);
  46.     dFx = subs(dF, [x1 x2 x3 x4 x5 sum_n x6],x0);
  47.     %disp('*******************');
  48.     %disp(vpa(Fx));
  49.     %disp(vpa(dFx));

  50.     r= transpose(x0)- inv(dFx)*transpose(Fx);
  51.     %disp(vpa(r));

  52.     while differ>eps
  53.         %disp('*******************');
  54.         Fx = subs(F, [x1 x2 x3 x4 x5 sum_n x6], transpose(r));
  55.         dFx = subs(dF, [x1 x2 x3 x4 x5 sum_n x6], transpose(r));
  56.         %disp(vpa(Fx));
  57.         %disp(vpa(dFx));

  58.         differ=norm( inv(dFx)*transpose(Fx));

  59.         r=r-inv(dFx)*transpose(Fx);

  60.         %disp(vpa(r));

  61.         n =n+1;
  62.         if(n>100);
  63.             disp('iteration exceed! Not converged!');
  64.             return;
  65.         end;
  66.     end;

  67.     %r=[n_AlF3,r];
  68.     RR=vpa(transpose(r));
  69.     disp(RR);
  70.     N=N+1;
  71. end;
复制代码


新手

5 麦片

财富积分


050


2

主题

4

帖子

0

最佳答案
 楼主| 发表于 2019-6-10 21:50:13 | 显示全部楼层
问题已查明,n_NaF 没有赋值!

新手

5 麦片

财富积分


050


2

主题

4

帖子

0

最佳答案
发表于 2019-11-9 10:29:05 | 显示全部楼层
clc;clear;
syms t Eds
y=1+t^2;
dy=simplify(diff(y,t));
L1=int((sqrt(1+dy^2)),0,25);
L=double(L1);
r=simplify(sqrt(1+dy^2));
hold on
for  t=0:0.5:25;
      y=1+t^2;
      plot(t,y,'o-')
  
end
Eds=0.2;
Ni=L/Eds;
N=3131;
Err=N*0.2-L;
dA=Ni/N;
t0=eps+0;
S=int((sqrt(1+dy^2)),0,t0);
ft0=S/Eds;
ft0=ft0-dA;
dS=sqrt(1+dy^2);
dft0=dS/Eds;
j=0;
ta=0;
while 1
    ti=t0-ft0/dft0;
    fti=int((sqrt(1+dy^2)),ta,ti)/Eds;
    fti=fti-dA;
    dfti=(sqrt(1+dy^2))/Eds;

    if abs(ti-t0)<eps||abs(fti)<eps
        j=j+1;
        st(j)=ti;
        y=1+t^2;
        ft(j)=int(((sqrt(1+dy^2))),0,ti);
        ta=ti;
        t0=ta+eps;
        S=int(((sqrt(1+dy^2))),ta,t0);
        fti=S/Eds;%%计算弧长
        fti=fti-dA;
        dS=sqrt(1+dy^2);
        dfti=dS/Eds;
     end
     
    t0=ti;

    ft0=fti;

    dft0=dfti;
   
    if j==N
       break;
    end
end
   Eds=ft(2)-ft(1);%%新的分割
   Err=Eds*N-L;%%分割后的误差

新手

5 麦片

财富积分


050


2

主题

4

帖子

0

最佳答案
发表于 2019-11-9 10:30:37 | 显示全部楼层
tanmin 发表于 2019-6-10 21:50
问题已查明,n_NaF 没有赋值!

大佬,有时间看看我这段错哪了,多谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表