使用涉及多个变量的 fminsearch 最小化一个变量

Minimization of a variable with fminsearch involving many variables

我有一个包含多个变量的方程式。我必须通过将输入提供给所有其他变量 [a1, a2, a3, a4, a5, a6, x1].

来找到变量 a0 的最小值

x1是一个数组,其他变量为常量a0值。 (其他6个变量随着a0的值的变化而变化,但现在我只考虑a0 = 0,所以这六个变量具有下面提到的恒定值'for the purpose of learning'。)

我尝试同时为每个变量提供数组值以包含在函数中,但它不起作用,因为我想 fminsearch 采用标量值。

a0 = 0;
x1 = -10:0.1:10;
a1 = 1.329438561310570 e-05;
a2 = -0.002504562092133;
a3 = -0.036785455629072;
a4 = 0.056797862719813;
a5 = 2.624845095825030;
a6 = 30.072580030528270;

f=@(a0) min(((max((((30*a0*(x1.^4))+(20*a1*(x1.^3))+(12*a2*(x1.^2))+.....(6*a3*x1)+(2*a4))/((1+((6*a0*(x1.^5))+(5*a1*(x1.^4))+(4*a2*(x1.^3))+(3*a3*(x1.^2))+(2*a4*(x1))+(a5))^2))^1.5)))-0.1)+(-0.1-(min((((30*a0*(x1.^4))+(20*a1*(x1.^3))+(12*a2*(x1.^2))+(6*a3*(x1))+(2*a4))/((1+((6*a0*(x1.^5))+(5*a1*(x1.^4))+(4*a2*(x1.^3))+(3*a3*(x1.^2))+(2*a4*(x1))+(a5))^2))^1.5)))));

a0_min = fminsearch(f,0);

我假设我会得到 a0 10^-7 或 10^-6 范围内的最小值。不完全确定。我是否将函数的输入作为正确的值?

tl;dr
你的例子中有错别字。代码没有 运行。优化是在域上最小化 objective 函数,并且 绝对具有数学表示 。您的 objective 函数似乎是相对于 a0 的常量,这表明示例中的某些内容(数据或 f 可能 是错误的。


该示例包含一些印刷错误。

  • a1 = 1.329 e-05; 更改为 a1 = 1.329e-05;
  • f 中的 ^ 更改为 .^,除非有其他原因。
  • 删除 f 右端多余的 )

objective函数相对于a0是常量。

% MATLAB 2018b
x1 = -10:0.1:10;
a1 = 1.329e-05;
a2 = -0.003;
a3 = -0.037;
a4 = 0.057;
a5 = 2.625;
a6 = 30.073;

f=@(a0) min(((max((((30*a0*(x1.^4))+(20*a1*(x1.^3))+(12*a2*(x1.^2))+6*a3*x1)+(2*a4))/((1+((6*a0*(x1.^5))+(5*a1*(x1.^4))+(4*a2*(x1.^3))+(3*a3*(x1.^2))+(2*a4*(x1))+(a5)).^2)).^1.5)))-0.1)+(-0.1-(min((((30*a0*(x1.^4))+(20*a1*(x1.^3))+(12*a2*(x1.^2))+(6*a3*(x1))+(2*a4))/((1+((6*a0*(x1.^5))+(5*a1*(x1.^4))+(4*a2*(x1.^3))+(3*a3*(x1.^2))+(2*a4*(x1))+(a5)).^2)).^1.5))));

此代码

a0init = 0;                             % Initial guess for a0
[a0star, f_min] = fminsearch(f,a0init)

执行但初始猜测对 objective 函数没有影响。例如,尝试 [a0star, f_min] = fminsearch(f,-2)

f(a0)a0 的多个值的评估揭示了一个更深层次的问题。没有什么可以最小化的, a0 的任何值似乎都一样好。