查看: 164|回复: 10|关注: 0

[已解决] 请问怎么生成这样的行向量

[复制链接]

新手

12 麦片

财富积分


050


6

主题

16

帖子

0

最佳答案
请问一下,MATLAB怎么生成如下所示的行向量呢:行向量长度设为n

[0,1,1,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,5········]
就是当取值为x时,向量中x值的数的个数为x+1;知道矩阵长度为n为止

论坛优秀回答者

中级

702 麦片

财富积分


5001500


3

主题

956

帖子

109

最佳答案
  • 关注者: 78
发表于 2019-11-27 18:42:51 | 显示全部楼层 |此回复为最佳答案
  1. n=20;
  2. x=zeros(1,n);
  3. L=(-3+sqrt(-3+8*n))/2; %一次二次方程的根,自己推一下
  4. for m=1:ceil(L)-1
  5.         x(m*(m+1)/2+1:(m+1)*(m+2)/2)=m;
  6. end
  7. x((m+1)*(m+2)/2+1:end)=m+1;
复制代码

新手

12 麦片

财富积分


050


6

主题

16

帖子

0

最佳答案
 楼主| 发表于 2019-11-27 18:59:52 | 显示全部楼层

这,,,太优秀了!这种思路我是想不到,太厉害了!我用了while...if语句才做出来的

论坛优秀回答者

中级

1327 麦片

财富积分


5001500


0

主题

1825

帖子

269

最佳答案
  • 关注者: 50
发表于 2019-11-27 19:14:30 | 显示全部楼层
光科码农 发表于 2019-11-27 18:59
这,,,太优秀了!这种思路我是想不到,太厉害了!我用了while...if语句才做出来的 ...

n=4;
A=triu(ones(n));
AS=[];
for ii=1:n
    AD=(ii-1)*A(A(:,ii)>0,ii);
    AS=[AS;AD];
end
AS=AS';

另外一种方法呢!仅供参考

新手

12 麦片

财富积分


050


6

主题

16

帖子

0

最佳答案
 楼主| 发表于 2019-11-27 19:23:57 | 显示全部楼层
WarnerChang 发表于 2019-11-27 19:14
n=4;
A=triu(ones(n));
AS=[];

不好意思啊,不是想要的结果,我的目的是根据行向量的长度来生成相应的行向量,譬如说我设置生成的行向量长度为7,那么代码运行得到的结果应该是【0,1,1,2,2,2,3】。请参考楼上的代码。

论坛优秀回答者

中级

1327 麦片

财富积分


5001500


0

主题

1825

帖子

269

最佳答案
  • 关注者: 50
发表于 2019-11-27 19:54:03 | 显示全部楼层
光科码农 发表于 2019-11-27 19:23
不好意思啊,不是想要的结果,我的目的是根据行向量的长度来生成相应的行向量,譬如说我设置生成的行向量 ...

噢噢 原来是这样 那就更简单了,直接生成一万长的向量 取7个元素不就好了!哈哈

新手

12 麦片

财富积分


050


6

主题

16

帖子

0

最佳答案
 楼主| 发表于 2019-11-27 20:06:36 | 显示全部楼层
WarnerChang 发表于 2019-11-27 19:54
噢噢 原来是这样 那就更简单了,直接生成一万长的向量 取7个元素不就好了!哈哈 ...

那倒也行,哈哈哈

新手

12 麦片

财富积分


050


6

主题

16

帖子

0

最佳答案
 楼主| 发表于 2019-11-27 20:16:02 | 显示全部楼层
WarnerChang 发表于 2019-11-27 19:54
噢噢 原来是这样 那就更简单了,直接生成一万长的向量 取7个元素不就好了!哈哈 ...

我是这样写的:
order = 100;
n = [];
a = 0;
while size(n,2) < order
    b = a.*ones(1,a+1);    % 生成a对应的全1行向量,长度为a+1
    n = [n,b];    % 将上面生成的向量拼接到n里面
    a = a+1;
end
n = n(1:order);

论坛优秀回答者

权威

4004 麦片

财富积分



3

主题

4186

帖子

879

最佳答案
  • 关注者: 190
发表于 7 天前 | 显示全部楼层
参考2楼:
  1. n=100;
  2. ind=ceil((-3+sqrt(-3+8*n))/2);
  3. x=repelem(0:ind,1:ind+1);
  4. x(1:n)
复制代码

新手

12 麦片

财富积分


050


6

主题

16

帖子

0

最佳答案
 楼主| 发表于 7 天前 | 显示全部楼层

谢谢!我已经解决这个问题了,谢谢您的回答!太感谢啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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