【问题标题】:Loop doesn't evaluate correctly in MATLAB循环在 MATLAB 中无法正确计算
【发布时间】:2018-04-21 20:12:33
【问题描述】:

我有一个循环由于某种原因无法正常工作的问题,或者可能不是循环本身,而是我没有注意的问题。我已经尝试解决这个问题几个小时了,但无济于事。

代码如下:

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)。它给出的值为 1,即 P(1,2) 的值。

【问题讨论】:

    标签: matlab loops


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 2015-07-14
      相关资源
      最近更新 更多