Main Content

Resolver un sistema de ecuaciones no lineal, basado en problemas

Para resolver el sistema de ecuaciones no lineal

exp(-exp(-(x1+x2)))=x2(1+x12)x1cos(x2)+x2sin(x1)=12

utilizando el enfoque basado en problemas, defina primero x como una variable de optimización de dos elementos.

x = optimvar('x',2);

Cree la primera ecuación como una expresión de igualdad de optimización.

eq1 = exp(-exp(-(x(1) + x(2)))) == x(2)*(1 + x(1)^2);

De forma similar, cree la segunda ecuación como una expresión de igualdad de optimización.

eq2 = x(1)*cos(x(2)) + x(2)*sin(x(1)) == 1/2;

Cree un problema de ecuación y coloque las ecuaciones en el problema.

prob = eqnproblem;
prob.Equations.eq1 = eq1;
prob.Equations.eq2 = eq2;

Revise el problema.

show(prob)
  EquationProblem : 

	Solve for:
       x


 eq1:
       exp((-exp((-(x(1) + x(2)))))) == (x(2) .* (1 + x(1).^2))

 eq2:
       ((x(1) .* cos(x(2))) + (x(2) .* sin(x(1)))) == 0.5

Resuelva el problema comenzando por el punto [0,0]. Para el enfoque basado en problemas, especifique el punto inicial como una estructura, con los nombres de variable como campos de la estructura. Para este problema solo existe una variable, x.

x0.x = [0 0];
[sol,fval,exitflag] = solve(prob,x0)
Solving problem using fsolve.

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.
sol = struct with fields:
    x: [2x1 double]

fval = struct with fields:
    eq1: -2.4070e-07
    eq2: -3.8255e-08

exitflag = 
    EquationSolved

Visualice el punto de solución.

disp(sol.x)
    0.3532
    0.6061

Las funciones no compatibles requieren fcn2optimexpr

Si las funciones de la ecuación no están compuestas por funciones elementales, deberá convertir las funciones en expresiones de optimización utilizando fcn2optimexpr. Para el presente ejemplo:

ls1 = fcn2optimexpr(@(x)exp(-exp(-(x(1)+x(2)))),x);
eq1 = ls1 == x(2)*(1 + x(1)^2);
ls2 = fcn2optimexpr(@(x)x(1)*cos(x(2))+x(2)*sin(x(1)),x);
eq2 = ls2 == 1/2;

Consulte Operaciones compatibles con variables y expresiones de optimización y Convertir una función no lineal en una expresión de optimización.

Consulte también

|

Temas relacionados