查看: 162|回复: 3|关注: 0

[已解决] 提示带有下标的赋值维度不匹配,该怎么修改

[复制链接]

新手

19 麦片

财富积分


050


27

主题

60

帖子

0

最佳答案
clear;
clc;
RAU=5:5:50;
alpha=0.5;
theta=0.8;
Theta=theta.^2;
pmax=5;
Qmax=6:2:10;
nt=1;
nr=1;
Iteration =1000; % must be grater than 1e2
color = ['b';'r';'g'];
notation = ['-o';'->';'<-'];
for m=1:length(Qmax)
    for i=1:length(RAU)
        for j=1:Iteration
            E=unifrnd(1,8,1,RAU(i));%unifrnd(a,b,m,n)产生m*n阶[a,b]均匀分布
            E_sum(i)=0;
            sum=0;
            for ii=1:RAU
                E_sum(i)=E_sum(i)+E(ii);
            end
            P(i)=theta*E_sum(i);
            for k = 1 : RAU(i)
                h(k)=sqrt(1/2)*(randn(nt,nr)+sqrt(-1)*randn(nt,nr));%产生服从复高斯分布的信道系数
                gain(k)=norm(h(k))^2;
            end
            Gain(:,j)=sort(gain,'descend');
            [Capacity(i,j) PowerAllo] = WaterFilling_alg1(P(i),Gain(:,j),RAU(i));

        end
    end
     f1=figure(1);
    hold on
    plot(RAU,mean(Capacity'),notation(m,:),'color',color(m,:),'LineWidth',2);
    clear Gain
end

function [Capacity PowerAllo] = WaterFilling_alg1(PtotA,H,N)
H=H+ eps;      %eps表示浮点相对精度  %lamd
PowerAllo = (PtotA + sum(1./H))/N - 1./H;   %被分配的功率
%===============================================
while length(find(PowerAllo < 0 ))>0
    IndexN = find(PowerAllo <= 0 );
    IndexP = find(PowerAllo > 0);
    MP = length(IndexP);
    PowerAllo(IndexN) = 0;
   HT=H(IndexP);

    PowerAlloT = (PtotA + sum(1./HT))/MP - 1./HT;
    PowerAllo(IndexP) = PowerAlloT;
end
PowerAllo = PowerAllo.';   
Capacity  = sum(log2(1+ PowerAllo.' .* H));
end








Q(B{}@%5`SJJ3_AL_3@1[@Y.png

入门

90 麦片

财富积分


50500


2

主题

161

帖子

16

最佳答案
  • 关注者: 7
发表于 2019-10-7 19:21:46 | 显示全部楼层
你的gain变量开始是1x5的,后面变成1x10的了,而你的Gain之前是空的,之后的赋值使其成为5行x列的矩阵,但是后面补进去的1x10的就跟之前的5行不匹配了,所以会报错。

新手

19 麦片

财富积分


050


27

主题

60

帖子

0

最佳答案
 楼主| 发表于 2019-10-7 19:38:07 | 显示全部楼层
Leedear 发表于 2019-10-7 19:21
你的gain变量开始是1x5的,后面变成1x10的了,而你的Gain之前是空的,之后的赋值使其成为5行x列的矩阵,但 ...

请问该怎么修改

入门

90 麦片

财富积分


50500


2

主题

161

帖子

16

最佳答案
  • 关注者: 7
发表于 2019-10-7 19:55:18 | 显示全部楼层 |此回复为最佳答案
你可以吧Gain初始化为20*1000的全零矩阵,然后把每一次的gain赋值到Gain的每一列中,即Gain(1:length(gain),i) = gain;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表