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.mzph.cn/news/197478.shtml

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

相关文章

Java Socket编程之基于TCP协议通信

1.说明 Socket&#xff08;套接字&#xff09;是计算机网络编程中用于实现网络通信的一种编程接口或抽象概念。 它提供了一种标准的接口&#xff0c;使应用程序能够通过网络与其他计算机进行通信。 Socket可以看作是应用程序与网络之间的一个通信端点&#xff0c;类似于电话中…

如何在 Chrome 上调试文件打断点

1. 控制台进入 Source 2. CtrlP 输入文件名称 3. 在需要的位置手动打断点 4. 重新触发代码运行&#xff0c;触发断点

分享 | 顶刊高质量论文插图配色(含RGB值及16进制HEX码)(第一期)

我在很早之前出过一期高质量论文绘图配色&#xff0c;但当时觉得搜集太麻烦于是就没继续做&#xff0c;后来用MATLAB爬了上万张顶刊绘图&#xff0c;于是又想起来做这么一个系列&#xff0c;拿了一个多小时写了个提取论文图片颜色并得出RGB值和16进制码并标注在原图的代码&…

简单了解传输层协议之TCP和UDP

目录 一、什么是端口号? 二、TCP协议 2.1 TCP报文格式 2.2 三次握手 2.3 四次挥手 2.4 窗口流量控制 三、UDP协议 3.1 UDP报文格式 3.4 传输过程 一、什么是端口号? 我们自己的一台电脑上有时可能会同时运行多个进程软件来进行上网。那么当网络上的服务器响应我们电…

Chrome清除特定网站的Cookie,从而让网址能正常运行(例如GPT)

Chrome在使用某些网址的时候&#xff0c;例如GPT的时候&#xff0c;可能会出现无法访问这个网址的情况&#xff0c;就是点不动啥的 只需要把你需要重置的网址删除就好了

C语言小游戏:三子棋

目录 &#x1f30d;前言 &#x1f685;目录设计 &#x1f48e;游戏逻辑设置 ⚔三子棋棋盘设计 ⚔三子棋运行逻辑 &#x1f440;怎么设置人下棋 &#x1f440;怎么设置电脑下棋 ✈如何判断输赢 ✍结语 &#x1f30d;前言 Hello,csdn的各位小伙伴你们好啊!这次小赵给大…

根据源码梳理Redisson的可重入、锁重试以及看门狗机制原理

Redisson可重入的原理 在上篇文章中我们已经知道了除了需要存储线程标识外&#xff0c;会额外存储一个锁重入次数。那么接下来我们查看使用Redisson时&#xff0c;Redisson的加锁与释放锁流程图。 当开始获取锁时&#xff0c;会先判断锁是否存在&#xff0c;如果存在再进行判断…

算法通关村第十六关-黄金挑战滑动窗口与堆的结合

大家好我是苏麟 , 今天带来一道小题 . 滑动窗口最大值 描述 : 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 题目 : …

EM32DX-C4【C#】

1外观&#xff1a; J301 直流 24V 电源输入 CAN0 CAN0 总线接口 CAN1 CAN1 总线接口 J201 IO 接线段子 S301-1、S301-2 输出口初始电平拨码设置 S301-3~S301-6 模块 CAN ID 站号拨码开关 S301-7 模块波特率拨码设置 S301-8 终端电阻选择开关 2DI&#xff1a; 公共端是…

XUbuntu22.04之OBS30.0设置录制音频降噪(一百九十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

LLM之Agent(三):HuggingGPT根据用户需求自动调用Huggingface合适的模型

​ 浙大和微软亚洲研究院开源的HuggingGPT&#xff0c;又名JARVIS&#xff0c;它可以根据用户的自然语言描述的需求就可以自动分析需要哪些AI模型&#xff0c;然后去Huggingface上直接调用对应的模型&#xff0c;最终给出用户的解决方案。 一、HuggingGPT的工作流程 它的…

Linux驱动开发学习笔记3《新字符设备驱动实验》

目录 一、新字符设备驱动原理 1.分配和释放设备号 2.新的字符设备注册方法 &#xff08;1&#xff09; 字符设备结构 &#xff08;2&#xff09;cdev_init函数 &#xff08;3&#xff09; cdev_add函数 &#xff08;4&#xff09;cdev_del 函数 二、自动创建设备节点 …

网络安全(二)-- Linux 基本安全防护技术

4.1. 概述 安全防护基础主要是会用Linux系统&#xff0c; 熟悉Linux基本操作命令。 在这个章节中&#xff0c;我们主要探讨自主访问控制&#xff08;许可位、ACL&#xff09;、文件属性、 PAM技术、能力机制等。 4.1.1. 补充命令 本章节中&#xff0c;涉及一些新的命令&#…

【C++】STL简介(了解)【STL的概念,STL的历史缘由,STL六大组件、STL的重要性、以及如何学习STL、STL的缺陷的讲解】

这里写自定义目录标题 一、什么是STL二、STL的版本1. 原始版本2. P. J. 版本3. RW版本★ 4. SGI版本 三、STL的六大组件四、STL的重要性五、如何学习STL六、STL的缺陷 一、什么是STL STL ( standard template libaray - 标准模板库 )&#xff1a;是C标准库 的重要组成部分&…

红队攻防之隐匿真实IP

0x01 前言 安全态势日益严峻&#xff0c;各大组织普遍采用了综合的安全产品&#xff0c;如态势感知系统、WAF和硬件防火墙等&#xff0c;这些措施加大了渗透测试和攻防演练的难度。即使是一些基本的漏洞验证、端口扫描&#xff0c;也可能导致测试IP被限制&#xff0c;从而阻碍…

DFT新手教程:VASP中ISIF取值设置

新手初学VASP计算时首先接触到的就是结构优化的计算任务。 在结构优化中&#xff0c;INCAR中的关键参数包括 IBRION &#xff0c;NSW&#xff0c;ISIF&#xff0c;EDIFF和EDIFFG 各个参数均可在vaspwiki查到可设置的参数以及该参数所具有的设置的含义。 https://www.vasp.at/…

佛罗里达大学利用神经网络,解密 GPCR-G 蛋白偶联选择性

内容一览&#xff1a;G 蛋白偶联受体 (GPCRs) 是一种将细胞膜外的刺激&#xff0c;传递到细胞膜内的跨膜蛋白&#xff0c;广泛参与到人体生理活动当中。近日&#xff0c;佛罗里达大学的研究者测定了 GPCRs 和 G 蛋白的结合选择性&#xff0c;并开发了预测二者选择性的算法&…

JVM简单了解内存溢出

JVM oracle官网文档&#xff1a;https://docs.oracle.com/en/java/javase/index.html 什么是JVM JVM(Java Virtual Machine)原名Java虚拟机&#xff0c;是一个可以执行Java字节码的虚拟计算机。它的作用是在不同平台上实现Java程序的跨平台运行&#xff0c;即使在不同的硬件…

MX6ULL学习笔记 (七) 中断实验

前言&#xff1a; 本章我们就来学习一 下如何在 Linux 下使用中断。在linux内核里面使用中断&#xff0c;不同于我们以往在别的裸机开发一样&#xff0c;需要进行各种寄存器的配置&#xff0c;中断使能之类的&#xff0c;而在Linux 内核中&#xff0c;提供了完善的中断框架…

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

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