Matlab 赋值的非单例rhs维度多于非单例下标
我正在尝试编写一个GMM函数。问题是,对于下一个循环,我得到了下一个错误:Matlab 赋值的非单例rhs维度多于非单例下标,matlab,matrix,Matlab,Matrix,我正在尝试编写一个GMM函数。问题是,对于下一个循环,我得到了下一个错误: Assignment has more non-singleton rhs dimensions than non-singleton subscripts. 错误与从这里开始的循环部分有关。在循环的下面是完整的代码。我在网上搜索,我尝试了很多东西,但我真的不明白为什么我会有这个问题。我还检查了包含的每个变量的大小,它们都是(694,1),我非常确定指定的每个变量的大小都是正确的 % for i=1:T-3
Assignment has more non-singleton rhs dimensions than non-singleton subscripts.
错误与从这里开始的循环部分有关。在循环的下面是完整的代码。我在网上搜索,我尝试了很多东西,但我真的不明白为什么我会有这个问题。我还检查了包含的每个变量的大小,它们都是(694,1),我非常确定指定的每个变量的大小都是正确的
%
for i=1:T-3
% g(i,1)=((beta.*((c1(i).^(-alpha)) + (b*beta*(c2(i)).^(-alpha))).*dj(i)) - (b*beta.*(c1(i)).^(-alpha))) - 1;
a(:,i)=(((beta.*((c1(i).^(-alpha)) + (b*beta*(c2(i)).^(-alpha))).*dj(i)) - (b*beta.*(c1(i)).^(-alpha))) - 1);
b(:,i)=(((beta.*((c1(i).^(-alpha)) + (b*beta*(c2(i)).^(-alpha))).*dj(i)) - (b*beta.*(c1(i)).^(-alpha))) - 1)*dj(i);
c(:,i)=(((beta.*((c1(i).^(-alpha)) + (b*beta*(c2(i)).^(-alpha))).*dj(i)) - (b*beta.*(c1(i)).^(-alpha))) - 1)*consumpt(i);
% function [q] = Q(param,M,data,cond)
T = length(data);
% Population moments
% [PMvec] = populat0ion_moments(param);
%sigma = param(2);
alpha = param(1);
beta = param(2);
b = param(3);
% c = ( data(3:end,1) + b*(data(2:end-1,1)))./(data(2:end-1,1) + b*(data(1:end-2,1) + b*( data(3:end,1)) + b*(data(2:end-1,1))./(data(2:end-1,1) + b*(data(1:end-2,1)));
dj= data(2:end-2,2)./data(1:end-3,2);
cpr = data(1:end-3,1)
ctd = data(2:end-2,1)
ctw = data(3:end-1,1)
ctw2= data(4:end, 1)
c1 = (ctw+b.*ctd)./(ctd+b.*cpr);
c2 = (ctw2+b.*ctw)./(ctd+b.*cpr);
consumpt = data(2:end-2,1)./data(1:end-3,1);
[row,col] = size(cpr);
djinst = dj(1:row,1);
%z = [1 consumpt djinst]
a = zeros(1, 694);
b = zeros(1, 694);
c = zeros(1, 694);
for i=1:T-4
% g(i,1)=((beta.*((c1(i).^(-alpha)) + (b*beta*(c2(i)).^(-alpha))).*dj(i)) - (b*beta.*(c1(i)).^(-alpha))) - 1;
a(:,i)=(((beta.*((c1(i).^(-alpha)) + (b*beta*(c2(i)).^(-alpha))).*dj(i)) - (b*beta.*(c1(i)).^(-alpha))) - 1);
b(:,i)=(((beta.*((c1(i).^(-alpha)) + (b*beta*(c2(i)).^(-alpha))).*dj(i)) - (b*beta.*(c1(i)).^(-alpha))) - 1)*dj(i);
c(:,i)=(((beta.*((c1(i).^(-alpha)) + (b*beta (c2(i)).^(-alpha))).*dj(i)) - (b*beta.*(c1(i)).^(-alpha))) - 1)*consumpt(i);
我得到以下错误:
Assignment has more non-singleton rhs dimensions than non-singleton subscripts
Error in Q (line 43)
a(:,i)=(((beta.*((c1(i).^(-alpha)) + (bbeta*(c2(i)).^(-alpha))).*dj(i)) - (bbeta.*(c1(i)).^(-alpha))) - 1);
看起来您正在将
b
从标量重新指定为向量,这可能会导致问题
b = param(3);
...
b = zeros(1, 694);
请告诉我们错误在哪里这是我得到的错误。。感谢您,作业中的非单例rhs维度比Q(第43行)a中的非单例下标错误多(:,i)=((β。*((c1(i)。^(-alpha))+(bbeta*(c2(i))。^(-alpha))).*dj(i))-(bbeta.*(c1(i))。^(-alpha))-1);
=
右边所有东西的size()是多少?
大小是(694,1)。这需要我们的帮助。你是对的。我唯一想更改的是代码的这一部分,将“b”改为实际的“d”。d(:,i)=((β。*((c1(i)。^(-alpha))+(bbeta*(c2(i))。^(-alpha))).*dj(i))-(bbeta.*(c1(i))。^(-alpha))-1)*dj(i);它是有效的。但现在我又遇到了另一个问题。我会设法解决的。我希望能处理好它。非常感谢,没问题!如果您有任何其他问题,请告诉我。如果我的答案解决了你的问题,你能在我的答案旁边打个记号吗?谢谢