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

조회 수: 6 (최근 30일)
HIronori Kamachi
HIronori Kamachi 2019년 4월 11일
댓글: 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!