2017-11-08 16 views
1

何らかの理由でループが正しく動作しない、またはループ自体ではなく、注意を払わなかった問題があります。私は今何時間も問題を解決しようとしていますが、無駄です。ループがMATLABで正しく評価されない

は、ここでは、コードです:

syms t; 
syms m(t); 
Nq=3; 
L(1,1)=1; 
L(2,1)=2; 
L(3,1)=3; 
w(1,1)=0.2; 
w(2,1)=0.1; 
w(3,1)=0.7; 
G=1; 



for x=1:1:2*Nq 

    m0val(x)=w(1,1)*L(1,1).^(x-1) + w(2,1)*L(2,1).^(x-1) + w(3,1)*L(3,1).^(x-1); 

end 

ode=diff(m,t)==0; 
cond = m(0)==m0val(1); 
mf(1)=dsolve(ode,cond); 

for x=2:1:2*Nq 
    ode=diff(m,t)==(x-1)*G*mf(x-1); 
    cond=m(0)==m0val(x); 
    mf(x)=dsolve(ode,cond); 

end 


z=1; 
for y=0.2:0.2:1 
    for x=1:1:2*Nq 
     mfv(z,x)=subs(mf(x),t,y); 
    end 

     for x=1:1:2*Nq+1 
       P(x,1)=eq(x,1); 
     end 
    ****for x=1:1:2*Nq+1 
      if x~=2*Nq+1 
       P(x,2)=((-1).^(x-1))*mfv(z,x); 
      else 
       P(x,2)=0; 
      end**** 
    end 

     for y=3:1:2*Nq+1 
      for x=1:1:2*Nq+2-y 
       P(x,y)=P(1,y-1)*P(x+1,y-2)-P(1,y-2)*P(x+1,y-1); 
      end 
     end 
     alpha(1)=mfv(z,1); 
     for x=2:1:2*Nq 
      alpha(x)=P(1,x+1)/(P(1,x)*P(1,x-1)); 
     end 
     a(1)=alpha(2); 
     for x=2:1:Nq 
      a(x)=alpha(2*x)+alpha(2*x-1); 
     end 
     for x=1:1:Nq-1 
      b(x)=-(alpha(2*x+1)*alpha(2*x)).^0.5; 
     end 
     for x=1:1:Nq 
      Jacobi(x,x)=a(x); 
     end 
     for x=1:1:Nq-1 
      Jacobi (x+1,x)=b(x); 
      Jacobi(x,x+1)=b(x); 
     end 
     [evec,eval]=eig(Jacobi); 


       for x=1:1:Nq 
       L(x,z+1)=eval(x,x); 
       w(x,z+1)=mfv(z,1)*evec(1,x).^2; 
       end 


    z=z+1; 
end 

私はのはP(2,2)を言わせて計算した場合、それは(-1)^(1)*mfv(z,2)(最初の実行のためのz=1)に等しくなければならないので、それは、正常に動作していないところ*とのビットです。それはP(1,2)の値である1の値を与える。

答えて

1

私はあなたのコードを実行し、Pデータ型の問題を発見しました。したがって、コード内のPはロジックなので、倍精度の値を格納することはできません。

ループ内で使用する前にPを宣言していれば、コードは正常に動作します。

z=1; 

P = zeros(2,2);% the add line 

for y=0.2:0.2:1 
    for x=1:1:2*Nq 
     mfv(z,x)=subs(mf(x),t,y); 
    end 

    for x=1:1:2*Nq+1 
     P(x,1)=eq(x,1); 
    end 
    for x=1:1:2*Nq+1 
     if x~=2*Nq+1 
      P(x,2)=((-1).^(x-1))*mfv(z,x); 
     else 
      P(x,2)=0; 
     end 
    end 
関連する問題