# how to use anonymous function with equation without retype the all equation?

6 views (last 30 days)
Abdulaziz Abutunis on 21 Mar 2017
Commented: Walter Roberson on 21 Mar 2017
Dear all,
does anyone know how to use the anonymous function with equation that already defined without type it again. For example,eq1 = x^2+3+y^3; sol=@(x,y) eq1. I tried eq1(2,2) but it does not work as wished. Please help
Best regards, Aziz

Matt J on 21 Mar 2017
Edited: Matt J on 21 Mar 2017
If x, y and eq1 are symbolic variables, then there is no reason to be wrapping eq1 in an anonymous function. Just use the subs() command to evaluate eq1 at desired values. E.g.,
>> syms x y
>> eq1 = x^2+3+y^3
eq1 =
x^2 + y^3 + 3
>> val=double(subs(eq1,[x,y],[2,2]))
val =
15
If you insist on wrapping it in anonymous function, you could do something like,
sol=@(a,b) double(subs(eq1,[x,y],[a,b]))
Walter Roberson on 21 Mar 2017
If you are starting from symbolic expressions, then use matlabFunction() to create function handles for numeric processing.

Stephen23 on 21 Mar 2017
Edited: Stephen23 on 21 Mar 2017
>> sol = @(x,y)x^2+3+y^3;
>> sol(2,2)
ans =
15
exactly as the documentation shows:
Abdulaziz Abutunis on 21 Mar 2017
not necessary info for the question..if there is no way to do it then i will switch to another technique

Steven Lord on 21 Mar 2017
As written, eq1 is not an equation. x and y must be defined before you execute "eq1 = x^2+3+y^3;" or you will receive an error. If you want to define the equation once and use it later, execute:
sol = @(x,y) x.^2+3+y.^3;
Note I used .^ so you can call sol with a nonscalar array, not just a scalar. If you need eq1 to be the value of that function for specific values of x and y:
eq1 = sol(2, 2)