%将以下程序直接考入运行即可
a=[100,1,1,1,2,2,2,1,4,1,2,5,99,0,0,1,1,1,2];%用来测试程序的向量
[max_value max_position]=max(a);%先得到最大值的数值和位置
a(max_position)=min(a);
%将最大值的数值用向量最小值替代,这样第二大的值就变成了最大值,且所在位置不变
[max_value_2 max_position_2]=max(a)%这时取出的最大值就是我们所需要的第二大值了
a(max_position)=max_value;%记得将刚才的最大值复原,保持向量的完整性
%本程序不用sort函数,数据量很大时速度也非常快
%运行过程只产生4个中间变量,几乎不占用空间,您不妨试试
思路:先找到第一大的数,然后排除第一大的数。这时最大的数就是第二大的数。
考虑到第一大的数,或者第二大的数,可能同一个数在向量中出现多次,不建议使用max返回的下标,建议使用find函数。
给出代码如下:
clc;clear;
a=randi(10,1,10)%生成随机整数向量
[t,index]=sort(a);%向量升序排序
index_m=find(t==t(end));%找到最大值占有的位置
target=t(index_m(1)-1)%找到第二大的值并显示
index(t==target)%显示第二大的值在原向量的位置
运行结果如下:
a =
5 5 7 8 8 3 7 7 2 2
target =
7
ans =
3 7 8
如果使用max返回的位置,由于max只返回一个最大值的位置,当有多个最大值时会失效。
你不想添加数组的话,
也可以,用sort和find联合。
aa=sort(a);
find(a==aa(end-1))
或者你先find一次,然后将最大位置的值去掉或者设成Nan之前的数。但如果有多个并列第一或第二,你的结果自己得注意一下。
采用函数subplot(N,M,N*M)
N为窗口水平分割的图像数目,M为窗口竖直分割的图像数目,后面的N*M为第几个图像
例如:
x=[1:10];
subplot(211)
plot(x,y,'r')
subplot(212)
plot(x,2*y,'m')
[k]=find(a==max(a)-1);
k就是那个位置了