# how to combine symbolics and if statement?

32 visualizzazioni (ultimi 30 giorni)
Karthik Nimishakavi il 15 Ott 2016
Modificato: Karan Gill il 17 Ott 2017
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".
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Risposta accettata

Walter Roberson il 15 Ott 2016
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 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Karthik Nimishakavi il 15 Ott 2016
thanks, I'll try that

Accedi per commentare.

### Più risposte (1)

Karan Gill il 20 Ott 2016
Modificato: Karan Gill il 17 Ott 2017
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 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Walter Roberson il 20 Ott 2016
Thanks, Karan, I had missed seeing that.

Accedi per commentare.

### Categorie

Scopri di più su Conversion Between Symbolic and Numeric in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by