Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

EquationProblem

Sistema de ecuaciones no lineales

Descripción

Especifique un sistema de ecuaciones utilizando variables de optimización y resuelva el sistema con solve.

Sugerencia

Para ver el flujo de trabajo completo, consulte Flujo de trabajo basado en problemas para resolver ecuaciones.

Creación

Cree un objeto EquationProblem utilizando la función eqnproblem. Añada ecuaciones al problema creando objetos OptimizationEquality y estableciéndolos como propiedades Equations del objeto EquationProblem.

prob = eqnproblem;
x = optimvar('x');
eqn = x^5 - x^4 + 3*x == 1/2;
prob.Equations.eqn = eqn;

Advertencia

El enfoque basado en problemas no es compatible con valores complejos en una función objetivo, igualdades no lineales o desigualdades no lineales. Si el cálculo de una función tiene un valor complejo, incluso como valor intermedio, el resultado final puede ser incorrecto.

Propiedades

expandir todo

Ecuaciones de problema, especificadas como un arreglo OptimizationEquality o una estructura con arreglos OptimizationEquality como campos.

Ejemplo: sum(x.^2,2) == 4

Etiqueta de problema, especificada como una cadena o vector de caracteres. El software no utiliza Description para el cálculo. Description es una etiqueta arbitraria que puede utilizar por cualquier motivo. Por ejemplo, puede compartir, archivar o presentar un modelo o problema, y almacenar información descriptiva sobre el modelo o el problema en Description.

Ejemplo: "An iterative approach to the Traveling Salesman problem"

Tipos de datos: char | string

Esta propiedad es de solo lectura.

Variables de optimización en el objeto, especificadas como una estructura de objetos OptimizationVariable.

Tipos de datos: struct

Funciones del objeto

optimoptionsCrear opciones de optimización
prob2structConvert optimization problem or equation problem to solver form
showMuestre información sobre el objeto de optimización
solveResolver un problema de optimización o un problema de ecuación
varindexMap problem variables to solver-based variable index
writeSave optimization object description

Ejemplos

contraer todo

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 Supported Operations for Optimization Variables and Expressions y Convert Nonlinear Function to Optimization Expression.

Historial de versiones

Introducido en R2019b