使用涉及多个变量的 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
的任何值似乎都一样好。
我有一个包含多个变量的方程式。我必须通过将输入提供给所有其他变量 [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
的任何值似乎都一样好。