matlab实践(九):分段线性插值与三次样条插值

题目

用matlab对572所在区间分别进行分段线性插值、三次样条插值,计算出151,159,984,995的对数值,画出图形并在图形上用红色圆圈标记151,159,984,995所在的点,同时在图形中显示这些点的坐标。
说明:假设125,528,765;则插值区间为【120,770】

1.分段线性插值、三次样条插值

1.1分段线性插值

Step1:根据已知 的取值点,求出每个取值点对应的线性插值多项式,表示为:
L j ( x ) = x − x j − 1 x j − x j − 1 y j − 1 + x − x j − 1 x j − x j − 1 y j L_{j}(x)=\frac{x-x_{j-1}}{x_{j}-x_{j-1}}y_{j-1}+ \frac{x-x_{j-1}}{x_{j}-x_{j-1}}y_{j} Lj(x)=xjxj1xxj1yj1+xjxj1xxj1yj

Step2:根据已知的取值点,使用第一步中求出的每个取值点对应的线性插值多项式,然后求已知 个点对应的线性插值多项式 。其表达式为:
L ( x ) = ∑ j = 0 n y j L j ( x ) L (x)=\sum_{j=0}^{n} y_{j}L_{j}(x) L(x)=j=0nyjLj(x)

选取以150开始,间隔为50,到1000结束的点,然后使用分段线性插值法,计算出151,159,984,995的对数值。

x = 150:50:1000;
y = B(15:5:100)+2.*B(b==10);
figure(2)xx=[151,159,984,995];
for i=1:4yy(i)=fdxx(x,y,xx(i));
end
xx1=150:1:999;
for i=1:850yyy(i)=fdxx(x,y,xx1(i));
end
plot(xx1,yyy)
hold on
scatter(xx,yy)
text(xx,yy, {'151','159','984','995'}, 'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'right'); % 添加文字标注
hold on
grid on
plot(x,y,'o')
% 添加坐标轴标签和标题
xlabel('x');
ylabel('ln(x)');
title('插值点与分段线性插值');
legend('分段线性插值点坐标','插值点')% 显示图形
grid on;
function yy=fdxx(x,y,xx)n=size(x,2);for i=1:n-1if x(i)<xx&&xx<x(i+1)L1=(xx-x(i+1))/(x(i)-x(i+1));L2=(xx-x(i))/(x(i+1)-x(i));yy=L1*y(i)+L2*y(i+1);break;elseif x(i)==xxyy=y(i);      endendend

结果如下所示

在这里插入图片描述

1.2三次样条插值

假设已知一组数据点的横坐标为$ x0, x1, …, xn$,纵坐标为 y 0 , y 1 , . . . , y n y0, y1, ..., yn y0,y1,...,yn

  1. 计算每个小区间的一阶导数,可以使用自然边界条件或固定边界条件来确定边界处的导数值。

  2. 在每个小区间 [xi, xi+1] 内,拟合一个三次多项式 Si(x),使得在该区间内的插值函数满足连续性和二阶导数连续性。

    三次多项式 Si(x) 的一般形式为:
    S i ( x ) = a i + b i ( x − x i ) + c i ( x − x i ) 2 + d i ( x − x i ) 3 Si(x) = ai + bi(x - xi) + ci(x - xi)^2 + di(x - xi)^3 Si(x)=ai+bi(xxi)+ci(xxi)2+di(xxi)3

    其中,$ai, bi, ci, di $是待求的系数。

  3. 为了确定这些系数,需要满足以下条件:

    a) 在每个小区间内,插值函数与已知数据点相等:
    S i ( x i ) = y i Si(xi) = yi Si(xi)=yi

    b) 在每个小区间内,插值函数的一阶导数连续:
    S i ′ ( x i + 1 ) = S i + 1 ′ ( x i + 1 ) Si'(xi+1) = Si+1'(xi+1) Si(xi+1)=Si+1(xi+1)

    c) 在每个小区间内,插值函数的二阶导数连续:
    S i ′ ′ ( x i + 1 ) = S i + 1 ′ ′ ( x i + 1 ) Si''(xi+1) = Si+1''(xi+1) Si′′(xi+1)=Si+1′′(xi+1)

  4. 使用这些条件,可以得到一个三对角线性方程组,通过求解该方程组即可得到每个小区间的系数。

    方程组的形式为:
    h i ∗ c i − 1 + 2 ( h i + h i + 1 ) ∗ c i + h i + 1 ∗ c i + 1 = 3 ∗ ( ( y i + 1 − y i ) / h i + 1 − ( y i − y i − 1 ) / h i ) h_i * ci-1 + 2(h_i + h_i+1) * ci + h_i+1 * ci+1 = 3 * ((y_i+1 - y_i) / h_i+1 - (y_i - y_i-1) / h_i) hici1+2(hi+hi+1)ci+hi+1ci+1=3((yi+1yi)/hi+1(yiyi1)/hi)

    其中,$h_i = x_i+1 - x_i $是每个小区间的宽度。

  5. 求解得到系数后,即可得到每个小区间的三次多项式 Si(x)。

  6. 最后,根据所需的插值点 x,找到对应的小区间 [xi, xi+1],然后使用对应的三次多项式 Si(x) 计算插值点的函数值。

