x

美赛MATLAB技巧分享:数组最值的搜寻

2022-07-28 13:30:19编辑:飞飞

小编做数学建模题目时,在编程中常常会遇见各种各样的搜寻数组或者多维数组最大值、最小值的情况,以及第二大的值或者是非零最小值等情况,各位有遇到吗?现将这些情况做一个梳理,大家在之后用Matlab编程时若遇到了类似的情况,可将下面的内容当成功能速查表(CheatSheet)来快速查阅

1、求一维数组最大值及其所在位置[n,index]=max(a) %a为一维数组(向量)
2、求二维数组(矩阵)的最大值及最大值所在的位置max_value=max(max(U))  %U为一个二维矩阵[row,col]=find(U==max_value)
3、寻找三维数组里的最大值及其所在位置3.1首先创建Matlab创建三维数组的方式可以有:

方法一:先生成随机矩阵或者零矩阵,再进行赋值
a=rand(2,2,2)  % a=ones(2,2,2)
a(:,:,1) =[7 3;6 0]
a(:,:,2) =[1 32;0.8 4]

方法二:直接循环生成
for i=1:2
for j=1:2
for k=1:2
A(i,j,k)=i+j+k;
end
end
end

方法三:由二维数组创建三维数组
A=[1,2,3;4,5,6;7,8,9]
B(:,:,1)=A
B(:,:,2)=2*A
B(:,:,3)=3*A

方法四:用cat函数创建
A=[1,2,3;4,5,6;7,8,9]
A1=[6 32 2;4 5 2;5 2 5]
A2=[4 2 5;2 4 5;2 2 1]
B=cat(3,A1,A2,A3)

即cat函数格式为B=cat(dim,A1,A2,A3,A4……),dim为多维数组的维数。
方法五:用repmat或者reshape或者squeeze这三个函数

3.2找最大值及其所在位置:
max_a=max(max(max(a))) %a为一个三维数组
r=find(a==max_a)
s=size(a)
[p,q,t]=ind2sub(s,r)

4.求向量的非零最小值a(find(a==0))=NaN %a为一个向量
min(a)

5.寻找矩阵里面的第二大的值及其所在位置y=sort(x) %x为一个矩阵
second_max=y(length(x)-1)
n=find(x==second_max)

你知道,MATLAB到底有多厉害?下面,从matlab在应用、功能、行业三个方面剖析一下,你就知道matlab的发明者简直不要太伟大!!应用美赛MATLAB技巧分享:数组最值的搜寻功能美赛MATLAB技巧分享:数组最值的搜寻行业美赛MATLAB技巧分享:数组最值的搜寻
下面再举几个例子,看看matlab是怎样应用于各大场景中的:01解决
预测类案例

通过已有的数据,对未知进行预测,是数据实际应用中常见的一种需求。这类问题,拥有大量算法模型包的MATLAB可以轻易解决。通过确认训练数据样本(蓝色数据点),借助MATLAB的最小二乘拟合函数对非线性函数进行拟合,即可得到最优拟合结果。紧接着,利用MATLAB进行结果可视化

最终效果如图:美赛MATLAB技巧分享:数组最值的搜寻一维多项式拟合(曲线)美赛MATLAB技巧分享:数组最值的搜寻二维多项式拟合(曲面)
对于同一数据,指定滑动平均公式的不同参数和类型

美赛MATLAB技巧分享:数组最值的搜寻
02
数据差值
除了对数据进行拟合,MATLAB还支持对数据进行插值,插值是在一组已知数据点的范围内添加新数据点的技术。可以使用插值来填充缺失的数据、对现有数据进行平滑处理以及进行预测等

美赛MATLAB技巧分享:数组最值的搜寻

一维数据插值美赛MATLAB技巧分享:数组最值的搜寻二维数据插值美赛MATLAB技巧分享:数组最值的搜寻三维数据插值03
绘制动图

利用MATLAB的循环语句,还可自己生成动图
美赛MATLAB技巧分享:数组最值的搜寻
水波动态模拟
美赛MATLAB技巧分享:数组最值的搜寻
绕螺旋线运动的小球

04
建模必备建模常用的十大算法,包含蒙特卡罗算法、数据拟合、参数估计、插值等数据处理算法、图论算法、最优化理论的三大非经典算法、数值分析算法、神经网络算法等等,用matlab均可处理,对了,还有图象处理算法,是的,MATLAB还可做图像处理

美赛MATLAB技巧分享:数组最值的搜寻
处理效果如下图:美赛MATLAB技巧分享:数组最值的搜寻
大部分情况下
往往是技穷限制了你的想象