Matlab数值分析实例:三次样条插值
2020-07-18 04:18
1336 查看
Matlab数值分析实例:三次样条插值
任务要求
湖水在夏天会出现分层现象,接近湖面温度较高,越往下温度变低。这种上热下冷的现象影响了水的对流和混合过程,使得下层水域缺氧,导致水生鱼类的死亡。如果把水温T看成深度x的函数T(x),有某个湖的观测数据如下:
T ( °C ) | 22.8 | 22.8 | 22.8 | 20.6 | 13.9 | 11.7 | 11.1 | 11.1 |
---|---|---|---|---|---|---|---|---|
x ( m ) | 0 | 2.3 | 4.9 | 9.1 | 13.7 | 18.3 | 22.9 | 27.2 |
环境工程师希望:
1) 用三次样条插值(取合适的边界条件)求出T(x),并绘出其图形。
2) 求在什么深度处dT/dx的绝对值达到最大。
分析
题目要求使用三次样条插值。三次样条插值推导过程过于繁琐,在此不赘述,只简要提及其作用:
三次样条插值是指在两两数据点之间采用不超过三次的多项式函数将其连接,并且要求该函数二阶以下均可导的方法。
博主查阅了一些资料后,决定利用Matlab内置函数
y=spline(x0,y0,x)实现(1)小问,其中y、x为变量,x0、y0为数据向量。取函数默认边界条件(非扭结边界条件)。
对于(2)小问,只需对(1)问求得的三次样条函数的导函数取步长遍历并记录坐标即可。
代码实现
clear all;clc %导入数据向量 x0=[0 2.3 4.9 9.1 13.7 18.3 22.9 27.2]; y0=[22.8 22.8 22.8 20.6 13.9 11.7 11.1 11.1]; x=0:0.1:27.2;%取步长为0.1 y1=interp1(x0,y0,x);%分段线性插值 y2=spline(x0,y0,x);%三次样条插值 pp1=csape(x0,y0); y3=ppval(pp1,x); pp2=csape(x0,y0,'second'); y4=ppval(pp2,x); [x',y1',y2',y3',y4'] subplot(1,2,1) plot(x0,y0,'+',x,y1) title('Piecewise linear') subplot(1,2,2) plot(x0,y0,'+',x,y2) title('Spline1') dx=diff(x); dy=diff(y2); dy_dx=dy./dx; %寻找dy/dx的绝对值的最大值 N=length(dy_dx) max=0 for i=1:N if abs(dy_dx(i))>=max max=abs(dy_dx(i)); absmax_position=i end end disp('dT/dx的绝对值的最大值为') max disp('最大值对应x坐标为') 0.1*absmax_position pp=spline(x0,y0)
总结
在(1)中,博主还额外画了一条分段线性插值的曲线对比,结果如下:
在(2)中,博主取步长0.1得到导函数的绝对值的最大值在11.4m处取得。
原文链接:https://blog.csdn.net/chandler_scut/article/details/106692827
相关文章推荐
- 数值分析三次样条插值确定边界条件的函数表达式求解(MATLAB)实验报告(附实验代码)
- Matlab中的pchiptx.m 修改为C语言 三次样条插值
- 数值分析(二续) 三次样条插值二类边界完整matlab代码
- python实现数值积分的Simpson方法实例分析
- wirshark 常用操作及 tcp 三次握手过程实例分析
- 数值分析Matlab绘制三维数据曲面图
- 数值分析(二) 三次样条插值法matlab程序
- 用matlab程序实现求解三次样条插值
- 【书单】matlab 科学计算、数值分析以及数学物理问题
- Matlab时频分析工具箱小波尺度图函数的使用说明与实例
- 三次样条插值拟合海岸线曲线MATLAB实现
- 数值分析MATLAB算法程序附录
- 数值分析——两点三次Hermite插值
- 8、数值分析与matlab
- matlab cubic spline interpolation 三次样条插值
- C++与matlab混合编程基于主成份分析算法的数值分析
- 9、继续matlab数值分析
- 数值分析 jacobi迭代法求解线性方程组 MATLAB程序实现
- 8、数值分析与matlab
- MATLAB数值计算与数据分析(3)