循环在MATLAB中无法正确评估

时间:2017-11-08 23:40:18

标签: matlab loops

由于某些原因,我遇到循环无法正常工作的问题,或者它可能不是循环本身,而是我没有注意的事情。我一直试图解决这个问题几个小时,但没有用。

以下是代码:

await Navigation.PopModalAsync();
MessagingCenter.Send<Info, string[]>(this, "nameUpdate", message);

*之间的位是它无法正常工作的地方,因为如果我计算让我们说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))。它的值为1,即z=1的值。

1 个答案:

答案 0 :(得分: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