声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1326|回复: 9

[编程技巧] 看看这个是什么问题

[复制链接]
发表于 2006-11-18 19:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我编辑了一个这样的小程序。要得到矩阵从最后一列开始加前一列的值,得到一个新的和的矩阵。新的第一行的第一个元素是后几个元素的和,第二个元素是它后面的元素和。程序如下:
f=ones(10);
a(:,10)=f(:,10);
for i=10:-1:2
      a(:,i-1)=f(:,i-1)+f(:,i);
      f(:,i)=a(:,i-1);
end
a
j结果这个计算为ans=1
请问这个程序的错误在哪儿?
我开始学习 matlab,大家多指教!!
回复
分享到:

使用道具 举报

发表于 2006-11-18 19:54 | 显示全部楼层
原帖由 wei124 于 2006-11-18 19:34 发表
我编辑了一个这样的小程序。要得到矩阵从最后一列开始加前一列的值,得到一个新的和的矩阵。新的第一行的第一个元素是后几个元素的和,第二个元素是它后面的元素和。程序如下:
f=ones(10);
a(:,10)=f(:,10);
...



这个功能可以直接使用matlab的cumsum函数实现
发表于 2006-11-18 19:55 | 显示全部楼层
是想实现如下功能吗?
当f=ones(10)时,希望输出如下矩阵:
%%%%%%%%%%%%%%%%%%%%%%
    10     9     8     7     6     5     4     3     2     1
    10     9     8     7     6     5     4     3     2     1
    10     9     8     7     6     5     4     3     2     1
    10     9     8     7     6     5     4     3     2     1
    10     9     8     7     6     5     4     3     2     1
    10     9     8     7     6     5     4     3     2     1
    10     9     8     7     6     5     4     3     2     1
    10     9     8     7     6     5     4     3     2     1
    10     9     8     7     6     5     4     3     2     1
    10     9     8     7     6     5     4     3     2     1
%%%%%%%%%%%%%%%%%%%%%%
还是想编一个程序实现上述功能?

评分

1

查看全部评分

发表于 2006-11-18 20:49 | 显示全部楼层
如果仅仅是类似于上述功能的实现,感觉编程就不用了:
  1. A=ones(10,1)*[10:-1:1]
复制代码
发表于 2006-11-19 10:06 | 显示全部楼层

回复

我猜他的意思应该是:任意给定一个矩阵,要求可以实现累积和.
这可以用cumsum加一个左右翻转来实现.
 楼主| 发表于 2006-11-19 14:43 | 显示全部楼层
xjzuo的结果是我想要的
你是怎么实现的
 楼主| 发表于 2006-11-19 14:47 | 显示全部楼层
补充一下,我上面说的仅仅是一个例子。真正实现的是一个NxNd的 一个矩阵的求和方式,但是求和的形式是和xjzuo
演示的结果是一样的。请给予回复
谢谢各位的热心帮助
发表于 2006-11-19 14:56 | 显示全部楼层
原帖由 wei124 于 2006-11-19 14:47 发表
补充一下,我上面说的仅仅是一个例子。真正实现的是一个NxNd的 一个矩阵的求和方式,但是求和的形式是和xjzuo
演示的结果是一样的。请给予回复
谢谢各位的热心帮助



不是已经提示了用cumsum函数吗
 楼主| 发表于 2006-11-19 15:04 | 显示全部楼层
问题是,我用了cumsum()函数以后,得到的是
%%%%%%%%%%%%%%%%%%%%%%%
1   2    3    4
1   2    3    4
1   2    3    4
1   2    3    4

而我想要的结果是
4  3   2   1
4  3   2   1
4  3   2   1
4  3   2   1
还有就是我看这个函数了其中的dim维是什么意思?
发表于 2006-11-19 15:17 | 显示全部楼层
原帖由 wei124 于 2006-11-19 15:04 发表
问题是,我用了cumsum()函数以后,得到的是
%%%%%%%%%%%%%%%%%%%%%%%
1   2    3    4
1   2    3    4
1   2    3    4
1   2    3    4

而我想要的结果是
4  3   2   1
4  3   2   1
4  3   2   1 ...



dim维是什么意思 —— 标识“求和”操作按哪一维进行

用 fliplr 函数就可以实现你的目的
>> b

b =

     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4

>> fliplr(b)

ans =

     4     3     2     1
     4     3     2     1
     4     3     2     1
     4     3     2     1

[ 本帖最后由 eight 于 2006-11-19 15:19 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-25 00:43 , Processed in 0.087830 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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