Hello People :),
I have a 2464x220 matrix with 44 countries represented by 56 rows each and 5 columns each. I want to do some matrix mulitplication and sum the co2 emissions e11 +e21 in the end, but it calculates 44 times the same number(which is correct, but just for 1 country ) . It just gives me the first countries number and repeats it although i am trying to tell matlab to calcluate it for 44 different countries. I did the following:
kk=1:56:2464;
yy=1:5:220;
Co2_CB=ones([44,1]);
for j=kk
v=j+55;
r=yy;
q=r+4;
e11_j=sum(Q(j:v,r:q),'all');
e21_j=Q(1:2464,r:q);
e21_j(j:v,:)=[];
e21_j=sum(e21_j,'all');
Co2_CB(j)=e11_j+e21_j;
end
Co2_CB(Co2_CB==0)=[];
Co2_CB(Co2_CB==1)=[];
I dont understandt why matlab does not calculates the other 43 numbers.
Thanks in advance

6 个评论

Your kk is not sequential so your for j=kk is not using sequential numbers, so your C02_CB(j) is not going to write to sequential locations.
It is not clear from your code what e11 and e21 are really supposed to represent. These lines,
e11_j=sum(Q(j:v,r:q),'all');
e21_j=Q(1:2464,r:q);
e21_j(j:v,:)=[];
e21_j=sum(e21_j,'all');
Co2_CB(j)=e11_j+e21_j;
are equivalent to the single line of code
Co2_CB(j)=sum(Q(:,r:q),'all')
So, the partitioning into e11 and e21 is inconsequential in what you have posted for us thus far.
I have a big matrix 2464x220 representing emission of 56 sectors of 44 countries ( on the rows 56x44=2464), the columns represent final demand of the 5 different consumers of 44 countries(5x44=220). I want to compute 2 different emission calculations, since it the e21 represent emissions outside of the country imported, I need for each country the all emission of the countrys specifiy columns but always avoiding the domestic 56 sectors (rows).
e11 just represent the countrys domestic emission,1: 56 domestic sectors and 1:5 domestic demand
Matt J
Matt J 2021-2-12
编辑:Matt J 2021-2-12
But if e11_j is the total emission from the j-th country and e21_j is the total emission from every other country, then the sum e11_j+e21_j will simply be the total emission from all countries. There is no real j-dependence in e11_j+e21_j .
it worked now, it was somethin with the sequence
thanks all of you

请先登录,再进行评论。

 采纳的回答

Matt J
Matt J 2021-2-12
编辑:Matt J 2021-2-12
Note that you can use sepblockfun
to do blockwise summation over the 56x5 sub-tiles of Q.
E11=sepblockfun(Q,[56,5],'sum')
This might make it easier to see how to get the restof what you want.

1 个评论

Hey Matt,
Thanks for your anwser, but i think the main problem is the e21, because i did a different method and it worked:
tt=1:56:2464;
pp=1:5:220;
Co2_PB=ones([44,1]);
for i=tt;
o=i+55;
p=pp;
q=p+4;
e11_j=sum(Q(i:o,p:q),'all');
e12_i=sum(Q(i:o,1:220));
e12_i(:,p:q)=[];
e12=sum(e12_i,'all');
Co2_PB(i)=sum(e11_j+e12,'all');
end
Co2_PB(Co2_PB==0)=[];
Co2_PB(Co2_PB==1)=[];
since the e11 is the same under both methods, i dont get what the problem is.

请先登录,再进行评论。

更多回答(0 个)

类别

在 帮助中心 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by