让我们调用第一列数据集k
Xk
和第二个Yk
(大小m x 1
)。如果我正确理解您的问题,那么对于每个数据集k
{ Xk
, Yk
} 您正在寻找两个标量 ak
,bk
这样
Yk == ak * Xk.^bk
对于所有元素1..m
由于方程/约束多于参数(m
只有两个参数的方程),我们寻求最小二乘解。
从log
等式两边取
log Yk == log ak + bk * log Xk
定义新变量YYk <- log(Yk)
,XXk <- log(Xk)
我们有一个线性方程log ak
和bk
- 这可以在没有fmincon
或其他优化工具的情况下轻松解决。
实际上,如果我们将列向量附加到XXk
另一列全为 1(即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