【发布时间】:2017-08-11 15:33:09
【问题描述】:
我有 50 个观察值作为具有变量值的行和列。对于每个观察,我使用fsolve 来求解未知变量q_iz。我正在尝试使用循环。我已经为第 1st 行解决了它,但是当它转到第 2nd 行时,MATLAB 会抛出一个错误。另外,我想将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。
【问题讨论】:
-
你能发布一些全局变量的示例数据吗?
-
语句'global'的目的是调用'main'文件中的参数到脚本'qiz'。所以全球............也将在“主”文件中......这是你要问的吗?
-
否;例如,我们不知道
price的值,因此我们实际上无法运行此代码来重现问题。您能否发布一些示例数据,以便我们复制粘贴并运行? -
我已经输入了全局变量的值。如果现在可以告诉我
-
错误是因为您在调用
fzero时将k0(c,1)传递给函数qiz。这是k0向量的单个值。在函数qiz中,您要求输入第 c 个条目。只有1个条目。删除该函数中对k(c...的所有引用。
标签: matlab for-loop linear-equation