2026a
# 基于问题的方程求解工作流
要求解方程组,请执行以下步骤。
使用 eqnproblem 创建一个方程问题对象。问题对象是一个容器,您可以在其中定义方程。方程问题对象将定义问题和问题变量中存在的任何边界;
例如,创建一个方程问题。
using TyOptimization prob = eqnproblem()使用 optimvar 创建命名变量。优化变量是用于描述方程的符号变量。在变量定义中包含任何边界;
例如,创建一个名为 "x" 的 15×3 变量数组,其下界为 0,上界为 1。
x = optimvar("x",15,3,Lowerbnd=0,Upperbnd=1)使用问题变量定义方程;
sumeq = sum(x,dims=1) == ones(1,3) prob.Equations = (sumeq = sumeq,)注意
方程的两侧必须有相同的数组维度,将 sumeq 写成 sum(x,dims=1) == 1 或 sum(x,dims=1) == ones(3) 都是不合法的。
提示
如果您的非线性函数不是由多项式、有理式和初等函数(如 exp)组成的,可以使用 @fcn2expr 将其转换为优化表达式。请参见优化变量和表达式支持的运算。
对于非线性问题,将初始点设置为具名元组,其字段是优化变量名称;
x0 = (x = zeros(15,3),)使用 Solve 求解问题。
sol = Solve(prob) # Or, for nonlinear problems, sol = Solve(prob,x0)除了这些基本步骤之外,您还可以在求解问题之前使用 show 或 write 来回顾问题定义。使用 optimoptions 或 optimset 设置 Solve 的选项,例如:
#For nonlinear problems, opts = optimoptions(:fsolve,Display="off") Solve(prob,x0,options=opts)警告
基于问题的方法不支持在目标函数、非线性等式和非线性不等式中使用复数值。如果某函数计算具有复数值,即使是作为中间值,最终结果也可能不正确。
注意
一个优化问题中的所有名称必须具有唯一性。具体来说,所有变量名称、目标函数名称和约束函数名称都不能相同。
# 另请参阅
eqnproblem | optimvar | Solve | show | @fcn2expr | write | optimoptions | optimset