Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

基于问题的方程求解工作流

注意

Optimization Toolbox™ 提供两种求解方程的方法。本主题描述基于问题的方法。基于求解器的优化问题设置描述基于求解器的方法。

要求解方程组,请执行以下步骤。

  • 使用 eqnproblem 创建一个方程问题对象。问题对象是一个容器,您可以在其中定义方程。方程问题对象将定义问题和问题变量中存在的任何边界。

    例如,创建一个方程问题。

    prob = eqnproblem;
  • 使用 optimvar 创建命名变量。优化变量是用于描述方程的符号变量。在变量定义中包含任何边界。

    例如,创建一个名为 'x' 的 15×3 变量数组,其下界为 0,上界为 1

    x = optimvar('x',15,3,'LowerBound',0,'UpperBound',1);
  • 使用问题变量定义方程。例如:

    sumeq = sum(x,2) == 1;
    prob.Equations.sumeq = sumeq;

    注意

    如果您的非线性函数不是由多项式、有理式和初等函数(如 exp)组成的,可以使用 fcn2optimexpr 将其转换为优化表达式。请参阅将非线性函数转换为优化表达式Supported Operations for Optimization Variables and Expressions

    如有必要,在方程中包含额外参数作为工作区变量;请参阅在基于问题的方法中传递额外的参数

  • 对于非线性问题,将初始点设置为结构体,其字段是优化变量名称。例如:

    x0.x = randn(size(x));
    x0.y = eye(4); % Assumes y is a 4-by-4 variable
  • 使用 solve 求解问题。

    sol = solve(prob);
    % Or, for nonlinear problems,
    sol = solve(prob,x0)

除了这些基本步骤之外,您还可以在求解问题之前使用 showwrite 来回顾问题定义。使用 optimoptions 设置 solve 的选项,如 Change Default Solver or Options 中所述。

警告

基于问题的方法不支持目标函数、非线性等式或非线性不等式中使用复数值。如果某函数计算具有复数值,即使是作为中间值,最终结果也可能不正确。

注意

一个优化问题中的所有名称必须具有唯一性。具体来说,所有变量名称、目标函数名称和约束函数名称都不能相同。

有关具有多项式的基本方程求解示例,请参阅基于问题求解多项式非线性方程组。对于一般的非线性示例,请参阅基于问题求解非线性方程组。有关更多扩展示例,请参阅非线性方程组

另请参阅

| | | | | |

相关主题