フィルターのクリア

how to combine symbolics and if statement?

26 ビュー (過去 30 日間)
Karthik Nimishakavi
Karthik Nimishakavi 2016 年 10 月 15 日
編集済み: Karan Gill 2017 年 10 月 17 日
Hello, My function is like this
y=x+2 for 0<=x<=10
y = x^2 for 10<x<=500 and x belongs to 0,500.
so I tried like this
syms x
if x>=0 && x<=10
y=x+2
else y=x^2
end
but i am getting an error saying
"Conversion to logical from sym is not possible"
"Operands to the || and && operators must be convertible to logical scalar values".
Please help me how to overcome this.

採用された回答

Walter Roberson
Walter Roberson 2016 年 10 月 15 日
You cannot use if together with symbolic expressions.
You should be considering using numeric expressions together with logical indexing. See though http://www.mathworks.com/matlabcentral/answers/301165-ode-suite-for-solving-switched-systems#comment_397941 for a discussion on hidden problems with one way of coding that.
You could also code the obscure
evalin(symengine, 'piecewise([0 <= x and x <= 10, x+2], [10 < x and x <= 500, x^2])')
but you will find that it probably will not be of any use to you.
  1 件のコメント
Karthik Nimishakavi
Karthik Nimishakavi 2016 年 10 月 15 日
thanks, I'll try that

サインインしてコメントする。

その他の回答 (1 件)

Karan Gill
Karan Gill 2016 年 10 月 20 日
編集済み: Karan Gill 2017 年 10 月 17 日
Piecewise is available starting 16b: <http://www.mathworks.com/help/symbolic/piecewise.html>
In this case:
syms y(x)
y(x) = piecewise(0<=x<=10, x+2, 10<x<=500, x^2);
Now try
y(1)
ans =
3
>> y(12)
ans =
144
  1 件のコメント
Walter Roberson
Walter Roberson 2016 年 10 月 20 日
Thanks, Karan, I had missed seeing that.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeAssumptions についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by