【问题标题】:MATLAB for loop to multiple columnsMATLAB for 循环到多列
【发布时间】:2021-07-20 12:36:50
【问题描述】:

我在 MATLAB 中开发了以下代码块来计算 RSI。

%RSI Calculation
n = [14:2:18];

for i = 1:n
    gainC = diff(ABC).*((diff(ABC))> 0);
    lossC = -(diff(ABC)).*((diff(ABC)) < 0);
    avg_gainC = movmean(gainC,[i-1 0],'omitnan'); 
    avg_lossC = movmean(lossC,[i-1 0],'omitnan'); 
    RS = (avg_gainC ./ avg_lossC);
    ABC_RSI = 100 - (100 ./ (1+RS));
end

我需要知道循环的输出如何创建表“ABC_RSI”以及与n 相关的列。预期的输出是 14w_RSI 16w_RSI18w_RSI

我尝试过使用: ABC_RSI.n = 100 - (100 ./ (1+RS));

任何帮助将不胜感激。

【问题讨论】:

    标签: arrays matlab for-loop multidimensional-array


    【解决方案1】:

    我不确定我是否理解这个问题,但如果我假设 ABC 是列/行向量,并且您尝试为 n 的每个不同值存储 RSI。如果是这种情况,那么我建议你做一个表单的双 for 循环

    %RSI Calculation
    n = [14:2:18];
    
    for j = 1 : length( n)
        n_j = n( j);
        for i = 1 : n_j
            gainC = diff(ABC).*((diff(ABC))> 0);
            lossC = -(diff(ABC)).*((diff(ABC)) < 0);
            avg_gainC = movmean(gainC,[i-1 0],'omitnan'); 
            avg_lossC = movmean(lossC,[i-1 0],'omitnan'); 
            RS = (avg_gainC ./ avg_lossC);
            ABC_RSI( :, j) = 100 - (100 ./ (1+RS));
        end
    end
    

    然后输出ABC_RSI 将具有与ABC 相同的列数和与n长度 相同的行数。

    【讨论】:

    • 谢谢,它很接近,但是它似乎将第一个数字复制了 'n' 3 次,而不是对每个数字运行计算。所以结果是三个相同的列。
    • 我提供的代码中有一个错字。我在第二个循环中使用n 而不是n_j。但即便如此,如果ABC 是列向量/矩阵,那么结果将是相同的,因为movmean 只是返回列向量/矩阵。你能提供一个ABC的例子吗?
    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2018-11-20
    • 2012-07-14
    • 1970-01-01
    相关资源
    最近更新 更多