wei124 发表于 2006-11-18 19:34

看看这个是什么问题

我编辑了一个这样的小程序。要得到矩阵从最后一列开始加前一列的值,得到一个新的和的矩阵。新的第一行的第一个元素是后几个元素的和,第二个元素是它后面的元素和。程序如下:
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,大家多指教!!

eight 发表于 2006-11-18 19:54

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


这个功能可以直接使用matlab的cumsum函数实现

xjzuo 发表于 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
%%%%%%%%%%%%%%%%%%%%%%
还是想编一个程序实现上述功能?

bainhome 发表于 2006-11-18 20:49

如果仅仅是类似于上述功能的实现,感觉编程就不用了:
A=ones(10,1)*

xjzuo 发表于 2006-11-19 10:06

回复

我猜他的意思应该是:任意给定一个矩阵,要求可以实现累积和.
这可以用cumsum加一个左右翻转来实现.

wei124 发表于 2006-11-19 14:43

xjzuo的结果是我想要的
你是怎么实现的

wei124 发表于 2006-11-19 14:47

补充一下,我上面说的仅仅是一个例子。真正实现的是一个NxNd的 一个矩阵的求和方式,但是求和的形式是和xjzuo
演示的结果是一样的。请给予回复
谢谢各位的热心帮助

eight 发表于 2006-11-19 14:56

原帖由 wei124 于 2006-11-19 14:47 发表
补充一下,我上面说的仅仅是一个例子。真正实现的是一个NxNd的 一个矩阵的求和方式,但是求和的形式是和xjzuo
演示的结果是一样的。请给予回复
谢谢各位的热心帮助


不是已经提示了用cumsum函数吗

wei124 发表于 2006-11-19 15:04

问题是,我用了cumsum()函数以后,得到的是
%%%%%%%%%%%%%%%%%%%%%%%
1   2    3    4
1   2    3    4
1   2    3    4
1   2    3    4

而我想要的结果是
43   2   1
43   2   1
43   2   1
43   2   1
还有就是我看这个函数了其中的dim维是什么意思?

eight 发表于 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

而我想要的结果是
43   2   1
43   2   1
43   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 编辑 ]
页: [1]
查看完整版本: 看看这个是什么问题