あなたは本当に2つの質問をしています。1 つは、累積合計を計算する方法です。@SouldEcの答えは、cumsum
関数がそれを行う方法をすでに示しています。あなたの他の質問は
誰かが以下が機能しない理由を説明できますか
x = 1:10
s(x) = sum(A(1:x))
それは合理的です - あなたはベクトル展開が変わるべきだと思います
1:x
の中へ
1:1
1:2
1:3
1:4
など。しかし実際には、コロン演算子のどちらかの側の引数はスカラーでなければなりません。それら自体をベクトルにすることはできません。Matlab があなたの 2 行のコードでエラーをスローしていないとあなたが言ったことに驚いています。
したがって、より興味深い質問は、これらのベクトルをどのように作成しますか (について知らなかった場合、または使用したい場合cumsum
)?
ここでは、 を使用できますarrayfun
。要素ごとの入力として配列を使用して関数を評価します。これは、このような状況で役立ちます。だから私たちが書くなら
x = 1:10;
s = arrayfun(@(n)sum(A(1:n)), x);
これにより、 x のすべての値がループされ、それらが function に代入され、sum(A(1:n))
出来上がり - 問題が解決されます。
しかし、本当に - 正解は「使用するcumsum()
」です...