如何在 MATLAB 中对系列使用 for 循环

How to use for loop with series in MATLAB

我这里有一个等式,在图中

我正在尝试绘制 y 轴是这个方程式,x 轴是时间 - 只是一个向量。 我所有的首字母:

%Initials
Beta=[24 123 117 262 108 45]*10^-5; %pcm
Lambda=[0.0127 0.0317 0.1160 0.3106 1.4006 3.8760]; %1/s
LAMBDA=10^-4 ;   %s
W=[ 0.376 -0.0133 -0.0426 -0.153  -0.972 -3.38 -29.5]
Rho=400*10^-5
t=linspace(1,30,7)

这是我正在使用的代码:

for n=1:7
    for j=1:6
    S1=Rho*sum(exp(W(n)'.*t)/(W(n)'.*(LAMBDA+(sum(Beta(j).*Lambda(j)./(W(n)+Lambda(j))^2)))))
    end
end
semilogy(t,S1,'b','linewidth',2); 

和 S1 returns 太多答案,据我所知,它应该只给出 7... 而且我是 matlab 和一般编码的新手,所以如果答案很明显,我仍然不知道如何让它工作:D

让我们先澄清一些事情。

为了绘制(任何类型的)二维图,您需要在 Matlab 中使用两个向量。它们的长度应该相等。一个代表所有的 x 坐标。另一个用于所有 y 坐标。

您在 t=linspace(1,30,7) 中获得 x 坐标。但是,你没有对应的y坐标。

对于您的情况,最好将您的公式表述为 t 的函数。为了清楚起见,让我们分解一下总和。例如,

function num = oscillation_modes_of_sort(t)
    outer_sum = 0;
    for j=1:numel(W)        
        inner_sum = 0;
        for i=1:numel(Beta)
            inner_sum = inner_sum + Beta(i)*Lambda(i)/(W(j)+Lambda(i))^2;
        end
        outer_sum = out_sum + exp(W(j)*t)/(W(j)*(LAMBDA+inner_sum));
    end
    num = Rho * outer_sum;
end

现在,您的 y 坐标将为 oscillation_modes_of_sort(t)

如果 WBeta 更长,则有一些方法可以使代码更简洁或更友好。但是让我们以后再做吧。