Matlab 曲面插值和拟合 数值求导
Q:v=[ ];t=0:0.05:4;如何求出dv/dt;是要先拟合出曲线在求导函数吗?
A:数值计算有误差的.简单可以那么做 diff(v)./diff(t)
拟合最好了.用cftool工具做做看呢
用polyfit拟合也可以
插值和拟合都是数据优化的一种方法,当实验数据不够多时经常需要用到这种方法来画图。在matlab中都有特定的函数来完成这些功能。这两种方法的确别在于:
当测量值是准确的,没有误差时,一般用插值;
当测量值与真实值有误差时,一般用数据拟合。
插值:
对于一维曲线的插值,一般用到的函数yi=interp1(X,Y,xi,method) ,其中method包括nearst,
linear,spline,cubic。
对于二维曲面的插值,一般用到的函数zi=interp2(X,Y,Z,xi,yi,method),其中method也和上面一样,常用的是cubic。
拟合:
对于一维曲线的拟合,一般用到的函数p=polyfit(x,y,n)和yi=polyval(p,xi),这个是最常用的最小二乘法的拟合方法。
对于二维曲面的拟合,有很多方法可以实现,但是我这里自己用的是Spline Toolbox里面的函数功能。具体使用方法可以看后面的例子。
对于一维曲线的插值和拟合相对比较简单,这里就不多说了,对于二维曲面的插值和拟合还是比较有意思的,而且正好胖子有些数据想让我帮忙处理一下,就这个机会好好把二维曲面的插值和拟合总结归纳一下,下面给出实例和讲解。
原始数据
x=[1:1:15];
y=[1:1:5];
z=[0.2 0.24 0.25 0.26 0.25 0.25 0.25 0.26 0.26 0.29 0.25 0.29;
0.27 0.31 0.3 0.3 0.26 0.28 0.29 0.26 0.26 0.26 0.26 0.29;
0.41 0.41 0.37 0.37 0.38 0.35 0.34 0.35 0.35 0.34 0.35 0.35;
0.41 0.42 0.42 0.41 0.4 0.39 0.39 0.38 0.36 0.36 0.36 0.36;
0.3 0.36 0.4 0.43 0.45 0.45 0.51 0.42 0.4 0.37 0.37 0.37];
z是一个5乘12的矩阵。
直接用原始数据画图如下:
surf(x,y,z)
title(’Original data Plot’);
xlabel(’X'), ylabel(’Y'), zlabel(’Z'),
colormap, colorbar;
axis([0 15 0 6 0.15 0.55])
先考虑插值,需要用到的函数interp2
x1=1:0.2:12;
y1=1:0.2:5;
[x2,y2]=meshgrid(x1,y1);
t11=interp2(x,y,z,x2,y2,’cubic’);
surf(x1,y1,t11)
title(’After Fit data Plot’);
xlabel(’X'), ylabel(’Y'), zlabel(’Z'),
colormap, colorbar;
matlab拟合数据axis([0 15 0 6 0.2 0.55])
然后考虑拟合,这个稍微复杂一点:
ky = 3; knotsy = augknt([0:2.5:13],ky);
sp = spap2(knotsy,ky,y,z);
yy = 0:.5:12; vals = fnval(sp,yy);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论