How to use fminunc to solve simultaneous system of equations?

조회 수: 10 (최근 30일)
Ash Ash
Ash Ash 2018년 7월 13일
댓글: Matt J 2018년 7월 14일
Hi, I am looking to minimise a system of multivariate underconstrained simultaneous equations using fminunc, with 5 variables and 20 equations, which are all generated in a symbolic form because the equations will vary based on inputs.
Firstly I have figured out how to solve one example equation using fminunc:
x=sym('x',[2,1]);y=sym('y',[3,1]);
eqn=3*x(1)^2 + 2*x(1)*x(2) + x(2)^2 - 4*x(1) + 5*x(2);
fun = matlabFunction(eqn) ;
funMiddleMan = @(y) fun(y(1),y(2));
sol = fminunc(funMiddleMan, [1,1])
The problem I am faced with now, is how do I repeat this for multiple equations?
x=sym('x',[2,1]);y=sym('y',[3,1]);
eqn(1)=3*x(1)^2 + 2*x(1)*x(2) + x(2)^2 - 4*x(1) + 5*x(2);
eqn(2)=3*x(1)^2 + 2*x(1)*x(2) + x(2)^2 - 2*x(1) + 4*x(2);
fun = matlabFunction(eqn) ;
funMiddleMan = @(y) fun(y(1),y(2));
sol_2 = fminunc(funMiddleMan, [1,1])
I tried the script below and it gave me the following error
Error using fminunc (line 346)
Supplied objective function must return a scalar value.
Could you please help me? Thank you.
  댓글 수: 1
Kaushik Lakshminarasimhan
Kaushik Lakshminarasimhan 2018년 7월 13일
What is it that you are trying to minimize? You have two equations, so your funMiddleMan returns two outputs instead of one. You need to reformulate your objective so that funMiddleMan returns a scalar value.

댓글을 달려면 로그인하십시오.

답변 (2개)

Matt J
Matt J 2018년 7월 14일
Use FSOLVE instead of FMINUNC. It is better tailored to this specific type of problem. Also, you do not have to scalarize the objective function with FSOLVE, so it will mean less code modification for you.
  댓글 수: 2
Walter Roberson
Walter Roberson 2018년 7월 14일
fsolve() looks for simultaneous zeros, but the user wants to minimize.
Matt J
Matt J 2018년 7월 14일
I'm working on a hunch that that's not what the OP really wants. fsolve() will still try to minimize the norm of the objective if simultaneous zeros cannot be found

댓글을 달려면 로그인하십시오.


Walter Roberson
Walter Roberson 2018년 7월 14일
To minimize a system of equations, you need to use gamultiobj(), which will build pareto fronts.

카테고리

Help CenterFile Exchange에서 Get Started with Optimization Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by