0

私は MATLAB の初心者で、友人が宿題の問題について助けを求めてきました。ドキュメントと推測とチェックをいじるだけで答えを思いつきましたが、誰かが私にもっと良い方法を教えてくれることを望んでいました.

セットアップは次のとおりです。テーブルが提供されます

x   y   z
x_1 y_1 z_1
x_2 y_2 z_2
x_3 y_3 z_3
x_4 y_4 z_4

これをマトリックスに格納しましたM。MATLAB でまだ定義されていない関数 $f(x,y,z)=x^2+yz^3$ があり、列ベクトルを取得したい

[ f(x_1, y_1, z_1)
  f(x_2, y_2, z_2)
  f(x_3, y_3, z_3)
  f(x_4, y_4, z_4) ]

この問題は、単一の式で達成する必要があると述べています。

私が思いついた解決策は

arrayfun(@(x,y) x^2+y-z^3, M(:,1), M(:,2), M(:,3))

(MATLAB ではなく) プログラマーとして、私はこの解決策がごみのように見えると言います。MATLABでこれを行うためのより良い/より受け入れられる方法はありますか?

4

2 に答える 2

1

関数f(x,y,z)が固定されている場合は、行列要素を直接操作できます。つまり、次のように書くことができます

M(:,1).^2 + M(:,2) - M(:,3).^3

必要な出力ベクトルを取得します。

于 2012-09-03T15:26:26.977 に答える
0

f が固定関数でない場合、次のようなものを使用します

g = @(row) f(row(1), row(2), row(3));
arrayfun(@(r) g(M(r,:)), 1:size(M,1));
于 2012-09-04T09:08:21.113 に答える