第1个回答 2010-08-15
首先,介绍size()函数,该函数用于求解矩阵的维数,如下例:
>> a=[1,2,3,4,5;2,3,4,5,6;3,4,5,6,7;4,5,6,7,8]
a =
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
>> size(a)
ans =
4 5
4是行数,5是列数,可以通过这个函数来确定楼上所说的n的值。
---------------------------------------------------------
然后介绍冒号的作用:
1、冒号在定义数列中的作用,1:2:5 代表数组[1,3,5],即此处冒号代表一个等差的数组。格式为“起始数:步长:结尾数”,步长可以为负。特别的,当步长为1是,可以省略,如1:3表示[1,2,3]。
2、冒号在矩阵运算中表示“所有”的意思,通过下例来说明,仍然采用前面的a矩阵:
>> a(2,:)
ans =
2 3 4 5 6
>> a(:,3)
ans =
3
4
5
6
>> a(1:3,:)
ans =
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
a(2,:)表示a的第二行,所有列;a(:,3)表示所有行,第三列。a(1:3,:)表示1到3行,所有列。
-------------------------------------------------------------
以上为解决问题的基础,现在给出你提出的问题的解决方法,仍然以a矩阵为例,对于一个m*n的矩阵,我要得到前m-1行,所有列。在a中m*n表示为4*5,但是我事先不知道。
>> [m,n]=size(a)
m =
4
n =
5
首先利用size函数将行数和列数提取出来。
>> a(1:m-1,:)
ans =
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
然后利用前面的方法可以得到。前m-1行的结果。
同样利用a(2:m,:)可以得到后m-1行的结果,利用a(:,1:n-1)得到前n-1列的结果,等等。
-------------------------------------------------------------
拓展,通过以上方法可以得到任意行或者任意列的结果。如:
>> a([1,3],[2,4,5])
ans =
2 4 5
4 6 7
提取了1,3两行和2,4,5三列的结果~~~~
----------------------------------------------------------
基本的东西在这里了。你所说的要求完全可以用循环语句实现。灵活运用以上的函数和方法,构思一个合适的流程即可。如果没有普遍性要求,对于n行1列或者1行n列的矩阵(退化为数组了),可以用length()函数代替size()函数,当然如果对矩阵的维数事先知道,只为解决某一个问题(具体来说是某一种大小的矩阵),并没有普适性要求的话,直接用数字代入也行。
----------------------------------------------------------
以下提供一个对于列矩阵适应的方法
a=[7;8;5;2;6;4;3];
b=a;%存放a数组
for i=1:length(a)
b=b(1:length(b)-1,:) %1到(行数-1)行,末尾无分号,直接可以输出
if length(b)==1 %最终只有一个数
break;
end
end
经测试可用~
如果需要后n-1行的,只需要改动b=b(1:length(b)-1,:)为b=b(2:length(b),:)即可。