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.

eqnproblem

Crear un problema de ecuación

Desde R2019b

Descripción

Utilice eqnproblem para crear un problema de ecuación.

Sugerencia

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

ejemplo

prob = eqnproblem crea un problema de ecuación con propiedades predeterminadas.

ejemplo

prob = eqnproblem(Name,Value) especifica opciones adicionales utilizando uno o más argumentos de par nombre-valor. Por ejemplo, puede especificar ecuaciones cuando construye el problema utilizando el nombre Equations.

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 Operaciones compatibles con variables y expresiones de optimización y Convertir una función no lineal en una expresión de optimización.

Cuando x es una matriz de 2 por 2, la ecuación

x3=[1234]

es un sistema de ecuaciones polinómicas. Aquí, x3 significa x*x*x utilizando multiplicación de matrices. Puede formular y resolver este sistema fácilmente utilizando el enfoque basado en problemas.

En primer lugar, defina la variable x como una variable de matriz de 2 por 2.

x = optimvar('x',2,2);

Defina la ecuación que desea resolver en términos de x.

eqn = x^3 == [1 2;3 4];

Cree un problema de ecuación con esta ecuación.

prob = eqnproblem('Equations',eqn);

Resuelva el problema comenzando por el punto [1 1;1 1].

x0.x = ones(2);
sol = 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: [2x2 double]

Estudie la solución.

disp(sol.x)
   -0.1291    0.8602
    1.2903    1.1612

Muestre el cubo de la solución.

sol.x^3
ans = 2×2

    1.0000    2.0000
    3.0000    4.0000

Argumentos de entrada

contraer todo

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value el valor correspondiente. Los argumentos nombre-valor deben aparecer tras otros argumentos, aunque no importa el orden de los pares.

En versiones anteriores a R2021a, utilice comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: prob = eqnproblem('Equations',eqn)

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

Argumentos de salida

contraer todo

Problema de ecuación, devuelto como un objeto EquationProblem. Habitualmente, para completar la descripción del problema se especifica prob.Equations y, para ecuaciones no lineales, una estructura de punto inicial. Resuelva un problema completo llamando a solve.

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.

Historial de versiones

Introducido en R2019b