【问题标题】:Loop with separate iterations in MATLAB在 MATLAB 中使用单独的迭代循环
【发布时间】:2016-08-12 17:57:23
【问题描述】:

我想在 MATLAB 中使用以下方程组计算变量 h。写它的正确方法是什么?

h(1) = 1 - z(1);
h(2) = 1 - h(1) - z(2);
h(3) = 1 - h(1) - h(2) - z(3);
h(4) = 1 - h(1) - h(2) - h(3) - z(4);
h(5) = 1 - h(1) - h(2) - h(3) - h(4) - z(5);
h(6) = 1 - h(1) - h(2) - h(3) - h(4) - h(5) - z(6);

【问题讨论】:

    标签: matlab loops


    【解决方案1】:

    您可以使用 diff 来完成此操作,它获取任意两个元素之间的差异。

    z = [1 4 5 7 8 3];
    
    h = [0 -diff(z)];
    %     0    -3    -1    -2    -1     5
    

    我们如何确定使用diff 是因为我们可以很容易地写出条款并看到大多数事情都取消了

    h(2) = 1 - h(1) - z(2)
    h(2) = 1 - (1 - z(1)) - z(2)
    h(2) = 1 - 1 + z(1) - z(2)
    h(2) = z(1) - z(2)
    

    【讨论】:

    • 对不起,为什么是cumsum?在每个方程中,它都有不同的值。
    • 嗨,是的。我会试试这个。
    【解决方案2】:

    下面的代码应该大部分都可以工作。诀窍是设置一个包含 z 的数组。

    h=[]% empty array
    h(1)=1-z(1)
    for counter=2:N
        h(counter)=1-cumsum(diff(h(1:counter-1)))-z(counter)
    
    end
    

    【讨论】:

    • 嗨,不,它不工作。右手边只取一个 h 值,但要减去的 h 变量的个数随着顺序的增加而增加。
    • 您应该研究使用 diff 命令以及累积和来计算 h 的累积差异。
    • 每次循环都会扩展h,这是非常效率低下
    • 完全同意。我也更喜欢你的解决方案。
    • 我尝试了编辑版本,现在我有一个错误,说元素的数量不一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多