我有 50 个观察值作为具有变量值的行和列。对于每个观察,我使用fsolve
来求解未知变量q_iz
。我正在尝试使用循环。我已经解决了第 1行的问题,但是当 MATLAB 转到第 2行时会抛出错误。另外,我想存储维度的求解值k
。(50,1)
我提出了一个更简单的代码来表示问题,如下所示:
global price gnw dataq_izc(c) c
price = ones(50,2);
gnw = ones(50,2,2);
dataq_izc = 0.20*ones(50,1);
k0 = 0.1+ zeros(50,1);
for c = 1:50
options=optimset('Display','notify','MaxFunEvals',10^7,'TolX',1e-8,'TolFun',1e-6,'MaxIter',10^5);
% Solve
k = fzero(@qiz,k0(c,1),options);
fprintf('Quantity\n');
disp(k);
end;
脚本'qiz'是:
function F = qiz(k)
global price gnw dataq_izc(c) c
q_iz = zeros(50,2,2);
i = 1.;
while i < 3
z = 1.;
while z < 3
q_iz(c,i,z) = k(c,1)*price(c,z)/gnw(c,i,z);
z = z + 1.;
end
i = i + 1.;
end;
q_izc = zeros(50);
c = 1.;
while c < 51;
i = 1.;
while i < 3
z = 1.;
while z < 3
q_izc(c) = q_izc(c) + q_iz(c,i,z);
z = z + 1.;
end
i = i + 1.;
end;
c = c + 1.;
end
F = q_izc(c) - dataq_izc(c,1);
当我运行此代码时,它在第一行得到解决,但是当它进入第二行时抛出错误:
FZERO 无法继续,因为用户提供的 function_handle ==> qiz 失败并出现以下错误。试图访问 k(2,1);索引超出范围,因为 numel(k)=1。