3

パラメータとして送信される関数とベクトルを評価する matlab 関数を作成しようとしています。matlab 関数で評価できるように、関数を送信する方法を見つけようとして苦労しています。関数なしでそれを行う方法を見つけましたが、matlab関数内で評価しようとして少し迷っています。以下は私のコードです...

これは私がやろうとしていることです...

x = [x1 x2]';
f = x(x1)^2 + 2 * (x2)^2

x = [5 10];
f = (5)^2 + 2 * (10)^2 % which I would like to return 225, not a column vector

これは私が持っているものであり、私が試したことです...

x = [5 10]';

% without using a matlab function
% k = 1
% f = x(k)^2 + 2 * x(k + 1)^2;   % returns the correct answer of 225

f = x^2 + 2 * x^2       % complains about the scalar 2
f = x.^2 + 2 * x.^2     % returns a column vector [75; 300]
function [value] = evalFunction(f,x)
value = f(x);

私はもう試した...

f = @(x) x.^2 + 2 * (x+1).^2;
value = evalFunction(@f,x)      %Error: "f" was previously used as a variable

だから私は試しました...

f = @(x) x.^2 + 2 * (x+1).^2;
value = evalFunction(f,x)       %value = [97;342]

私はmatlabを初めて使用するので、助けていただければ幸いです。私はいくつかの調査を行っており、ここでスタックオーバーフローでいくつかのものを見つけましたが、それを機能させることができないようです. これを行うには他の方法があることを見てきましたが、最終的には matlab evalFunction 関数にさらにコードを追加する予定なので、この方法で行いたいと思います。ありがとう!

4

2 に答える 2

3

あなたはおそらくCのバックグラウンドからこれに来ています-Matlabでは、追加されx+1たベクトル全体です.1でオフセットされた要素ではありません.x1

必要な機能は

f = @(x)x(1).^2 + 2 * (x(2)).^2;

または、もう少し「matlab のような」ものにする:

f = @(x) [1 2] * x(1:2)'.^2;

これは、 の最初の 2 つの要素の要素ごとの 2 乗をx列ベクトルとして実行し、次に との行列乗算を実行[1 2]します。

1 * x(1) .^2 + 2 * x(2) .^2;

これはあなたが求めていたもののようです。

注意:これをテストする機会がありませんでした...

于 2013-10-08T03:18:39.523 に答える