Matlab在目标函数中传入自变量以外的参数

2019-08-05  本文已影响0人  坐看云起时zym

在编写目标函数时(尤其是一些比较复杂的优化问题),除了自变量,我们还需要传入一些非自变量的参数。针对这一问题,有三种解决方法,分别是:匿名函数、嵌套函数、全局变量。

1、匿名函数

创建一个.m文件,文件名parameterfun.m

function y = parameterfun(x,a,b,c)
y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + ...
  (-c + c*x(2)^2)*x(2)^2;

创建main.m文件

a = 4; b = 2.1; c = 4; % Assign parameter values
x0 = [0.5,0.5];
f = @(x)parameterfun(x,a,b,c);
[x,fval] = fminunc(f,x0)

在命令行中输入main,即可得到结果

result1.png

2、嵌套函数

创建一个.m文件,文件名runnested.m

function [x,fval] =  runnested(a,b,c,x0) 
[x,fval] = fminunc(@nestedfun,x0);
% Nested function that computes the objective function     
    function y = nestedfun(x)
        y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) +...
            (-c + c*x(2)^2)*x(2)^2;     
    end
end

创建main.m文件

a = 4; b = 2.1; c = 4;% Assign parameter values
x0 = [0.5,0.5];
[x,fval] = runnested(a,b,c,x0)

在命令行中输入main,即可得到结果


result2.png

3、全局变量

将非自变量的变量声明为全局变量
创建一个.m文件,文件名globalfun

function y = globalfun(x)
global a b c
y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + ...
    (-c + c*x(2)^2)*x(2)^2;

创建main.m文件

global a b c;
a = 4; b = 2.1; c = 4; % Assign parameter values
x0 = [0.5,0.5];
[x,fval] = fminunc(@globalfun,x0)

在命令行中输入main,即可得到结果


result3.png

参考:https://ww2.mathworks.cn/help/optim/ug/passing-extra-parameters.html

上一篇 下一篇

猜你喜欢

热点阅读