当前位置: 首页 > news >正文

五、插值与拟合

  如果只知道函数f(x)f(x)f(x)在区间[a,b]上的一系列点上的值:
yi=f(xi),i=0,1,...,ny_i=f(x_i),i=0,1,...,nyi=f(xi),i=0,1,...,n
当需要求其他点上的值时,用一个函数ϕ(xi)\phi(x_i)ϕ(xi)代替f(x)f(x)f(x)
插值: 插值函数ϕ(xi)\phi(x_i)ϕ(xi)要满足:ϕ(xi)=yi,i=0,1,...,n\phi(x_i)=y_i,i=0,1,...,nϕ(xi)=yi,i=0,1,...,n
拟合: 求近似函数而不要求过已知数据点,只要求在某种意义下在这些点上的总偏差最小。

5.1 插值

5.1.1 分段线性插值

将相邻点用直线连接即是分段线性插值,插值函数In(xi)=yiI_n(x_i)=y_iIn(xi)=yi,且在每个区间[xi,xi+1](i=0,1,...,n−1)[x_i,x_{i+1}](i=0,1,...,n-1)[xi,xi+1](i=0,1,...,n1)为线性函数。
在这里插入图片描述

5.1.2 拉格朗日插值多项式

在这里插入图片描述

5.1.3 样条插值

许多问题对插值函数的光滑性又较高要求,要求曲线具有较高光滑程度,要连续且有连续曲率。

  1. 样条函数

在这里插入图片描述
2. 三次样条插值

利用样条函数进行插值,即为样条插值。
已知函数f(x)f(x)f(x)在区间[a,b][a,b][a,b]上的n+1n+1n+1个节点:
a=x0<x1<...<xn−1<xn=ba=x_0<x_1<...<x_{n-1}<x_n=ba=x0<x1<...<xn1<xn=b
上的值yi=f(xi)y_i=f(x_i)yi=f(xi),求插值函数S(x)S(x)S(x),使得:
(1)S(xi)=yiS(x_i)=y_iS(xi)=yi
(2)在给个区间上为三次多项式,记为Si(x)S_i(x)Si(x)
(3)在区间[a,b][a,b][a,b]上二阶连续可微。
由条件(2),
S(x)=Si(x),x∈[xi,xi+1],i=0,1,...,n−1S(x)={S_i(x),x \in [x_i,x_{i+1}],i=0,1,...,n-1}S(x)=Si(x),x[xi,xi+1],i=0,1,...,n1
Si(x)=aix3+bix2+cix+diS_i(x)=a_ix^3+b_ix^2+c_ix+d_iSi(x)=aix3+bix2+cix+di
ai,bi,ci,dia_i,b_i,c_i,d_iai,bi,ci,di为待定参数,共4n个。
由条件(3),
Si(xi+1)=Si+1(xi+1),Si′(xi+1)=Si+1′(xi+1),Si′′(xi+1)=Si+1′′(xi+1),i=0,1,...,n−2S_i(x_{i+1})=S_{i+1}(x_{i+1}),\\ S'_i(x_{i+1})=S'_{i+1}(x_{i+1}),\\ S''_i(x_{i+1})=S''_{i+1}(x_{i+1}),\\i=0,1,...,n-2Si(xi+1)=Si+1(xi+1),Si(xi+1)=Si+1(xi+1),Si′′(xi+1)=Si+1′′(xi+1),i=0,1,...,n2
为确定4n个参数,还需两个边界条件。

常用边界条件:
(1)S′(a)=y0′,S′(b)=yn′S'(a)=y_0',S'(b)=y_n'S(a)=y0,S(b)=yn这种边界条件建立的样条插值函数称为完备三次样条插值函数。
(2)S′′(a)=y0′′,S′′(b)=yn′′S''(a)=y_0'',S''(b)=y_n''S′′(a)=y0′′,S′′(b)=yn′′y0′′=yn′′=0y_0''=y_n''=0y0′′=yn′′=0时称为自然边界条件。
(3)S′(a+0)=S′(b−0),S′′(a+0)=S′′(b−0)′′S'(a+0)=S'(b-0),S''(a+0)=S''(b-0)''S(a+0)=S(b0)S′′(a+0)=S′′(b0)′′ 此条件称为周期条件。

5.1.4 Matlab插值工具

1.一维插值函数

y=interp1(x0,y0,x,'method')

其中:method指定插值方法,默认线性插值。

‘nearest’最近项插值
‘linear’线性插值
‘spline’立方样条插值
‘cubic’立方插值

