我正在尝试在Matlab中编写以下优化问题:
g =argminΣ k = 1,2,3 ((v k - c 1 ) - g·(D k - c 2 ))²
c 1 且c 2 是常量。 v k 和D k 是向量。 g必须是积极的。
我已经意识到MATLAB有一个内置函数fminsearch应该能够执行任务,但是我不知道如何在函数中包含所有foreach
的总和。 / p>
答案 0 :(得分:3)
为什么要费心去寻找?最小化函数是未知g
中二阶的简单多项式函数,当其导数为零时得到极值,即
Σk= 1,2,3 [-2 *((vk - c1) - g *(Dk - c2))*(Dk - c2)] = 0
产生:
gm =Σk= 1,2,3 [(vk - c1)*(Dk - c2)] /Σk= 1,2,3(Dk - c2)^ 2
如果gm为负数,则选择第一个可用的非负值,即零:
g = max(0,gm)
Bam!救援的基本数学!...: - )
MATLAB代码为:
%// some test data
v = [1,2,3];
D = [4,5,6];
c1 = 0.3;
c2 = 0.7;
%// minimizer
g = max(0, sum((v(:)-c1).*(D(:)-c2)) / sum((D(:)-c2).^2));