Clear Filters
Clear Filters

Nonscalar arrays of function handles are not allowed; use cell arrays instead.

5 views (last 30 days)
syms o p
fun1=o+p;
fun2=o*p+5;
eq1=matlabFunction(fun1);
eq2=matlabFunction(fun2);
bbb=fsolve(@(o,p) [eq1;eq2],[0,1]);
What am I doing wrong?

Accepted Answer

Steven Lord
Steven Lord on 9 Apr 2022
You need to evaluate the function handles in your fsolve call. Alternately you could skip converting the symbolic expressions into function handles and use solve.
syms o p
fun1=o+p;
fun2=o*p+5;
eq1=matlabFunction(fun1);
eq2=matlabFunction(fun2);
bbb=fsolve(@(op) [eq1(op(1), op(2));eq2(op(1), op(2))],[0,1]) % or
Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
bbb = 1×2
-2.2361 2.2361
bbb2 = solve(eq1, eq2, o, p)
bbb2 = struct with fields:
o: [2×1 sym] p: [2×1 sym]
vpa(bbb2.o, 5)
ans = 
vpa(bbb2.p, 5)
ans = 

More Answers (2)

David Hill
David Hill on 9 Apr 2022
Why use symbolic and convert?
fun=@(x)[x(1)+x(2);x(1)*x(2)+5];
x=fsolve(fun,[0,1]);

Torsten
Torsten on 9 Apr 2022
Edited: Torsten on 9 Apr 2022
syms o p
fun1 = o+p;
fun2 = o*p+5;
fun = [fun1,fun2];
eq = matlabFunction(fun);
bbb = fsolve(@(x)eq(x(1),x(2)),[0,1]);

Categories

Find more on Symbolic Math Toolbox in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!