主要内容

在基于问题的方法中传递额外的参数

在优化问题中,目标函数或约束函数有时除了自变量外还有参数。额外的参数可以是数据,也可以表示在优化过程中不会改变的变量。

要在基于问题的方法中包含这些参数,只需在目标或约束函数中引用工作空间变量。

传递数据的最小二乘问题

例如,假设你有一个矩阵C而且dparticle.mat文件,这些矩阵表示问题的数据。将数据加载到工作区中。

负载粒子

查看矩阵的大小。

disp(大小(C))
2000 400
disp(大小(d))
2000年1

创建优化变量x适合于形成矢量的大小C * x

X = optimvar(“x”、大小(C, 2));

创建一个优化问题,以最小化项的平方和C*x - d受限于x是负的。

x.LowerBound = 0;Prob =优化问题;expr = sum((C*x - d).^2);概率。目标= expr;

包括数据C而且d把它们代入目标函数表达式中,就可以解决问题。解决问题。

[sol,fval,exitflag,output] = solve(prob)
使用lsqlin解决问题。最小值满足约束条件。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
索尔=带字段的结构:X: [400x1 double]
Fval = 22.5795
exitflag = OptimalSolution
输出=带字段的结构:消息:'最小值发现满足约束....cgiterations: [] solver: 'lsqlin'

带有额外参数的非线性问题

对非线性问题使用相同的方法。例如,假设您有一个包含多个变量的目标函数,其中一些变量是用于优化的固定数据。

类型parameterfun
函数y = parameterfun (x, a, b, c) y = x (a - b * (1) ^ 2 + x (1) ^ 4/3) * x (1) ^ 2 + x (1) * (2) + (- c + c * x (2) ^ 2) * x (2) ^ 2;

对于这个目标函数,x是2元向量,和一个b,c是标量参数。在工作空间中创建优化变量并分配参数值。

A = 4;B = 2.1;C = 4;X = optimvar(“x”2);

创建一个优化问题。因为这个目标函数是一个有理函数x,您可以根据优化变量指定目标。从点出发解决问题x0。x= [1/2;1/2]

Prob =优化问题;概率。Objective = parameterfun(x,a,b,c);x0。x= [1/2;1/2]; [sol,fval] = solve(prob,x0)
使用fminunc解决问题。找到局部极小值。优化完成,因为梯度的大小小于最优性公差的值。
索尔=带字段的结构:X: [2x1 double]
Fval = -1.0316

如果parameterfun如果不是由受支持的函数组成,您会转换吗金宝appparameterfun并以转换后的表达式为目标。看到金宝app优化变量和表达式的支持操作而且将非线性函数转化为优化表达式

Expr = fcn2optimexpr(@parameterfun,x,a,b,c);概率。目标= expr;[sol,fval] = solve(prob,x0)
使用fminunc解决问题。找到局部极小值。优化完成,因为梯度的大小小于最优性公差的值。
索尔=带字段的结构:X: [2x1 double]
Fval = -1.0316

版权所有The MathWorks, Inc.

另请参阅

相关的话题