MATLAB Answers

How to use function like `min` in symfun?(I got an error)

1 view (last 30 days)
For example, i want to create a symbolic function: f(x,y) = min(x-1,y+1);
when f(x,y) = x+y, everything is ok, but when it comes to min, error occured.
syms x y
f = symfun(min([x-1 y+1])),[x y])
I got error like this:
"Unable to convert expression into double array."
Help...

  0 Comments

Sign in to comment.

Accepted Answer

Thiago Henrique Gomes Lobato
You can't use min or max in symbolic variables in matlab. A work around can be this one:
syms x1 x2 real;
xlt = symfun(1/2*(x1+x2-abs(x1-x2)),[x1,x2]); %min
xgt = symfun(1/2*(x1+x2+abs(x1-x2)),[x1,x2]); %max

  4 Comments

Show 1 older comment
Walter Roberson
Walter Roberson on 26 Apr 2020
min() and max() are not banned,
>> min(sym(5), sym(-7))
ans =
-7
However, min() and max() want to be able to resolve which value is larger as soon as they are called, so for example if you have
syms x; min(sym(5), x-7)
then min() is not willing to leave that as an unresolved min(5, x-7) to be worked out later: it wants to compute the answer right then, and when x-7 cannot be converted to numeric to figure it out right then, then they fail.
Liming Fang
Liming Fang on 26 Apr 2020
ok i got it.
Does this mean that functions involved condition won't work?
And the answer below menthons "piecewise", i wonder whether it is used to solve functions involved condions.
Walter Roberson
Walter Roberson on 26 Apr 2020
It depends upon how the condition is constructed.
Functions you should avoid for symbolic expressions that include unresolved symbolic variables include min(), max(), and mod() . Most other functions are willing to postpone evaluation when they are passed symbolic variables, but those three do odd or undesirable things.
And the answer below menthons "piecewise", i wonder whether it is used to solve functions involved condions.
Yes, it is. You can even differentiate piecewise -- but the boundary conditions might not get the right value, as piecewise() expressions are often discontinuous on the boundaries and differentiating piecewise() does not return a special "undefined" result for the boundary.
However, solve() sometimes has difficulty with piecewise, especially something of the form piecewise(condition, expression, condition, expression...) == value . Sometimes you need to solve() against each of the expressions and then test to see whether the result meets the conditions

Sign in to comment.

Products


Release

R2020a