Hauptinhalt

EquationProblem

Nichtlineares Gleichungssystem

Beschreibung

Geben Sie ein Gleichungssystem unter Verwendung von Optimierungsvariablen an und lösen Sie es mithilfe von solve.

Tipp

Den vollständigen Workflow finden Sie unter Problem-Based Workflow for Solving Equations.

Erstellung

Erstellen Sie ein EquationProblem-Objekt mithilfe der Funktion eqnproblem. Fügen Sie dem Problem Gleichungen hinzu, indem Sie OptimizationEquality-Objekte erstellen und diese als Equations-Eigenschaften des EquationProblem-Objekts festlegen.

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

Warnung

Der problembasierte Ansatz unterstützt in folgenden Bereichen keine komplexen Werte: Zielfunktion, nichtlineare Gleichungen und nichtlineare Ungleichungen. Wenn bei einer Funktionsberechnung ein komplexer Wert auftritt, selbst als Zwischenwert, kann dies zu einem falschen Endergebnis führen.

Eigenschaften

alle erweitern

Problemgleichungen, angegeben als OptimizationEquality-Array oder als Struktur mit OptimizationEquality-Arrays als Feldern.

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

Problembezeichnung, angegeben als Zeichenfolge oder Zeichenvektor. Die Software verwendet Description nicht für Berechnungen. Description ist eine beliebige Bezeichnung, die Sie für jeden beliebigen Zweck verwenden können. Sie können beispielsweise ein Modell oder ein Problem freigeben, archivieren oder präsentieren und beschreibende Informationen zu dem Modell oder Problem in Description festhalten.

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

Datentypen: char | string

Diese Eigenschaft ist schreibgeschützt.

Optimierungsvariablen im Objekt, angegeben als Struktur aus OptimizationVariable-Objekten.

Datentypen: struct

Objektfunktionen

evaluateEvaluate optimization expression or objectives and constraints in problem
issatisfiedConstraint satisfaction of an optimization problem at a set of points
optimoptionsErstellen von Optimierungsoptionen
prob2structConvert optimization problem or equation problem to solver form
showDisplay information about optimization object
solveSolve optimization problem or equation problem
solversDetermine default and valid solvers for optimization problem or equation problem
varindexMap problem variables to solver-based variable index
writeSave optimization object description

Beispiele

alle reduzieren

Zur Lösung des nichtlinearen Gleichungssystems

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

nach dem problembasierten Ansatz definieren Sie zunächst x als Optimierungsvariable mit zwei Elementen.

x = optimvar("x",2);

Erstellen Sie die erste Gleichung als Optimierungsgleichung.

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

Erstellen Sie die zweite Gleichung ebenfalls als Optimierungsgleichung.

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

Erstellen Sie ein Gleichungsproblem und fügen Sie die Gleichungen in das Problem ein.

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

Betrachten Sie die Problemstellung.

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

Lösen Sie das Problem ausgehend vom Punkt [0,0]. Geben Sie den Startpunkt beim problembasierten Ansatz als Struktur an, wobei die Variablennamen die Felder der Struktur bilden. Bei diesem Problem gibt es nur eine 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.

<stopping criteria details>
sol = struct with fields:
    x: [2×1 double]

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

exitflag = 
    EquationSolved

Betrachten Sie den Lösungspunkt.

disp(sol.x)
    0.3532
    0.6061

Bei nicht unterstützten Funktionen ist fcn2optimexpr erforderlich

Sollten Ihr Gleichungsfunktionen nicht aus elementaren Funktionen zusammengesetzt sein, müssen Sie die Funktionen mithilfe von fcn2optimexpr in Optimierungsausdrücke umwandeln. Für das vorliegende Beispiel gilt:

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;

Siehe Supported Operations for Optimization Variables and Expressions und Convert Nonlinear Function to Optimization Expression.

Erstellen Sie ein Gleichungssystem mit zwei Optimierungsvariablen.

x = optimvar("x");
y = optimvar("y");
prob = eqnproblem;
prob.Equations.eq1 = x^2 + y^2/4 == 2;
prob.Equations.eq2 = x^2/4 + 2*y^2 == 2;

Lösen Sie das Gleichungssystem ausgehend von x=1,y=1/2.

x0.x = 1;
x0.y = 1/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.

<stopping criteria details>
sol = struct with fields:
    x: 1.3440
    y: 0.8799

Werten Sie die Gleichungen an den Punkten x0 und sol aus.

vars = optimvalues(prob,x=[x0.x sol.x],y=[x0.y sol.y]);
vals = evaluate(prob,vars)
vals = 
  1×2 OptimizationValues vector with properties:

   Variables properties:
      x: [1 1.3440]
      y: [0.5000 0.8799]

   Equation properties:
    eq1: [0.9375 8.4322e-10]
    eq2: [1.2500 6.7431e-09]

Am ersten Punkt, x0, weisen die Gleichungen eq1 und eq2 beide Werte ungleich null auf. Am zweiten Punkt, sol, weisen die Gleichungen Werte nahe null auf, wie es für eine Lösung zu erwarten ist.

Ermitteln Sie den Erfüllungsgrad der Gleichungen mithilfe von issatisfied.

[satisfied details] = issatisfied(prob,vars)
satisfied = 1×2 logical array

   0   1

details = 
  1×2 OptimizationValues vector with properties:

   Variables properties:
      x: [1 1]
      y: [1 1]

   Equation properties:
    eq1: [0 1]
    eq2: [0 1]

Der erste Punkt, x0 stellt keine Lösung dar, und satisfied ist für diesen Punkt gleich 0. Der zweite Punkt, sol, stellt eine Lösung dar, und satisfied ist für diesen Punkt gleich 1. Die Gleichungseigenschaften zeigen, dass am ersten Punkt keine der beiden Gleichungen erfüllt ist, am zweiten Punkt hingegen beide erfüllt sind.

Versionsverlauf

Eingeführt in R2019b

alle erweitern