関数ハンドルと配列の組み合わせについて

3 Ansichten (letzte 30 Tage)
HIronori Kamachi
HIronori Kamachi am 11 Apr. 2019
Kommentiert: HIronori Kamachi am 11 Apr. 2019
関数ハンドルと配列の組み合わせについて関数ハンドルと配列の組み合わせについてご教示ください
自分で定義した関数のパラメータを種々変更し、出力を得ることを考えています。
その際、パラメータを例えば[a1,b1,c1;a2,b2,c2;...]のように配列に格納しておき、それを関数ハンドルに適用して解を[A1; A2;...]のように配列で出力しようと思い試してみましたがうまくいきません。
例えば
fh1=@(a,b,c)a*log10(b*c) と関数を定義しておき
param1=[10,10,10];    とし、
fh1(param1)       とすると、
入力引数が不足しています。 
エラー: @(a,b,c)a*log10(b*c)  とエラーになります。
fh1(10,10,10)       こうすると
ans =
20           うまくいきます。
a=10;b=10;c=10;    
fh1(a,b,c)        こうしても
ans =          うまくいきます
20
配列に格納しておいたパラメータをループですべて変数に落として食わせればうまくいくのはわかりますが、式によってはパラメータの増減があったり、パラメータの組み合わせが多数あったりするので、配列をそのまま使えれば大変楽になるのですが、何とかうまくやる方法はないでしょうか。

Akzeptierte Antwort

madhan ravi
madhan ravi am 11 Apr. 2019
I would do the way as Kazuya does it but as an alternative create comma-separated list and then operate:
Example:
fh1=@(a,b,c)a*log10(b*c);
X = repelem(10,3);
x = num2cell(X); % keep an eye here
fh1(x{:}) % all in one go
  1 Kommentar
HIronori Kamachi
HIronori Kamachi am 11 Apr. 2019
I could not think of using "num2cell" as such.
It solved by only adding one line.
Thank you very much!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Kazuya
Kazuya am 11 Apr. 2019
どこまで汎用的に使えるかわかりませんが
fh1=@(x) x(1)*log10(x(2)*x(3))
とすれば
param1=[10,10,10];
fh1(param1)
と実行できますが、どうでしょう?
  1 Kommentar
HIronori Kamachi
HIronori Kamachi am 11 Apr. 2019
ありがとうございます。
今回はシンプルなmadhanさんの方法を採用しますが、最初からそのような形に関数を作っておくという方法も使えそうですね。
非常に参考になりました。

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu 関数の基礎 finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!