xxdaishu 发表于 2008-4-19 04:30

请教如何使用 for 来提取矩阵的最小值

有三个矩阵x1,x2,x3,每个矩阵都是3*3,需要找出每个矩阵的最小值。请教如何使用'for'来提取矩阵?
比方说, for i=1:3
       这时我想对x1进行操作,该如何指定? 我直接使用 xi,提示错误。
谢谢。

[ 本帖最后由 ChaChing 于 2009-5-24 10:08 编辑 ]

sogooda 发表于 2008-4-19 08:48

建议楼主找本基础的matlab书看看。
数组的下标应该用圆括号()。

huright 发表于 2008-4-19 10:54

假设
x=
应用两次min()函数不知道能不能满足你的要求:
>> min(min(x))
ans =
   0

gdayang 发表于 2008-4-19 11:11

自己先看看,应该是基础问题!!

ch_j1985 发表于 2008-4-19 11:50

对于您的帖子,我想说三点:
1.如果您学过C语言,这个程序应该很容易就可以实现,我觉得Matlab语言和C语言有些地方是相通的;
2.根据您的帖子内容,我编了一段代码,不知是不是您想要的:
A=;
=size(A);%矩阵维数,M为矩阵行长度,N为矩阵列长度
t=inf;%t中间变量,赋值无穷大
for i=1:M, for j=1:N
   if A(i,j)<t   %if A(i,j)>t
         k=1; r=[]; c=[]; v=[];%行标数组, 列标数组, 最小值数组
         t=A(i,j); r(k)=i;c(k)=j;v(k)=t;
   elseif A(i,j)==t
         k=k+1; r(k)=i;c(k)=j; v(k)=t;
   end
end; end
r', c', v'%转置
3.其实可以不用for循环来做,用min()、max()以及find()函数就可以实现,代码如下:
A=;
B=min(min(A));%B=max(max(A));
=find(A==B)

以上代码有不妥的地方,还望高手指点!谢谢

[ 本帖最后由 ChaChing 于 2009-5-24 10:12 编辑 ]

xxdaishu 发表于 2008-4-20 04:29

谢谢各位的帮忙。我想把问题澄清一下:如何对x1,x2,x3 进行同样的操作,这里x1,x2 x3 都是3*3的矩阵?

比方说,我想求x1,x2,x3这三个矩阵的最小值,可以使用三次: min(min(x1)), min(min(x2)),min(min(x3)).
那么,可不可以借助 for 命令,写一个循环语句,把三个矩阵的最小值都求出来:
for i=1:3
当i=1的时候,就对x1进行计算,,,,,
当i=2的时候, ,,,,,,,,x2,,,,,,,,,,,,,,,,
当i=3,,,,,,,,,,,,...........x3,,,,,,,,,,,,,,,
现在的问题是:如何指定这个矩阵x1, 当i=1的时候?
有没有一种办法,可以把x1中的1 与i=1 让matlab识别出来。


如果许多矩阵的时候,这样的循环语句会使编程简洁。我遇到的实际问题,有许多矩阵,而且 不同的矩阵有不同的维数。

[ 本帖最后由 xxdaishu 于 2008-4-19 20:13 编辑 ]

ch_j1985 发表于 2008-4-20 07:53

原帖由 xxdaishu 于 2008-4-20 04:29 发表 http://www.chinavib.com/forum/images/common/back.gif
谢谢各位的帮忙。我想把问题澄清一下:如何对x1,x2,x3 进行同样的操作,这里x1,x2 x3 都是3*3的矩阵?

比方说,我想求x1,x2,x3这三个矩阵的最小值,可以使用三次: min(min(x1)), min(min(x2)),min(min(x3)).
那么 ...

这样写,不知道您满意不?
X1=;
X2=;
X3=;
X={X1,X2,X3};
for i=1:3
    min(min(X{i}))
end
:@(

xxdaishu 发表于 2008-4-20 09:15

回复 7楼 的帖子

谢谢了。
遇到的实际问题,有许多矩阵,而且 不同的矩阵有不同的维数。

ch_j1985 发表于 2008-4-20 09:28

回复 8楼 的帖子

那你根据这个方法,自己再想办法解决吧

[ 本帖最后由 ch_j1985 于 2008-4-20 09:31 编辑 ]

sogooda 发表于 2008-4-20 19:23

如果只是求最小值的话还是可以实现的,参看下面的程序。X1=;
X2=;
X3(:,:,1)=[-1,2,3;4,8,6;7,1,8;4,8,6;7,1,8];
X3(:,:,2)=[-1,2,3;4,8,6;7,1,8;4,8,6;7,1,8];
X={X1,X2,X3};
for i=1:3
    a=X{i};
    Xmin(i)=min(a(:));
end
Xmin

wwbeyondww 发表于 2008-4-21 09:39

我晕倒,一个个都是偏离了楼主的意思,主要问题是Xi太多了要怎样批量处理吧.
以前用过类似的读取批量文件,不过还是查了半天终于找到eval这个函数来实现;
for k=1:3,
a=strcat('x',num2str(k));
b(k)=min(min(eval(a))) %每个矩阵取最小值存于b中
end

另外,我没料到就算那么多高手,都还是用i,j作为matlab的循环变量.个人觉得这点一定要跟C分开,因为这变量选择是C中最常见的.而在matlab中,i,j本身有虚数单位在里面.所以,程序中没有虚数处理自然没问题,如果涉及到了,出现问题,你就算把程序重新检查n遍都会觉得莫名其妙.我曾经深受其害,所以感触颇深.
页: [1]
查看完整版本: 请教如何使用 for 来提取矩阵的最小值