Effacer les filtres
Effacer les filtres

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

5 vues (au cours des 30 derniers jours)
HIronori Kamachi
HIronori Kamachi le 11 Avr 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
配列に格納しておいたパラメータをループですべて変数に落として食わせればうまくいくのはわかりますが、式によってはパラメータの増減があったり、パラメータの組み合わせが多数あったりするので、配列をそのまま使えれば大変楽になるのですが、何とかうまくやる方法はないでしょうか。

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (1)

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

Connectez-vous pour commenter.

Catégories

En savoir plus sur MATLAB 入門 dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!