matlab应用——求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图,傅里叶变换,随机数,优化问题....更多内容尽在个人专栏:matlab学习

看到有知友评论想要拟合一个平滑的三维平面,emmmm三维空间中好像没有想之前polyfit那样的拟合函数,只有三维插值。不过如果精度调的足够的话,三维插值出来的平面也可以看作是光滑的(求单独的数据也是一样,只要误差控制在一定数量级,可以近似看作是光滑)

griddata函数:

看到插值,第一时间想到的是interp函数家族,但是网络上评论说对于三维差值,griddata函数效果更好,所以这次插值我们使用griddata函数。当然interp2函数也可以进行三维插值,知友们可以尝试一下。

建议先浏览一下本专栏的这篇文章了解一下二维插值


浅吻板牙:从零开始的matlab学习笔记——(23)数据插值zhuanlan.zhihu.com


MESH 三维模型 meshgrid三维_matlab surf函数渐变色


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

MESH 三维模型 meshgrid三维_matlab surf函数渐变色


生成网格坐标meshgrid:

浅吻板牙:从零开始的matlab学习笔记——(22)三维曲面绘制zhuanlan.zhihu.com


MESH 三维模型 meshgrid三维_matlab surf函数渐变色


看一下效果(因为是用随机数生成离散点,所以每一次运行的效果都不一样,这里选了一个比较好看的)


MESH 三维模型 meshgrid三维_matlab meshgrid_04


虽然说插值得到的结果不是完全平滑的曲线,但是我们可以控制插值的精度,使之符合我们的要求。

比如要求误差在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进行三维插值,因为一会儿就开始上网课了,所以最近更新可能会慢一些