首页 > 解决方案 > 使用涉及许多变量的 fminsearch 最小化变量

问题描述

我有一个包含许多变量的方程。我必须a0通过将输入提供给所有其他变量来找到变量的最小值[a1, a2, a3, a4, a5, a6, x1]

x1是一个数组,其他变量对于常量 a0 值是常量。(其他 6 个变量随着 值的变化而变化a0,但现在我只是在考虑a0 = 0,因此这六个变量具有下面提到的“出于学习目的”的恒定值。)

我尝试同时为每个变量提供数组值以包含在函数中,但它不起作用,因为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 的范围内得到最小值。不完全确定。我是否将函数的输入作为正确的值?

标签: matlabmathematical-optimizationfminsearch

解决方案


tl;
在您的示例中,错字博士。代码不运行。优化是在域上最小化目标函数,并且肯定具有数学表示。您的目标函数似乎是一个常数a0,表明示例中的某些内容(数据或f可能是错误的。


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

  • 更改a1 = 1.329 e-05;a1 = 1.329e-05;
  • 换成^in除非.^f原因。
  • 删除)右端的多余部分f

目标函数相对于 是常数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)

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

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

图形显示域上的目标函数常数。


推荐阅读