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

9 次查看(过去 30 天)
HIronori Kamachi
HIronori Kamachi 2019-4-11
関数ハンドルと配列の組み合わせについて関数ハンドルと配列の組み合わせについてご教示ください
自分で定義した関数のパラメータを種々変更し、出力を得ることを考えています。
その際、パラメータを例えば[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
配列に格納しておいたパラメータをループですべて変数に落として食わせればうまくいくのはわかりますが、式によってはパラメータの増減があったり、パラメータの組み合わせが多数あったりするので、配列をそのまま使えれば大変楽になるのですが、何とかうまくやる方法はないでしょうか。

采纳的回答

madhan ravi
madhan ravi 2019-4-11
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 个评论
HIronori Kamachi
HIronori Kamachi 2019-4-11
I could not think of using "num2cell" as such.
It solved by only adding one line.
Thank you very much!

请先登录,再进行评论。

更多回答(1 个)

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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 MATLAB 入門 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!