필터 지우기
필터 지우기

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

조회 수: 5 (최근 30일)
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?

채택된 답변

Steven Lord
Steven Lord 2022년 4월 9일
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 = 

추가 답변 (2개)

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

Torsten
Torsten 2022년 4월 9일
편집: Torsten 2022년 4월 9일
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]);

카테고리

Help CenterFile Exchange에서 Symbolic Math Toolbox에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by