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

11 visualizaciones (últimos 30 días)
HIronori Kamachi
HIronori Kamachi el 11 de Abr. de 2019
Comentada: HIronori Kamachi el 11 de Abr. de 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
配列に格納しておいたパラメータをループですべて変数に落として食わせればうまくいくのはわかりますが、式によってはパラメータの増減があったり、パラメータの組み合わせが多数あったりするので、配列をそのまま使えれば大変楽になるのですが、何とかうまくやる方法はないでしょうか。

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (1)

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

Iniciar sesión para comentar.

Categorías

Más información sobre MATLAB 入門 en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!