1.3 代码实现

%%三次样条插值
figure(3)
s=threesimple1(x,y,xx1);
plot(xx1,s)
hold on
grid on
plot(x,y,'o')
yy=threesimple1(x,y,xx);
scatter(xx,yy)
text(xx,yy, {'151','159','984','995'}, 'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'right'); % 添加文字标注xlabel('x'), ylabel('ln(x)')
title('插值点与三次样条函数') 
legend('三次样条插值点坐标','插值点')
function [D,h,A,g,M]=threesimple(X,Y)
%        自然边界条件的三次样条函数(第二种边界条件)
%        此函数为M值求值函数
%        D,h,A,g,M输出量分别为系数矩阵D,插值宽度h,差商表A,g值,M值 n=length(X); A=zeros(n,n);A(:,1)=Y';D=zeros(n-2,n-2);g=zeros(n-2,1);for  j=2:nfor i=j:nA(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1));endendfor i=1:n-1h(i)=X(i+1)-X(i);endfor i=1:n-2D(i,i)=2;g(i,1)=(6/(h(i+1)+h(i)))*(A(i+2,2)-A(i+1,2));endfor i=2:n-2u(i)=h(i)/(h(i)+h(i+1));n(i-1)=h(i)/(h(i-1)+h(i));D(i-1,i)=n(i-1);D(i,i-1)=u(i);             endM=D\g;M=[0;M;0];         
endfunction s=threesimple1(X,Y,x)
%        自然边界条件函数 
%        s函数表示三次样条插值函数插值点对应的函数值
%        根据三次样条参数函数求出的D,h,A,g,M
%        x表示求解插值点函数点,X为已知插值点        [D,h,A,g,M]=threesimple(X,Y)n=length(X); m=length(x);    for t=1:mfor i=1:n-1if (x(t)<=X(i+1))&&(x(t)>=X(i))p1=M(i,1)*(X(i+1)-x(t))^3/(6*h(i));p2=M(i+1,1)*(x(t)-X(i))^3/(6*h(i));p3=(A(i,1)-M(i,1)/6*(h(i))^2)*(X(i+1)-x(t))/h(i);p4=(A(i+1,1)-M(i+1,1)/6*(h(i))^2)*(x(t)-X(i))/h(i);s(t)=p1+p2+p3+p4; break;elses(t)=0; endendend
end

结果如下所示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/247592.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ - SpringBoot整合RocketMQ

SpringBoot整合RocketMQ 1、快速实战 ​ 按照SpringBoot三板斧&#xff0c;快速创建RocketMQ的客户端。创建Maven工程&#xff0c;引入关键依赖&#xff1a; <dependencies><dependency><groupId>org.apache.rocketmq</groupId><artifactId>r…

Spring AOP 概念及其使用

目录 AOP概述 什么是AOP&#xff1f; 什么是Spring AOP ? Spring AOP 快速入门 1.引⼊ AOP 依赖 2.编写AOP程序 Spring AOP 核心概念 1.切点 2.连接点 3.通知 4.切面 通知类型 注意事项: PointCut&#xff08;定义切点&#xff09; 切面优先级 Order 切点表达…

Oracle的数据一致性机制原理

一、前言 在单用户环境下&#xff0c;在操作数据库是不需要考虑其他用户会修改同一个数据。但是在多用户的情况下&#xff0c;多个事务可能会修改同一个数据&#xff0c;最终会得到错误的数据结果。 Oracle数据库是通过 multiversion consistency model&#xff08;多版本数据…

AWS攻略——使用中转网关(Transit Gateway)连接同区域(Region)VPC

文章目录 环境准备创建VPC 配置中转网关给每个VPC创建Transit Gateway专属挂载子网创建中转网关创建中转网关挂载修改VPC的路由 验证创建业务Private子网创建可被外网访问的环境测试子网连通性Public子网到Private子网Private子网到Private子网 知识点参考资料 在《AWS攻略——…

基于SSM的老年公寓信息管理的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

pip命令详解

pip命令介绍 pip是由Ian Bicking在2008年提出的&#xff0c;他将pyinstall重命名为pip。名称pip是首字母缩写词&#xff0c;全称为“Package Installer for Python”。自Python3的3.4版本以及Python2的2.7.9版本开始&#xff0c;pip被直接包括在Python的安装包内&#xff0c;成…

树_二叉树所有路劲

//给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 // // 叶子节点 是指没有子节点的节点。 // // 示例 1&#xff1a; // // //输入&#xff1a;root [1,2,3,null,5] //输出&#xff1a;["1->2->5&quo…

Liunx高级程序设计-Shell -1

引入 完成以下任务 : 判断用户家目录下&#xff08;~ &#xff09;下面有没有一个叫 test 的文件夹 如果没有&#xff0c;提示按 y 创建并进入此文件夹&#xff0c;按 n 退出 如果有&#xff0c;直接进入&#xff0c;提示请输入一个字符串&#xff0c;并按此字符串创建…

14、策略模式(Strategy Pattern)

策略模式&#xff08;Strategy Pattern&#xff09;为同一个行为定义了不同的策略&#xff0c;并为每种策略都实现了不同的方法。在用户使用的时候&#xff0c;系统根据不同的策略自动切换不同的方法来实现策略的改变。同一个策略下的不同方法是对同一功能的不同实现&#xff0…

分布式搜索引擎elasticsearch(一)

5.1 初始elasticsearch elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。 5.1.1正向索引 5.1.2elasticsearch采用倒排索引: 文档(document):每条数据就是一个…

【深度学习】回归模型相关重要知识点总结

回归分析为许多机器学习算法提供了坚实的基础。在这篇文章中&#xff0c;我们将总结 10 个重要的回归问题和5个重要的回归问题的评价指标。 一、线性回归的假设是什么 线性回归有四个假设&#xff1a; 线性&#xff1a;自变量&#xff08;x&#xff09;和因变量&#xff08;y&…

Elasticsearch:评估 RAG - 指标之旅

作者&#xff1a;Quentin Herreros&#xff0c;Thomas Veasey&#xff0c;Thanos Papaoikonomou 2020年&#xff0c;Meta发表了一篇题为 “知识密集型NLP任务的检索增强生成” 的论文。 本文介绍了一种通过利用外部数据库将语言模型 (LLM) 知识扩展到初始训练数据之外的方法。 …