2013-02-14 148 views
0

我是编程的新手。我有大约100个数据集,每个都有2列。我想,以适应COL1数据COL2数据的幂函数,即MATLAB:在for循环中使用fmincon

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

(say a (x^b)). 

现在我想用最优化函数fmincon并获得两个参数的值。我想对所有的100个数据集重复这一点,因此希望将这个fmincon包含在一个for循环中,在该for循环中我一次调用一个数据集中的数据。我已尽全力,我无法得到如何做到这一点。

有什么建议吗?

+0

从下面的评论到回答,似乎这个问题与数据集和'for'循环无关。这是关于如何使用fmincon的问题。因此,它措辞不佳,我建议它关闭或根本编辑。 – Shai 2013-02-14 20:27:35

回答

0

可以调用第一列数据集kXk和第二个Yk(大小m x 1)。如果我没有理解你的问题,然后为每个数据集k {XkYk}你正在寻找两个标量akbk这样

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

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

从公式产量

log Yk == log ak + bk * log Xk 

定义新的变量YYk <- log(Yk)XXk <- log(Xk)我们双方以log线性方程log akbk - 这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 
+0

非常感谢您的回复。我错过了我的问题中的一个重要成分。我想使用fmincon,因为我对其中一个标量(参数)有一些限制。否则,我同意使用log的线性化方程。 – user1957000 2013-02-14 19:54:26

+0

@ user1957000可惜你没有提到你的问题中的这个微小的细节。但基本上,在每次迭代时,您都有'for'循环遍历数据集'k','Xk'和'Yk' - 只需插入'fmincon'并完成它。 – Shai 2013-02-14 20:03:56

+0

多数民众赞成在我面临的问题..fmincon作为一个输入功能,但功能需要一些输入和返回一些输出。但在我的情况下,我没有任何输入的功能,而是我必须通过优化找到这些值。我不知道我有多清楚,但是如果您可以提供上面给出的代码片段,则会非常有帮助。预先感谢.. – user1957000 2013-02-14 20:20:41