質問: MATLABで、ある簡単なプログラムを作成しています。その中の関数(下記)にて、実行しようとするとエラーメッセージが出ました。その関数の内容は、ある関数に変数を飛ばし、その計算結果が100を超える場合は返り値に200を返し、そうでない場合はその計算結果をそのまま返すというものです。 ``` function T=Tx(n) i=(n+3)^7 % i が200より大きい場合は返り値に200を返す if(i>200) T=200; else T=i; end ``` 上記の関数を実行しようとした際、下記のようなエラーメッセージが出ました。 ``` symfunをlogicalに変換できない エラー(line4) if(i>200) ``` 原因がわからず、全く手も足も出ない状況です。どなたか尽力いただければ幸いです。
回答: Symbolic Math toolbox がインストールしてあるのですね。私もあまり詳しくはありませんが、おそらく以下のようなことが起きているのだと思います。 関数`Tx(n)`にシンボリック関数`A(t)`を渡しているので、`Tx`内の変数 i も ``` (A(t) + 3)^7 ``` のようなシンボリック関数になっています。更に`if(i>200)`のところでも`i>200`も ``` 200 < (A(t) + 3)^7 ``` のようなシンボリック関数になります。 ここで if 文は、式ではなく文ですので、実際に`200 < (A(t) + 3)^7`を評価して、if か else 内の、どちらかを実行しようとします。しかし、`200 < (A(t) + 3)^7`はシンボリック関数 (symfun) のままで具体的な値がないので、論理値 (logical) に変換できず、エラーになっています。 何をしたいのかが、よくわからないのですが、合成関数のようなことをしたいのでしたら、`Tx(A(3))`のように、都度、具体的な値で呼ぶのではいけないのでしょうか。