【问题标题】:Matlab arrays, vectorsMatlab 数组,向量
【发布时间】:2013-11-29 03:25:47
【问题描述】:

我有一个愚蠢的问题,目前我似乎无法回答(也许太累了)。如何将变量存储在数组中?这是我的代码:

for u0=xDesired(1):0.01:xDesired(2),
     [T,Y] = ode23(@RateDE,[T],[Yminitial Yinitial],[],[u0 g k]);
    %#Peaks
    P1 = findpeaks(T,Y(:,1),0,-1,5,5); %Peaks for Alpha(T)
    P2 = findpeaks(T,Y(:,2),0,-1,5,5);  %Peaks for Tetha(T)
    W = size(P2(:,2)); %Counts the number of peaks in Tetha(T)
    W1 = size(P1(:,2)); %Counts the number of peaks in Alpha(T)
    PAl = P1(W1-10:end,2); %Extracts the last11 elements in Alpha(T)
    PBe = P2(W-10:end,2); %Extracts the last 11 elements in Tetha(T)
    %#Valleys 
    v1 = findvalleys(T,Y(:,1),0,-1,5,5);  %Valleys for Alpha(T)
    v2 = findvalleys(T,Y(:,2),0,-1,5,5); %Valleys for Tetha(T)
    Z = size(v1(:,2)); %Counts the number of valleys in Alpha(T)
    Z1 = size(v2(:,2)); %Counts the number of valleys in Tetha(T) 
    VAl = v1(Z-10:end,2); %Extracts the last 11 elements in Alpha(T)
    VBe = v2(Z1-10:end,2); %Extracts the last 11 elements in Tetha(T)
    **%#Period
    Periodalpha = mean(abs(PAl - VAl));
    Periodbetha = mean(abs(PBe - VBe));
    %#Amplitudes
    Ampalpha = mean(P1(W1-10:end,3));
    Ampbetha = mean(P2(W1-10:end,3));
    %display(u0)
    %display(Periodalpha) 
    %display(Ampalpha)
 end

 %plot(u0, Periodalpha); 
 %plot(u0, Ampalpha);

我要存储在数组中的变量是“Periodalpha/betha 和 Ampalpha/betha”,这样我就可以绘制 u0 与 Periodalpha 然后 betha 等 ..

但是,在工作区我没有得到这些变量的数组,我只得到它的最后一个值。

任何提示/帮助将不胜感激!提前谢谢

【问题讨论】:

    标签: arrays matlab vector


    【解决方案1】:

    让我们看一下变量 Periodalpha;你检查过大小(Periodalpha)吗?计算如下:

    Periodalpha = mean(abs(PAl - VAl));
    

    但在此之前你有:

    PAl = P1(W1-10:end,2); %Extracts the last11 elements in Alpha(T)
    

    VAl = v1(Z-10:end,2); %Extracts the last 11 elements in Alpha(T)
    

    我无法 100% 确定,但您似乎取了两个 11 个元素向量的差值,然后计算平均值,它返回单个标量值。所以你正在做这样的事情:

    mean(abs(rand(1,11) - rand(1,11)))
    
    ans =
    
        0.3040
    

    这可以解释为什么您会看到变量 Periodalpha 的单个值。

    至少我认为这是正在发生的事情。

    编辑:再次查看您的代码,我发现您正在迭代 u0 值,然后在每个值处迭代,计算 Periodalpha(除其他外)。但是每次通过循环时,您都不会保存任何以前的值,即每次都会重置 u0 和 Periodalpha 的值。

    所以只需将 u0 和 Periodalpha 值存储在单独的数组中。首先,像这样初始化几个跟踪数组(在 u0 循环之外):

    u0Track = [];
    PeriodalphaTrack = [];
    

    然后在循环中将新值附加到这些跟踪数组中:

    for u0 =
    ...
    
        u0Track = [u0Track u0];
        PeriodalphaTrack = [PeriodalphaTrack Periodalpha];
    end
    

    当你的循环完成后,你可以绘制(u0Track,PeriodalphaTrack)。

    有意义吗?

    【讨论】:

    • 没错,但现在我想知道如何将该标量存储回数组中,以便我可以针对 u0 进行绘图。
    • 也许我遗漏了一些东西,但我认为你会绘制多个 (x,y) 点?如果你不这样做也没关系,我只是想了解你在这里有什么。
    • 在 u0 的每次迭代中,我都会得到 periodalpha、periodbetha、ampalpha 和 ampbetha 的新值。然后,我将 u0 与 periodalpha、u0 与 periodbetha 等进行对比...我遇到的问题是,正如您之前提到的,我得到的是一个标量,而不是我可以绘制的数组。
    • 好的,我想我知道可能会发生什么,我将对我的答案进行编辑,如果可以解释,请告诉我。
    • 当您使用for 循环时,步骤的数量是预先知道的。因此,最好将跟踪变量直接初始化为其最终大小,以防止在每一步中增加这些变量。当然,您需要一个计数变量来知道您在哪一步以及将值存储在哪里。
    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多