要求x0单调。当x0等距时可以使用快速插值法:‘*nearest’…
2.三次样条插值
如无边界条件,常用非扭结(not-a-knot)条件,该条件强迫第1个和第2个三次多项式的三阶导数相等,最后一个和倒数第2个三次多项式也同样。

y=interp1(x0,y0,x,'spline')
y=spline(x0,y0,x);
pp=csape(x0,y0,conds)
pp=csape(x0,y0,conds,valconds);y=fnval(pp,x);

x0,y0是已知点,x是插值点,y是插值点函数值。
conds是插值边界条件:

‘complete’边界为一阶导数,导数值在valconds中
‘not-a-knot’非扭结条件
‘periodic’周期条件
‘second’边界为二阶导数,导数值在valconds中,默认[0,0]
‘variational’设置边界二阶导数值为[0,0]

对于一些特殊边界条件,将conds设为1*2的矩阵,元素值为0,1,2,即conds的第一个元素表示左边界的条件,第二个元素表示右边界的条件。

在这里插入图片描述

clc,clear
x0=[0 3 5 7 9 11 12 13 14 15];
y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6];
x=0:0.1:15;
y1=interp1(x0,y0,x);
y2=interp1(x0,y0,x,'spline');
pp1=csape(x0,y0);
y3=fnval(pp1,x);
pp2=csape(x0,y0,'second');
y4=fnval(pp2,x);
[x',y1',y2',y3',y4']
subplot(1,3,1)
plot(x0,y0,'+',x,y1)
title('Pircewise linear')
subplot(1,3,2)
plot(x0,y0,'+',x,y2)
title('Splinel')
subplot(1,3,3)
plot(x0,y0,'+',x,y3)
title('Spline2')
dx=diff(x);
dy=diff(y3);
dy_dx=dy./dx;
dy_dx0=dy_dx(1)
ytemp=y3(131:151);
ymin=min(ytemp);
index=find(y3==ymin);
xmin=x(index);
[xmin,ymin]

在这里插入图片描述
3.二维插值
1)插值点为网格节点
已知m×nm \times nm×n个节点(xi,yj,zij)(i=1,2,...,m;j=1,2,...,n),且x1<...<xm;y1<...<yn(x_i,y_j,z_{ij})(i=1,2,...,m;j=1,2,...,n),且x_1<...<x_m;y_1<...<y_n(xi,yj,zij)(i=1,2,...,m;j=1,2,...,n),x1<...<xm;y1<...<yn
求点(x,y)(x,y)(x,y)处的插值。

z=interp2(x0,y0,z0,x,y,'method')

其中,x0,y0为m维和n维向量,z0维n*m矩阵。x,y为一维数组,表示插值点,且是方向不同的向量,即一个行向量,一个列向量;z为矩阵,行数为y的维数,列数为x的维数;'method‘的用法同一维插值。

%三次样条插值:
pp=csape({x0,y0},z0,conds,valconds)
z=fnval(pp,{x,y})

其中,x0,y0为m维和n维向量,z0维m*n矩阵。z为矩阵,行数为x的维数,列数为y的维数;

2)插值点为散乱节点
已知n个节点(xi,yi,zi)(i=1,2,...,n),(x_i,y_i,z_i)(i=1,2,...,n),(xi,yi,zi)(i=1,2,...,n),
求点(x,y)(x,y)(x,y)处的插值zzz

ZI=griddata(x,y,z,XI,YI)

其中:x,y,z均为n维向量;XI和YI是方向不同的向量,即一个行向量,一个列向量;

5.2 曲线拟合

5.2.1 线性最小二乘法

在这里插入图片描述
在这里插入图片描述

5.2.2 Matlab实现最小二乘法

1.解方程组法
在这里插入图片描述
在这里插入图片描述

clc,clear
x=[19;25;31;38;44];
y=[19.0;32.3;49.0;73.3;97.8];
r=[ones(5,1),x.^2];
a=r\y;
xi=19:0.1:44;
yi=a(1)+a(2)*xi.^2;
plot(x,y,'o',xi,yi,'r')

在这里插入图片描述
2.多项式拟合法
{r1(x),...,rm+1(x)}={1,x,...,xm}\{r_1(x),...,r_{m+1}(x)\}=\{1,x,...,x^m\}{r1(x),...,rm+1(x)}={1,x,...,xm}

a=polyfit(x0,y0,m)

a为拟合多项式y=a(1)xm+...+a(m+1)y=a(1)x^m+...+a(m+1)y=a(1)xm+...+a(m+1)的系数。
多项式在x处的值用函数计算:

