首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MATLAB中保存嵌套循环的输出

在MATLAB中保存嵌套循环的输出
EN

Stack Overflow用户
提问于 2015-08-16 23:21:32
回答 2查看 125关注 0票数 0

我有以下代码,我希望输出矩阵Rpp为(10201,3)。我运行这段代码(这需要花费一点时间),然后我检查Rpp的矩阵大小,我看到(1,3),我尝试了很多事情,但找不到合适的方法。代码的逻辑是接受这6个值(包含4个常数值和2个变量值(从101个值中选择),并对3个不同的i1进行计算,并将3的每个输出向量存储在一个矩阵中,其中包含( 101 *101 (这2个可变值的对)行和3(针对每个i1)列)。

我感谢你的帮助

代码语言:javascript
复制
    Vp1=linspace(3000,3500,101);
    Vp2=3850;
    rho1=2390;
    rho2=2510;
    Vs1=linspace(1250,1750,101);
    Vs2=2000;
    i1=[10 25 40];


    Rpp = zeros(length(Vp1)*length(Vs1),length (i1));

    for n=1:length(Vp1)*length(Vs1)
    for m=1:length (i1)
    for l=1:length(Vp1)
        for k=1:length(Vs1)


           p=sin(i1)/Vp1(l);
           i2=asin(p*Vp2);
           j1=asin(p*Vs1(k));
           j2=asin(p*Vs2);
           a=rho2*(1-2*Vs2^2*p.^2)-rho1*(1-2*Vs1(k).^2*p.^2);
           b=rho2*(1-2*Vs2^2*p.^2)+2*rho1*Vs1(k)^2*p.^2;
           c=rho1*(1-2*Vs1(k)^2*p.^2)+2*rho2*Vs2^2*p.^2;
           d=2*(rho2*Vs2^2-rho1*Vs1(k)^2);
           E=b.*cos(i1)./Vp1(l)+c.*cos(i2)/Vp2;
           F=b.*cos(j1)./Vs1(k)+c.*cos(j2)/Vs2;
           G=a-d*(cos(i1)/Vp1(l)).*(cos(j2)/Vs2);
           H=a-d*(cos(i2)/Vp2).*(cos(j1)/Vs1(k));
           D=E.*F+G.*H.*p.^2;
           Rpp=((b.*(cos(i1)/Vp1(l))-c.*cos((i2)/Vp2)).*F-(a+d*((cos(i1)/Vp1(l))).*(cos(j2)/Vs2)).*H.*p.^2)./D
        end
    end
    end
    end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-17 01:15:04

使用for循环的方式是错误的。您正在运行length(Vp1)*length(Vs1) * length (i1) * length(Vp1) * length(Vs1)时间的计算。这是正确的方法。我将l转换为lll,这样就不会把它与数字1混淆起来。在第一个for循环的每一次迭代中,您都要运行length(Vs1)次数,并且需要使用k+(lll-1)*length(Vp1)指定的行号将结果( 1X3数组)分配给Rpp

代码语言:javascript
复制
for lll=1:length(Vp1)
    for k=1:length(Vs1)
       p=sin(i1)/Vp1(lll);
       i2=asin(p*Vp2);
       j1=asin(p*Vs1(k));
       j2=asin(p*Vs2);
       a=rho2*(1-2*Vs2^2*p.^2)-rho1*(1-2*Vs1(k).^2*p.^2);
       b=rho2*(1-2*Vs2^2*p.^2)+2*rho1*Vs1(k)^2*p.^2;
       c=rho1*(1-2*Vs1(k)^2*p.^2)+2*rho2*Vs2^2*p.^2;
       d=2*(rho2*Vs2^2-rho1*Vs1(k)^2);
       E=b.*cos(i1)./Vp1(lll)+c.*cos(i2)/Vp2;
       F=b.*cos(j1)./Vs1(k)+c.*cos(j2)/Vs2;
       G=a-d*(cos(i1)/Vp1(lll)).*(cos(j2)/Vs2);
       H=a-d*(cos(i2)/Vp2).*(cos(j1)/Vs1(k));
       D=E.*F+G.*H.*p.^2;
       Rpp(k+(lll-1)*length(Vp1),:)=((b.*(cos(i1)/Vp1(lll))-c.*cos((i2)/Vp2)).*F-(a+d*((cos(i1)/Vp1(lll))).*(cos(j2)/Vs2)).*H.*p.^2)./D;
    end
end
票数 0
EN

Stack Overflow用户

发布于 2015-08-17 01:03:37

尝尝这个。你们两个外环什么都没做。您从未使用过mn,所以我杀死了这两个循环。而且,您只是一直在每个循环中覆盖Rpp,所以您对Rpp的初始化没有做任何事情。我添加了一个index变量,将结果赋给方程,我认为这是Rpp的正确部分。

代码语言:javascript
复制
Vp1=linspace(3000,3500,101);
Vp2=3850;
rho1=2390;
rho2=2510;
Vs1=linspace(1250,1750,101);
Vs2=2000;
i1=[10 25 40];
Rpp = zeros(length(Vp1)*length(Vs1),length (i1));
index = 1;
for l=1:length(Vp1)
    for k=1:length(Vs1)    

        p=sin(i1)/Vp1(l);
        i2=asin(p*Vp2);
        j1=asin(p*Vs1(k));
        j2=asin(p*Vs2);
        a=rho2*(1-2*Vs2^2*p.^2)-rho1*(1-2*Vs1(k).^2*p.^2);
        b=rho2*(1-2*Vs2^2*p.^2)+2*rho1*Vs1(k)^2*p.^2;
        c=rho1*(1-2*Vs1(k)^2*p.^2)+2*rho2*Vs2^2*p.^2;
        d=2*(rho2*Vs2^2-rho1*Vs1(k)^2);
        E=b.*cos(i1)./Vp1(l)+c.*cos(i2)/Vp2;
        F=b.*cos(j1)./Vs1(k)+c.*cos(j2)/Vs2;
        G=a-d*(cos(i1)/Vp1(l)).*(cos(j2)/Vs2);
        H=a-d*(cos(i2)/Vp2).*(cos(j1)/Vs1(k));
        D=E.*F+G.*H.*p.^2;
        Rpp(index,:)=((b.*(cos(i1)/Vp1(l))-c.*cos((i2)/Vp2)).*F-(a+d*((cos(i1)/Vp1(l))).*(cos(j2)/Vs2)).*H.*p.^2)./D;
        index = index+1;
    end
end

结果:

代码语言:javascript
复制
>> size(Rpp)

ans =

       10201           3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32040899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档