# EquationProblem
非线性方程组
函数库: TyOptimization
# 说明
使用优化变量指定方程组,并使用 Solve 求解该方程组。
提示
有关完整的工作流,请参见基于问题的方程求解工作流。
# 创建结构体
使用 eqnproblem 函数创建一个 EquationProblem 结构体。通过创建 OptimizationEquality 并将它们设置为 EquationProblem 结构体的 Equations 属性,将方程添加到问题中。
警告
基于问题的方法不支持目标函数、非线性等式或非线性不等式中使用复数值。如果某函数计算具有复数值,即使是作为中间值,最终结果也可能不正确。
# 属性
Equations — 问题方程NamedTuple() (默认) | OptimizationEquality | 以 OptimizationEquality 作为字段的具名元组
问题方程,指定为 OptimizationEquality 或以 OptimizationEquality 作为字段的具名元组。
示例: @fcn2expr(sum(x.^2,2) == 4,x),其中 x 是 OptimizationVariable。
Description — 问题标签"" (默认) | 字符串
问题标签,指定为字符串。该软件不使用 Description 进行计算。Description 是任意标签,您可以将其用于任意目的。例如,您可以共享、存档或呈现模型或问题,并在 Description 中存储关于模型或问题的描述性信息。
示例: "Problem 1"
Variables — 问题中的优化变量OptimizationVariable
问题中的优化变量,指定为 OptimizationVariable 构成的向量。
# 示例
基于问题求解非线性方程组
要使用基于问题的方法求解非线性方程组
请首先将 x 定义为一个二元素优化变量。
using TyOptimization
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, 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
从
x0 = (;x = [0 0])
sol,fval,exitflag = Solve(prob,x0)
sol =
(x = [0.3532465619167724, 0.6060820265081073],)
fval =
2-element Vector{Float64}:
-2.406924060061044e-7
-3.8257579881850745e-8
exitflag =
1
如果方程函数不是由初等函数组成的,您必须使用 @fcn2expr 将函数转换为优化表达式。对于本示例:
eq1 = @fcn2expr(exp(-exp(-(x[1] + x[2]))),x) == x[2]*(1 + x[1]^2)
eq2 = @fcn2expr(x[1]*cos(x[2]) + x[2]*sin(x[1]),x) == 1/2