赋值A(I)= B的错误,B和I中的元素数必须相同

时间:2015-07-10 15:21:09

标签: matlab

我将数据集保存为.mat,我正在尝试解决未知变量Ga和Ta的非线性方程组。我使用fsolve来解决它,相关代码的一部分是:

function F = msabase(x)
load ('matlab.mat');
Ta = x(1);
Ga = x(2);
util_a = exp(lamda.*(alpha_a - cost - w.*log(Ga)));
util_t = exp(lamda.*( - 2.5 - w.*log(2*0.80)));
F(1) = Ga - c0.*(1.+c1.*(Ta./cap).^c2).*d;
F(2) = Ta - sum.*(util_a/(util_a+util_t));

在数据集的每一行中,给出了所有其他变量的值,即lamda,alpha_a,cost等。在给出的代码的第7行中,我得到错误"在赋值A(I)= B中,B中的元素数量和  我必须是同一个" 我无法理解为什么,因为它应该是元素操作的元素。

2 个答案:

答案 0 :(得分:0)

尝试在分配前预先分配F。如果您知道F是一个2乘1的向量,请在第7行之前的某处插入F = zeros(2,1)。如果您对F的维度一无所知,请将其初始化为空矩阵并附加到它:

F = []
F = [F; (Ga - c0.*(1.+c1.*(Ta./cap).^c2).*d)];
F = [F; (Ta - sum.*(util_a/(util_a+util_t)))];

请注意,MATLAB在附加矢量/矩阵方面效率不高,因此请尽可能预先分配。

答案 1 :(得分:0)

您收到该错误是因为您尝试将向量/矩阵元素分配给F中的单个广告位。维度不匹配是因为您尝试将多个值映射到F中的单个空格中,这就是您收到错误的最终原因。

我的一个建议是使用单元格数组或创建存储值的2D矩阵。如果您更喜欢单元阵列方法,则每个单元格都会存储所需的计算,如下所示:

F = cell(2,1);

F{1} = Ga - c0.*(1.+c1.*(Ta./cap).^c2).*d;
F{2} = Ta - sum.*(util_a/(util_a+util_t));

然后,要访问正确的广告位,请执行F{1}F{2}。如果您需要2D矩阵方法,可以通过执行以下操作将两个计算连接到单个矩阵中:

 F = [Ga - c0.*(1.+c1.*(Ta./cap).^c2).*d; Ta - sum.*(util_a/(util_a+util_t))];

这假设每个结果都是单行向量,因此这将生成一个2D矩阵,其中每一行都是所需的结果。我不确定每个计算的大小,所以为了使事情保持一致,我将确保两行代码都是行向量:

F1 = Ga - c0.*(1.+c1.*(Ta./cap).^c2).*d;
F2 = Ta - sum.*(util_a/(util_a+util_t));
F = [F1(:).'; F2(:).'];