0

我是编程新手。我有大约 100 个数据集,每个数据集有 2 列。我想将 col1 数据拟合为 col2 数据的幂函数,即

variable(col1) = parameter1 x (variable(col2))^ parameter2

(say a (x^b)). 

现在我想使用优化函数 fmincon 并获取两个参数的值。我想对所有 100 个数据集重复此操作,因此想将此 fmincon 包含在一个 for 循环中,在该循环中我一次调用每个数据集的数据。我已尽力而为,但我无法做到这一点。

有什么建议么?

4

1 回答 1

0

让我们调用第一列数据集k Xk和第二个Yk(大小m x 1)。如果我正确理解您的问题,那么对于每个数据集k{ Xk, Yk} 您正在寻找两个标量 akbk这样

Yk == ak * Xk.^bk对于所有元素1..m

由于方程/约束多于参数(m只有两个参数的方程),我们寻求最小二乘解。

log等式两边取

log Yk == log ak + bk * log Xk

定义新变量YYk <- log(Yk)XXk <- log(Xk)我们有一个线性方程log akbk- 这可以在没有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
于 2013-02-14T19:43:12.733 回答