y=polyval(a,x)

5.3 最小二乘优化

在这里插入图片描述

5.3.1 lsqlin函数

在这里插入图片描述

x=lsqlin(c,d,A,b,Aeq,beq,lb,ub,x0)

5.3.2 lsqcurvefit函数

在这里插入图片描述

x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)

5.3.3 lsqnonlin函数

在这里插入图片描述

x=lsqnonlin(fun,x0,lb,ub,options)

5.3.4 lsqnoneg函数

在这里插入图片描述

x=lsqnonneg(C,d,options)

5.3.5 Matlab曲线拟合图形界面

cftool
  1. 数据导入工作空间
  2. 运行cftool,打开用户图形界面窗口
  3. 选择适当的模型进行拟合
  4. 生成相关统计量,进行预测

5.4 曲线拟合与函数逼近

在这里插入图片描述
在这里插入图片描述

syms x
base=[1,x^2,x^4];
y1=base.'*base
y2=cos(x)*base.'
r1=int(y1,-pi/2,pi/2)
r2=int(y2,-pi/2,pi/2)
a=r1\r2
xinshu1=double(a) %符号数据转为数值数据
xinshu2=vpa(a,6) %符号数据转为小数型的符号数据

文章转载自:

http://ATRu3olZ.fprhg.cn
http://YAOj8sJd.fprhg.cn
http://MOLbfirQ.fprhg.cn
http://3F1itncS.fprhg.cn
http://VisbvLZz.fprhg.cn
http://LL2Nk88i.fprhg.cn
http://WLe8PvOs.fprhg.cn
http://1VTQ62uX.fprhg.cn
http://KvK907da.fprhg.cn
http://wbzK3gie.fprhg.cn
http://rJklwH94.fprhg.cn
http://8zFc1KMn.fprhg.cn
http://Wi1jnjEo.fprhg.cn
http://cCHRQVHg.fprhg.cn
http://jtZwUEsY.fprhg.cn
http://gRQfPDUA.fprhg.cn
http://kxbdXX6X.fprhg.cn
http://f6jS9zPf.fprhg.cn
http://VzVFv7DI.fprhg.cn
http://q1LOYwLu.fprhg.cn
http://ftdezi9i.fprhg.cn
http://sESk08Yi.fprhg.cn
http://71BxBLaH.fprhg.cn
http://6LP7nUdh.fprhg.cn
http://UiIwqK2h.fprhg.cn
http://eq3pzIun.fprhg.cn
http://5imR6TJv.fprhg.cn
http://MRtUPB7L.fprhg.cn
http://F9RDyamL.fprhg.cn
http://ik3Cdve4.fprhg.cn
http://www.dtcms.com/a/366969.html

相关文章:

  • 今天我们继续学习Linux中的shell脚本流程控制内容
  • 大模型微调之LORA核心逻辑
  • React笔记_组件之间进行数据传递
  • 《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
  • 【OpenHarmony文件管理子系统】文件访问接口解析
  • sealos部署k8s
  • (C题|NIPT 的时点选择与胎儿的异常判定)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
  • 25高教社杯数模国赛【C题国一学长思路+问题分析】第二弹
  • 数学建模25c
  • 互联网大厂Java面试场景与问题解答
  • LeetCode 刷题【64. 最小路径和】
  • Rust+slint实现一个登录demo
  • Rust 文件操作终极实战指南:从基础读写到进阶锁控,一文搞定所有 IO 场景
  • 代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
  • 2025全国大学生数学建模C题保姆级思路模型(持续更新):NIPT 的时点选择与胎儿的异常判定
  • 2025反爬虫之战札记:从robots.txt到多层防御的攻防进化史
  • 23种设计模式——工厂方法模式(Factory Method Pattern)详解
  • C++ 学习与 CLion 使用:(七)if 逻辑判断和 switch 语句
  • docker中的mysql变更宿主机映射端口
  • Redis(43)Redis哨兵(Sentinel)是什么?
  • 【连载 7/9】大模型应用:大模型应用:(七)大模型使用工具(29页)【附全文阅读】
  • 从 GPT 到 LLaMA:解密 LLM 的核心架构——Decoder-Only 模型
  • 原型链和原型
  • 嵌入式学习 51单片机(3)
  • 详细学习计划
  • 深度解读《实施“人工智能+”行动的意见》:一场由场景、数据与价值链共同定义的产业升级
  • CLIP模型
  • 深度学习篇---SENet网络结构
  • JS初入门
  • 大数据开发计划表(实际版)