

MATLABで、ある簡単なプログラムを作成しています。その中の関数（下記）にて、実行しようとするとエラーメッセージが出ました。その関数の内容は、ある関数に変数を飛ばし、その計算結果が100を超える場合は返り値に200を返し、そうでない場合はその計算結果をそのまま返すというものです。

[code]

    　function T=Tx(n) 
        i=(n+3)^7
       %　i が200より大きい場合は返り値に200を返す
       if(i>200)
        T=200;
       else
        T=i; 
      end
    
[/code]

上記の関数を実行しようとした際、下記のようなエラーメッセージが出ました。

[code]

    symfunをlogicalに変換できない
    　 エラー（line4)
    　　 if(i>200)
    
[/code]

原因がわからず、全く手も足も出ない状況です。どなたか尽力いただければ幸いです。


CC BY-SA 3.0
2017-06-24T12:58:26.987
35859
2022-05-17T04:10:56.077
2017-06-24T13:20:09.980
21092
23997
question
matlab
MATLAB にて、原因のわからないエラーメッセージが出ました


Symbolic Math toolbox
がインストールしてあるのですね。私もあまり詳しくはありませんが、おそらく以下のようなことが起きているのだと思います。

関数`Tx(n)`にシンボリック関数`A(t)`を渡しているので、`Tx`内の変数 i も

[code]

    (A(t) + 3)^7
    
[/code]

のようなシンボリック関数になっています。更に`if(i>200)`のところでも`i>200`も

[code]

    200 < (A(t) + 3)^7
    
[/code]

のようなシンボリック関数になります。

ここで if 文は、式ではなく文ですので、実際に`200 < (A(t) + 3)^7`を評価して、if か else
内の、どちらかを実行しようとします。しかし、`200 < (A(t) + 3)^7`はシンボリック関数 (symfun)
のままで具体的な値がないので、論理値 (logical) に変換できず、エラーになっています。

何をしたいのかが、よくわからないのですが、合成関数のようなことをしたいのでしたら、`Tx(A(3))`のように、都度、具体的な値で呼ぶのではいけないのでしょうか。


CC BY-SA 3.0
2017-06-25T06:58:16.080
35869
2017-06-25T06:58:16.080
3605
35859
answer