【问题标题】:How to use for loop with series in MATLAB如何在 MATLAB 中使用带有系列的 for 循环
【发布时间】:2020-11-18 15:18:28
【问题描述】:

我有一个在图像中的方程

我正在尝试绘制 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 返回的答案太多了,据我所知,它应该只给出 7 个... 而且我是matlab和一般编码的新手,所以如果答案很明显,我仍然不知道如何使它工作:D

【问题讨论】:

    标签: matlab for-loop series


    【解决方案1】:

    让我们先澄清一些事情。

    为了绘制(任何类型的)二维绘图,您需要在 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 更长,有一些方法可以使代码更简短或更友好。但是,让我们在以后做这些。

    【讨论】:

    • “为了做一个 2D 绘图(任何类型),你需要在 Matlab 中的两个向量。它们应该是相等的长度” 1. 我不确定这是真实的。你可以用一个向量做散点图或线图,它假设x向量是1:length(y)。 2. 如果用Nx7 矩阵绘制1x7 向量,它会将1x7 向量广播到矩阵并创建N 线。每行是1x7 向量与矩阵的每一行1x7This example 在 Octave 在线,但你明白了......
    • @PranavHosangadi:技术上不正确。而且您甚至不需要多个系列来打破陈述。例如,如果你想做一个样条线......只是介绍一种思考如何绘图的方法。
    猜你喜欢
    • 2020-02-13
    • 2019-09-04
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 2018-04-10
    • 2021-12-19
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多