让我们调用第一列数据集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