24小时热门版块排行榜    

查看: 441  |  回复: 2

ice_huya

金虫 (小有名气)

[求助] 一个看起来很容易的程序,却困扰我好久,求助大家(关于生成矩阵) 已有1人参与

一个看起来很容易编的程序,却困扰我好久,希望大家帮忙挑错,先谢了!

问题描述如下:

有两个矩阵H, N:

H=[1;2;3;4;5;6];          %表示矩阵中各元素的值
N=[6;9;11;4;1;1];    %表示各元素出现的次数, 总次数为6+9+11+4+1+1=32

想生成如图中的新矩阵ss, 即:

当元素对应的出现总次数n为偶数时,前后各出现0.5*n次;
当元素对应的出现总次数n为奇数时,前:int(0.5*n) 后:n-int(0.5*n)
比如,H=1时, N=6, 则ss(1:3)=1, ss(30:32)=1;
            H=2时, N=9, 则ss(4:8)=2, ss(25:29)=2;
            .....

我的程序编写如下:

H=[1;2;3;4;5;6];         
N=[6;9;11;4;1;1];

w=1;
a=0;
N_ss=32;  %N中各元素出现总次数,也是ss的行数,新矩阵ss : 32*1

while w<=length(H)

         if mod(N(w,1),2)==0    %n为偶
            ss(a+1:a+0.5*N(w,1),1)=H(w,1);                    %前面0.5*n次
            ss(N_ss-a-0.5*N(w,1)+1:N_ss-a,1)=H(w,1);  %后面0.5*n次
         
         else                                   %n为奇
            
            ss(a+1:a+fix(0.5*N(w,1)),1)=H(w,1);               %前面int(0.5*n)次(去零取整)
            ss(N_ss-a-fix(0.5*N(w,1)):N_ss-a,1)=H(w,1);  %后面n-int(0.5*n)次(后面通常应比n为偶数时多1次)

         end
      

  a=a+fix(0.5*N(w,1));
  w=w+1;

end

ss
figure(1);
plot(ss(:,1));


可是如按上面程序运算,生成的新矩阵ss总是前后完全对称,无论n为奇或偶,到底是哪里出了问题呢。。。

期待大家的指教!!不胜感激!!!!
         










一个看起来很容易的程序,却困扰我好久,求助大家(关于生成矩阵)
台阶式矩阵图.JPG
回复此楼

» 猜你喜欢

已阅   关注TA 给TA发消息 送TA红花 TA的回帖

zxhitler

新虫 (初入文坛)

【答案】应助回帖

不是很明白楼主的意思,我根据我的理解,修改了一下你的程序,你可以看看是不是你需要的那个图
2楼2016-10-08 13:53:54
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

zxhitler

新虫 (初入文坛)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
ice_huya: 金币+30, ★★★★★最佳答案, 不好意思啊 最近比较忙 回复晚了 我自己也找到原来程序的问题在哪了!已经修改好了,咱们的结果是相同的 您的理解没错 非常感谢:) 2016-10-21 19:09:17
引用回帖:
2楼: Originally posted by zxhitler at 2016-10-08 13:53:54
不是很明白楼主的意思,我根据我的理解,修改了一下你的程序,你可以看看是不是你需要的那个图

不好意思,不知道怎么换行clear;clc;close all;
a = [1 1 1 2 2 2 2 3 3 3 3 3 4 4 5 6 4 4 3 3 3 3 3 3 2 2 2 2 2 1 1 1]; % 根据楼主的手图的数据

H=[1;2;3;4;5;6];         
N=[6;9;11;4;1;1];

jj = 0;% 前索引
N_ss = 32;  %N中各元素出现总次数,也是ss的行数,新矩阵ss : 32*1
kk = N_ss; % 后索引
ss = zeros(N_ss, 1);
for ii = 1:length(H)
    if mod(N(ii,1),2) == 0    %n为偶
        len = 0.5*N(ii,1);
        ss(jj+1:jj+len, 1) = H(ii, 1);  %前面0.5*n次
        ss(kk-len+1:kk,1) = H(ii,1);  %后面0.5*n次
        jj = jj + 0.5*N(ii,1);
        kk = kk - 0.5*N(ii,1);
    else    %n为奇
        if N(ii,1)==1
            ss(jj+1,1) = H(ii,1);    %前面int(0.5*n)次(去零取整)
            jj = jj + 1;
%             kk = kk - 1;
        else
            len = fix(0.5*N(ii,1));
            ss(jj+1:jj+len,1) = H(ii,1);    %前面int(0.5*n)次(去零取整)
            ss(kk-(N(ii)-len)+1:kk,1) = H(ii,1); %后面n-int(0.5*n)次(后面通常应比n为偶数时多1次)
            jj = jj + len;
            kk = kk - (N(ii) - len);
        end
    end
end

figure(1);
subplot(2,1,1);
plot(ss, '*-');
ylim([0 6]);
grid on;
subplot(2,1,2);
plot(a, '*-');
ylim([0 6]);
grid on;
3楼2016-10-08 13:56:48
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ice_huya 的主题更新
信息提示
请填处理意见