matlab应用——求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图,傅里叶变换,随机数,优化问题....更多内容尽在个人专栏:matlab学习
看到有知友评论想要拟合一个平滑的三维平面,emmmm三维空间中好像没有想之前polyfit那样的拟合函数,只有三维插值。不过如果精度调的足够的话,三维插值出来的平面也可以看作是光滑的(求单独的数据也是一样,只要误差控制在一定数量级,可以近似看作是光滑)
griddata函数:
看到插值,第一时间想到的是interp函数家族,但是网络上评论说对于三维差值,griddata函数效果更好,所以这次插值我们使用griddata函数。当然interp2函数也可以进行三维插值,知友们可以尝试一下。
建议先浏览一下本专栏的这篇文章了解一下二维插值
浅吻板牙:从零开始的matlab学习笔记——(23)数据插值zhuanlan.zhihu.com
griddata函数的调用格式和前面的interp函数几乎是一样的,只不过数据多了个维度
z1=griddata(x,y,z,x1,x1,y1,method)
x,y,z是已知的三维离散点,x1,y1是插值的精度要求下的平面网格坐标,method是插值方法(这里建议用‘v4’方法)
我们来看一个例子
x=1+4*rand(5,1)
y=4*rand(1,5) %这里都用的是随机数生成三维离散点
z=2+rand(5,5)*3 %注意z要求生成的是二维矩阵,行列数分别于x,y的大小对应
subplot(1,2,1)
plot3(x,y,z,'r.')
grid on
subplot(1,2,2)
plot3(x,y,z,'r.')
hold on
[x1,y1]=meshgrid(1:0.05:5,0:0.05:4) %生成新的精度坐标
z1=griddata(x,y,z,x1,y1,'v4')
surf(x1,y1,z1)
这里有几个函数我们可能需要看前面的文章再复习一下
随机数rand:
浅吻板牙:从零开始的matlab学习笔记——(32)随机数zhuanlan.zhihu.com
生成网格坐标meshgrid:
浅吻板牙:从零开始的matlab学习笔记——(22)三维曲面绘制zhuanlan.zhihu.com
看一下效果(因为是用随机数生成离散点,所以每一次运行的效果都不一样,这里选了一个比较好看的)
虽然说插值得到的结果不是完全平滑的曲线,但是我们可以控制插值的精度,使之符合我们的要求。
比如要求误差在0.01
那[x1,y1]=meshgrid(1:0.01:5,0:0.01:4)
误差0.001
那[x1,y1]=meshgrid(1:0.001:5,0:0.001:4)
需要求z的值,直接调用就行
z(n,m) 就可以求出(n,m)坐标对应的高度z
这一节我们说了说怎么用matlab进行三维插值,因为一会儿就开始上网课了,所以最近更新可能会慢一些