可以调用第一列数据集k
Xk
和第二个Yk
(大小m x 1
)。如果我没有理解你的问题,然后为每个数据集k
{Xk
,Yk
}你正在寻找两个标量ak
和bk
这样
Yk == ak * Xk.^bk
所有元素1..m
由于有多个方程/约束比参数(仅有两个参数的m
方程)我们寻求最小二乘解。
从公式产量
log Yk == log ak + bk * log Xk
定义新的变量YYk <- log(Yk)
和XXk <- log(Xk)
我们双方以log
有线性方程log ak
和bk
- 这can be solved easily没有fmincon
或其他优化工具。
事实上,如果我们追加列向量XXk
全部为一(即XXk(:,2)=1
)的另一列,我们可以以矩阵形式写我们的系统现在
XXk * [ b ; log(ak)] == YYk
一些Matlab代码:
N = 100; % number of data sets
a = zeros(1, N); % pre allocate room for all ak
b = zeros(1, N); % pre allocate room for all bk
for k = 1 : N
% get the data here: Xk = ???, Yk = ???
XXk = log(Xk);
XXk(:,2) = 1; % add all ones column
YYk = log(Yk);
tmp = XXk \ YYk
a(k) = exp(tmp(2));
b(k) = tmp(1);
end
从下面的评论到回答,似乎这个问题与数据集和'for'循环无关。这是关于如何使用fmincon的问题。因此,它措辞不佳,我建议它关闭或根本编辑。 – Shai 2013-02-14 20:27:35