主要内容

通过额外的参数

额外的参数,固定变量或数据

有时,目标或约束函数除了独立变量之外还具有参数。额外的参数可以是数据,也可以表示在优化期间不会改变的变量。通过这些参数有三种方法:

全局变量很麻烦,因为它们不允许在功能之间重用名称。最好使用其他两种方法之一。

通常,对于基于问题的优化,您可以通过自然方式传递额外的参数。看通过基于问题的方法传递额外参数

例如,假设您希望最小化函数

F X = 一个 - B. X 1 2 + X 1 4. / 3. X 1 2 + X 1 X 2 + - C + C X 2 2 X 2 2 (1)

对于不同的值一个B., 和C。求解器接受仅取决于单个变量的客观函数(X在这种情况下)。以下部分显示如何提供附加参数一个B., 和C。解决方案金宝搏官方网站用于参数值一个= 4B.= 2.1, 和C= 4靠近X0.= [0.5 0.5]使用Fminunc.

匿名功能

使用匿名功能通过参数:

  1. 编写包含以下代码的文件:

    函数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;

  2. 将值分配给参数并定义函数句柄F通过在Matlab中输入以下命令来匿名函数®迅速的:

    a = 4;b = 2.1;c = 4;%分配参数值x0 = [0.5,0.5];f = @(x)parameterfun(x,a,b,c);

  3. 打电话给求解器Fminunc.匿名功能:

    [x,fval] = fminunc(f,x0)
    以下输出显示在“命令”窗口中:
    发现本地最低限度。优化完成,因为梯度的大小小于函数公差的默认值。x = -0.0898 0.7127 fval = -1.0316

笔记

在匿名函数中传递的参数是在创建匿名函数时存在的参数。考虑这个例子

a = 4;b = 2.1;c = 4;f = @(x)parameterfun(x,a,b,c)

假设你随后改变,一个到3并且跑了

[x,fval] = fminunc(f,x0)

你以前得到了同样的答案ParameterFun.用途a = 4.,值F是创造的。

要更改传递给函数的参数,请通过重新输入若要续订匿名功能:

a = 3;f = @(x)parameterfun(x,a,b,c)

您可以创建多个参数的匿名函数。例如,使用lsqcurvefit.,首先创建一个需要两个输入参数的函数,Xxdata.

fh = @(x,xdata)(sin(x)。* xdata +(x。^ 2)。* cos(xdata));x = pi;xdata = pi * [4; 2; 3];FH(x,xdata)ans = 9.8696 9.8696 -9.8696
现在打电话lsqcurvefit.
%假设ydata存在x = lsqcurvefit(fh,x,xdata,ydata)

嵌套功能

通过参数等式1通过嵌套函数,写一个文件

  • 接受一个B.C, 和X0.作为输入

  • 包含目标函数作为嵌套功能

  • 呼叫Fminunc.

以下是此示例的函数文件的代码:

功能[x,fval] = lunnested(a,b,c,x0)[x,fval] = fminunc(@ nestedfun,x0);%嵌套函数,用于计算目标函数函数y =嵌套函数(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;结束
目标函数是嵌套功能巢德福,它可以访问变量一个B., 和C

要运行优化,请输入:

a = 4;b = 2.1;C = 4;%分配参数值x0 = [0.5,0.5];[x,fval] = lunnested(a,b,c,x0)
输出与中的输出相同匿名功能

全局变量

全局变量可能是麻烦的,因此最好避免使用它们。此外,全局变量在并行计算中失败。看影响结果的因素

要使用全局变量,请将变量声明为全局在工作区中,并在使用变量的函数中。

  1. 写一个函数文件:

    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;

  2. 在MATLAB工作区中,定义变量并运行Fminunc.

    全球a b c;a = 4;b = 2.1;c = 4;%分配参数值x0 = [0.5,0.5];[x,fval] = fminunc(@ globalfun,x0)

输出与中的输出相同匿名功能

相关话题