eqnproblem
说明
使用 eqnproblem
创建一个方程问题。
提示
有关完整的工作流,请参阅基于问题的方程求解工作流。
使用一个或多个名称-值对组参数指定其他选项。例如,您可以在构造问题时使用 prob
= eqnproblem(Name,Value
)Equations
名称来指定方程。
示例
基于问题求解非线性方程组
要使用基于问题的方法求解非线性方程组
请首先将 x
定义为一个二元素优化变量。
x = optimvar('x',2);
创建第一个方程作为优化等式表达式。
eq1 = exp(-exp(-(x(1) + x(2)))) == x(2)*(1 + x(1)^2);
同样,创建第二个方程作为优化等式表达式。
eq2 = x(1)*cos(x(2)) + x(2)*sin(x(1)) == 1/2;
创建一个方程问题,并将这些方程放入该问题中。
prob = eqnproblem; prob.Equations.eq1 = eq1; prob.Equations.eq2 = eq2;
检查此问题。
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
从 [0,0]
点开始求解问题。对于基于问题的方法,将初始点指定为结构体,并将变量名称作为结构体的字段。对于此问题,只有一个变量,即 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
查看解点。
disp(sol.x)
0.3532 0.6061
不受支持的函数要求 fcn2optimexpr
如果方程函数不是由初等函数组成的,您必须使用 fcn2optimexpr
将函数转换为优化表达式。对于本示例:
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;
请参阅Supported Operations for Optimization Variables and Expressions和将非线性函数转换为优化表达式。
基于问题求解多项式非线性方程组
当 x
是 2×2 矩阵时,方程
是多项式方程组。此处, 表示使用矩阵乘法的 。您可以使用基于问题的方法轻松地构造和求解此方程组。
首先,将变量 x
定义为一个 2×2 矩阵变量。
x = optimvar('x',2,2);
使用 x
定义要求解的方程。
eqn = x^3 == [1 2;3 4];
用此方程创建一个方程问题。
prob = eqnproblem('Equations',eqn);
从 [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]
检查解。
disp(sol.x)
-0.1291 0.8602 1.2903 1.1612
显示解的立方。
sol.x^3
ans = 2×2
1.0000 2.0000
3.0000 4.0000
输入参数
名称-值参数
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: prob = eqnproblem('Equations',eqn)
Equations
— 问题方程
[]
(默认) | OptimizationEquality
数组 | 以 OptimizationEquality
数组作为字段的结构体
问题方程,指定为 OptimizationEquality
数组或以 OptimizationEquality
数组作为字段的结构体。
示例: sum(x.^2,2) == 4
Description
— 问题标签
''
(默认) | 字符串 | 字符向量
问题标签,指定为字符串或字符向量。该软件不使用 Description
进行计算。Description
是任意标签,您可以将其用于任意目的。例如,您可以共享、存档或呈现模型或问题,并在 Description
中存储关于模型或问题的描述性信息。
示例: "An iterative approach to the Traveling Salesman problem"
数据类型: char
| string
输出参数
prob
— 方程问题
EquationProblem
对象
方程问题,以 EquationProblem
对象形式返回。通常,要完成问题描述,您需要指定 prob.Equations
,对于非线性方程,还需要指定初始点结构体。通过调用 solve
求解完整的问题。
警告
基于问题的方法不支持目标函数、非线性等式或非线性不等式中使用复数值。如果某函数计算具有复数值,即使是作为中间值,最终结果也可能不正确。
版本历史记录
在 R2019b 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)