在matlab编程时,怎样取出矩阵的每行中的最小值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在matlab编程时,怎样取出矩阵的每行中的最小值?相关的知识,希望对你有一定的参考价值。

可以用如下的for循环
for i = 1 : size(a, 1)
minVaule(i) = min(a(i, :)); % 将每行当成一个行向量,取其最小值
end

也可以利用min命令的另外一种形式,直接取出矩阵的每行中的最小值:
举例如下:
min(a,[],2) % 求取每行的最小值
>>a=magic(5)
a =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> min(a,[],2) %求取每行的最小值
ans =
1
5
4
3
2

注:如果是求每列的最小值,可用
>> min(a,[],1) %max是按列求最小值,该写法相当于求每列的最小值
ans =
4 5 1 2 3
参考技术A

1、matlab中函数min可以取矩阵每一列的最小值

2、先将矩阵转置:

B=A'

3、再求转置后矩阵B的最小行值:

min(B)

参考技术B B=min(A,[],1) 取出矩阵的每行中的最小值追问

高手,那怎么取最小值的坐标呢?

追答

min

Smallest elements in array
Syntax

C = min(A)
C = min(A,B)
C = min(A,[],dim)
[C,I] = min(...)
Description

C = min(A) returns the smallest elements along different dimensions of an array.

If A is a vector, min(A) returns the smallest element in A.

If A is a matrix, min(A) treats the columns of A as vectors, returning a row vector containing the minimum element from each column.

If A is a multidimensional array, min operates along the first nonsingleton dimension.

C = min(A,B) returns an array the same size as A and B with the smallest elements taken from A or B. The dimensions of A and B must match, or they may be scalar.

C = min(A,[],dim) returns the smallest elements along the dimension of A specified by scalar dim. For example, min(A,[],1) produces the minimum values along the first dimension (the rows) of A.

[C,I] = min(...) finds the indices of the minimum values of A, and returns them in output vector I. If there are several identical minimum values, the index of the first one found is returned.

[C,I] = min(A,[],1) I为下标

追问

D =[

8.7321 1.4142 8.0623 9.4868
0.5000 7.2801 5.6569 7.8102
6.1847 1.4142 5.3852 7.0711
7.4330 0 6.7082 8.2462
8.2006 9.2195 3.1623 1.0000
4.6098 7.2111 1.0000 2.8284];
[B,i]=min(D,[],1) ;
这样运算之后并非取的是矩阵D每一行的最小值及其坐标啊!

追答

a=[1 2 3;4 5 6;7 8 9];
[C I]=mian(a,[],1);

你自己看

追问

嗯,知道了!谢谢啊……

本回答被提问者采纳
参考技术C 每行应该是B=min(A,[],2);
每列是B=min(A,[],1) 与 B=min(A) 相同。

matlab提取矩阵中点的坐标

比如我有一个100*100的矩阵,现在有四个点,下标分别是(1,1),(1,5),(100,10),(100,14),四个点连线可以构成一个平行四边形,如果矩阵中的点的下标落在这个四边形里(含边界),就取出它的坐标,最后得到一个坐标的集合,该怎么编程。请大侠指教,并把程序贴上来学习一下,谢谢!

楼上的方法挺高深的,但是我实验了。发现有“漏网之鱼”。

我将我办法和他的对比了一下,如下图:

可以看出,用楼上的方法解,行坐标为100的,对应的列坐标只有13,14两个点。

而事实上,有10,11,12,13,14共5个点。

而第一行只有(1,1)、(1,2)两个点,事实上,有1到5共5个点

不止第一行和最后一行,中间的每一行都有漏点。

图中,*表示应该包括的点,o表示上述方法包括的点(看不清,就是线的端点之间的点)。

我的方法说起来简单,就是先找到边界直线。然后将所有满足的点找出来。

我定义了一个函数,其说明如下(函数主体在附件中,可以自己看):

function [x1,y1,totalnum] = myarea(a,b,c,d)
%% 该函数返回任意指定上下两边平行的四边形区域,所有在选定区域内点对应的x和y坐标
% 及在区域内点的个数
% 其中x1、y1为区域内所有点的横、纵坐标,为行向量。x,y在向量中对应位置为一组
%totalnum返回区域内点的个数
%a,b,c,d为从左上角开始四边形顺时针给出的四边形顶点
%如下,为一个正确给定的区域:
% a = [1,1];
% b = [1,7];
% c = [9,4];
% d = [9,7];

比如,输入命令如下:

 [x,y,num] = myarea([1,1],[1,7],[9,4],[9,7]);

返回的结果我直接用图给你表示吧:

其中红色是指定的端点,写‘1’的是判断在区域内的点。效果还是比较理想的。

代码在附件中。

参考技术A d=[1 1;
   1 5;
   100 14;  %注意最后两个顺序相反
   100 10];  
%输入四个顶点,注意让四个顶点按顺序连起来能形成凸多边形

a=[];
for jj=1:100
    for ii=1:100
        r=[d zeros(4,1)]-repmat([ii jj 0],[4 1]);
        %计算4个顶点到ii,jj点的矢量,并加入z座标0
        c=cross(r,circshift(r,1),2);%计算相邻矢量的叉乘积
        if all(c(:,3)>=0)||all(c(:,3)<=0)%判断所有叉乘积的z分量符号是否相同
            a=[a; [ii jj]];%如果相同,记录ii,jj坐标
        end
    end
end


主要用到判断点是否在凸多边形内的叉乘判断法


首先把要判断的点到多边形的各个角点的矢量求出来

再按顺序依次求相邻两个矢量中间的叉乘

由于点都在xy平面,叉乘结果的矢量肯定在z放向上


如果点在多边形内,那么得到的所有z矢量方向相同,同时大于零或同时小于零

如果刚好在某边所在直线上,对应的z矢量为0


因此判断是否说有z都是>=0或者<=0就可以判断点是否在凸多边形内

以上是关于在matlab编程时,怎样取出矩阵的每行中的最小值?的主要内容,如果未能解决你的问题,请参考以下文章

如何取矩阵的某一行,或某一列

matlab 求出一维矩阵中最小值,且求出该最小值在矩阵中的位置,求各位帮帮忙

在 MATLAB 中找到三维矩阵中的有符号最小值

MATLAB:查找最小化矩阵元素总和的矩阵的缩写版本

Matlab:用不包括自身的行的最小值替换矩阵中的元素

屏蔽矩阵行中的最小值