编辑:5月8日。感谢下面的评论。
我有一套关于公司和年份的数据。每个公司的数据都存储在一个单元阵列中。我需要运行一个函数firm
来估算每个公司的向量。有成千上万的公司。如果我专门为一家公司编写这个功能,那就顺利了,但我不知道如何一次将功能应用到每个阵列单元。
我对单个单元格的函数是(内部的一些计算被简化):
function obj=firm(data,s)
a=data(:,1);
b=data(:,2);
obj=f(a,b,s);
%obj is a function of a,b and s to estimate
end
然后当我使用fminsearch
时,它运作良好:
[mix, mifval]=fminsearch(@(s) firm(data{1,1},s),zeros(1,n))
但现在考虑将其应用于数千家公司(数千个电池)。我写了一个循环:
function obj=firm(data,s)
n=size(data,2);
for i=1:n
a=data{1,i}(:,1);
b=data{1,i}(:,2);
% here I want i to be a loop from 1 to n.
obj=f(a,b,s{1,i});
% Obj is a function of a, b and the s I focus on.
end
end
然后我打电话给:
[mix, mifval]=fminsearch(@(s) whole(supdata,supitem,s),a)
%a is the initial value of s, a matrix of n*12
返回的混合正好是n * 12,但mifval只是一个标量,它应该是一个n * 1向量,返回obj
的最小值。
我该如何解决?感谢。