美文网首页
Matlab在目标函数中传入自变量以外的参数

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

作者: 坐看云起时zym | 来源:发表于2019-08-05 16:56 被阅读0次

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

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

相关文章

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

    在编写目标函数时(尤其是一些比较复杂的优化问题),除了自变量,我们还需要传入一些非自变量的参数。针对这一问题,有三...

  • 第5天-python基础-函数与模块

    定义函数 Python中每个函数都有自己的名字、自变量和因变量。我们通常把Python中函数的自变量称为函数的参数...

  • 012 Python语法之函数

    函数 1. 如何定义函数 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 () 任何传入参数和自变量...

  • python学习笔记(3)

    函数 1)函数定义函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆...

  • python ------函数基础

    创建函数------def 1函数用def语句创建后接函数标识符名称和圆括号()。2任何传入参数和自变量必须放在圆...

  • pytorch深度学习之常见优化算法

    7.4动量法 在7.2节(梯度下降和随机梯度下降)中我们提到,目标函数有关自变量的梯度代表了目标函数在自变量当前位...

  • 函数定义和参数

    1. 函数定义 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。 任何传入参数和自变量必须放在圆...

  • 动手学深度学习(八) 优化算法进阶

    11.6 Momentum 在 Section 11.4 中,我们提到,目标函数有关自变量的梯度代表了目标函数在自...

  • 5.函数

    定义函数 函数代码快以def关键字开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆括号中间 函...

  • Python函数传参

    函数代码块以def关键字开头,后接函数标识符名称和圆括号() 所有传入的参数和自变量都必须放在圆括号内,可以在圆括...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/sdumdctx.html