代数插值实验

实验类型:●验证性实验  ○综合性实验  ○设计性实验

实验目的:进一步熟练掌握Lagrange插值算法、Newton插值算法,提高编程能力和解决插值问题的实践技能。

实验报告:根据实验情况和结果撰写并递交实验报告。    

实验报告打印和装订顺序要求

实验报告打印要求:在A4纸上将实验报告的Word文档双面打印;打印的字迹要清晰,报告内容文字或截图上的文字打印后,要确保字迹清晰可见,若字迹不清影响评阅,报告得分将酌情扣减。

实验报告装订顺序:

  • 实验任务(本文档版式不得做任何改动);
  • 实验报告正文(Word文档);
  • 可以将A4纸上详细手工计算过程拍照成JPG图片插入在实验报告的word 电子版中随Word文档双面打印

实验总结 (学会了......; 掌握了......; 训练了......; 发现了......; 今后学习中......有待提高。)

程序代码(MATLAB程序)

电子报告word文件命名规则:专业班级-完整学号-实验X-姓名.doc, 如信息123班学号为201212030315的郭海涛同学实验2报告word文件命名则应是:信息123-201212030315-实验2-郭海涛.doc, 其中 .doc是Word文件扩展名

特别提醒:学委负责检查电子文件命名规范,命名不规的将不接收。每人必需提交电子报告和纸质报告各一份(两者内容一致)。本实验任务书版式不得做任何改动。电子报告以班为单位提交压缩包.

此页之前的内容为实验任务内容,实验任务内容及其版式不得做任何更改;实验报告从下页开始编

手工计算例题:已知表sin =0.5000,sin =0.7071,sin =0.8660,分别由

1.Lagrange线性插值手工计算sin 的近似值

2.Lagrange二次插值手工计算sin 的近似值

3.一次Newton插值多项式手工计算sin 的近似值

4.二次Newton插值多项式手工计算sin 的近似值

实验代码:

拉格朗日插值法:

function lag()

    % 已知数据点

    nodes = [pi/6, 0.5; pi/4, 0.7071];

    % 计算插值多项式的系数

    coefficients = lagrange_coefficients(nodes);

    % 打印多项式系数

    disp("L1(x) = ");

    disp(coefficients);

    % 画出函数图像

    x_values = linspace(0, 2*pi, 100);

    y_values = sin(x_values);

    interpolated_y_values = polyval(coefficients, x_values);

    plot(x_values, y_values, 'b', 'LineWidth', 2);

    hold on;

    plot(x_values, interpolated_y_values, 'r--', 'LineWidth', 2);

    scatter(nodes(:,1), nodes(:,2), 'k', 'filled');

    xlabel('x');

    ylabel('y');

    title('Lagrange Interpolation');

    legend('sin(x)', 'L1=(x)', 'Interpolation Points');

    grid on;

    hold off;

end

function coefficients = lagrange_coefficients(nodes)

    n = size(nodes, 1) - 1;

    coefficients = zeros(1, n+1);

    for i = 1:n+1

        numerator = 1;

        denominator = 1;

        for j = 1:n+1

            if j ~= i

                numerator = conv(numerator, poly(nodes(j, 1)));

                denominator = denominator * (nodes(i, 1) - nodes(j, 1));

            end

        end

        coefficients = coefficients + nodes(i, 2) * numerator / denominator;

    end

end

代码每次求一个结果,需要每次加入一个点,并将Li(x)改为对应的内容即可。

依此加入的点为(pi/3,0.8660),(pi/5,0.58779)

牛顿插值法:

function new()

    % 已知数据点

    nodes = [pi/6, 0.5; pi/4, 0.7071];

    % 计算差商表

    F = divided_difference(nodes);

    % 计算插值多项式的系数

    coefficients_N1 = F(1:2,:);

    % 打印多项式系数

    disp("N1(x) = ");

    disp(coefficients_N1);

    % 画出函数图像

    x_values = linspace(0, 2*pi, 100);

    y_values = sin(x_values);

    interpolated_y_values_N1 = newton_interpolation_polynomial(coefficients_N1, nodes(1:2,1), x_values);

    plot(x_values, y_values, 'b', 'LineWidth', 2);

    hold on;

    plot(x_values, interpolated_y_values_N1, 'r--', 'LineWidth', 2);

    scatter(nodes(:,1), nodes(:,2), 'k', 'filled');

    xlabel('x');

    ylabel('y');

    title('Newton Interpolation (N1)');

    legend('sin(x)', 'N1(x)', 'Interpolation Points');

    grid on;

    hold off;

end

function F = divided_difference(nodes)

    n = size(nodes, 1);

    F = zeros(n);

    F(:,1) = nodes(:,2);

    for j = 2:n

        for i = j:n

            F(i,j) = (F(i,j-1) - F(i-1,j-1)) / (nodes(i,1) - nodes(i-j+1,1));

        end

    end

end

function y = newton_interpolation_polynomial(coefficients, nodes_x, x)

    n = length(coefficients) - 1;

    y = zeros(size(x));

    for k = 1:length(x)

        p = 1;

        for j = 1:n

            p = p * (x(k) - nodes_x(j));

        end

        y(k) = coefficients(1);

        for j = 1:n

            y(k) = y(k) + coefficients(j+1) * p;

            p = p / (x(k) - nodes_x(j));

        end

    end

end

代码每次求一个结果,需要每次加入一个点,并将Ni(x)改为对应的内容即可。

依此加入的点为(pi/3,0.8660),(pi/5,0.58779)

上述代码仅供参考

拉格朗日插值法的Matlab运行结果与手工计算对比:

一次插值

二次插值

三次插值

手工计算结果

0.79106,0.08580

-0.35162,1.25133,-0.05880

matlab结果

0.7911,0.0858

-0.3516,1.2513,  -0.0588

-0.1210,-0.0664,1.0356,-0.0067

手工计算结果保留五位小数,四舍五入后,经过比对小数点后四位,发现两者结果完全一致。

牛顿插值法的Matlab运行结果与手工计算对比:

一次插值

二次插值

三次插值

手工计算结果

0.5000,0.79106

0.5000,0.79106,

-0.35162

matlab结果

0.5000,0.7911

0.5000,0.7911,

-0.3516

0.5000,0.7911,

-0.3516,-0.1210

手工计算结果保留五位小数,四舍五入后,经过比对小数点后四位,发现两者结果完全一致。

实验总结:

在这次实验中,我学会了使用拉格朗日线性插值法和拉格朗日二次插值法、一次牛顿插值多项式和二次牛顿插值多项式的方法来求某点的近似值。通过实践,我掌握了拉格朗日插值和牛顿插值方法的原理和实现步骤。

通过编写 MATLAB 程序,我训练了插值算法的实现,并成功进行了数据插值和函数逼近。

在实验中,我发现了在插值过程中需要注意确保基函数的正确性和数据点的选择。通过不断练习和调试,我更加熟练地掌握了这些插值方法的实现和应用。

通过这次实验,我发现了在插值过程中需要注意选择合适的插值节点和插值多项式的阶数,以及对数据集进行适当的预处理。我也发现了在实现插值算法时,需要注意避免数值稳定性和效率方面的问题,如矩阵求解时的条件数和插值多项式的次数。

在今后的学习中,我将继续加强对插值方法的理解,并尝试将其应用于更加复杂的数据集和问题中,以提高算法的适用性和准确性。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

物联网智能技术的深入探讨与案例分析

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

点云配准之点到点,点到面,点到线ICP,NDT算法介绍

点云配准(Point Cloud Registration)即求一个位姿变换 x [ R , t ] \mathbf{x}[\mathbf{R},\mathbf{t}] x[R,t],将源点云 Q { q 1 , ⋯ , q m } Q\{\mathbf{q}_{1},\cdots,\mathbf{q}_{m}\} Q{q1​,⋯,qm​}变换到与目标点云 P { p 1 , ⋯…

Html5详解

目录 一、浏览器相关知识 二、html简介 (一)超文本标记语言 (二)HTML基础结构 (三)HTML概念词汇解释 (四)HTML的语法规则 (五)前端开发工具VS Code与插件 1.VS Code的安装 2.安装插件: 3.通过live Server 小型服务器运行项目 4.其他常见设置 5.在线帮…

实现 think/queue 日志分离

当我们使用think/queue包含了比较多的不同队列,日志会写到runtime/log目录下,合并写入的,不好排查问题,我们遇到一个比较严重的就是用了不同用户来执行,权限冲突了,导致部分队列执行不了. 为了解决以上问题,本来希望通过Log::init设置不同日志路径的,但是本地测试没生效,于是用…

创新不设限,灵码赋新能:通义灵码新功能深度评测

引言 自从2023年通义灵码发布以来,这款基于阿里云通义大模型的AI编码助手便迅速成为了开发者们心中的“明星产品”,受到了广大开发者的关注与好评。它不仅为个人开发者提供了强大的支持,帮助企业团队提升了研发效率,同时也推动了…

道品科技智慧农业中的物联网技术:生产与溯源系统的结合

随着全球人口的不断增长和城市化进程的加快,农业面临着巨大的挑战,包括资源短缺、环境污染和食品安全等问题。为了解决这些问题,智慧农业应运而生,其中物联网(IoT)技术的应用为农业的现代化提供了强有力的支…

【MPC-Simulink】EX03 基于非线性系统线性化模型MPC仿真(MIMO)

【MPC-Simulink】EX03 基于非线性系统线性化模型MPC仿真(MIMO) 参考 Matlab 官网提供的 Model Predictive Control Toolbox - Getting Started Guide,以零初始状态条件下的非线性系统在线性化后得到的多输入多输出(MIMO&#xff…

期权开户难不难?期权开户成功后当天是否能交易

期权开户难不难?这取决于投资者的准备情况和所选的开户途径。对于满足一定资金和经验要求的投资者来说,通过正规期货公司或期权交易平台进行开户,虽然流程相对复杂,但只要遵循步骤,仍然可以顺利完成,下文为…

沈阳乐晟睿浩科技有限公司引领新潮流

在当今数字化浪潮汹涌的时代,电子商务以其独特的魅力和无限潜力,正深刻改变着人们的消费习惯与商业模式。沈阳乐晟睿浩科技有限公司(以下简称“乐晟睿浩”),作为电商领域的一颗璀璨新星,凭借其深厚的技术实…

【一步步开发AI运动小程序】二十一、如果将AI运动项目配置持久化到后端?

**说明:**本文所涉及的AI运动识别、计时、计数能力,都是基于云智「Ai运动识别引擎」实现。云智「Ai运动识别」插件识别引擎,可以为您的小程序或Uni APP赋于原生、本地、广覆盖、高性能的人体识别、姿态识别、10余种常见的运动计时、计数识别及…

Python栈--深度优先搜索(迷宫问题)

给一个二维列表,表示迷宫(0表示给出算法,求通道,1表示围墙)。 给出算法,求一条走出迷宫的路径。 maze [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], […

安卓主板_基于联发科MTK MT8788平台平板电脑方案_安卓核心板开发板定制

联发科MT8788安卓核心板平台介绍: MTK8788设备具有集成的蓝牙、fm、wlan和gps模块,是一个高度集成的基带平台,包括调制解调器和应用处理子系统,启用LTE/LTE-A和C2K智能设备应用程序。该芯片集成了工作在2.0GHz的ARM Cortex-A73、最…

LabVIEW 版本控制

在软件开发中,版本控制系统(VCS) 是管理代码版本变化的核心工具。对于 LabVIEW 用户,虽然图形化编程带来高效开发体验,但由于其特有的二进制 VI 文件格式,传统文本比较工具无法直接用于 LabVIEW 项目。这时…

centos7.9部署oracle19c教程

1.安装前准备 1.1关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalldvi /etc/selinux/config1.2 安装依赖 yum install -y unzip compat-libcap1 compat-libstdc-33 gcc-c ksh libaio-devel libstdc-devel elfutils-libelf-devel fontconfig-devel …

034集——JIG效果实现(橡皮筋效果)(CAD—C#二次开发入门)

可实现效果如下(对象捕捉F3需打开,否则效果不好): public class CircleJig : EntityJig{public static void DraCJig(){PromptPointResult ppr Z.ed.GetPoint("a");if (ppr.Value null) return;Point3d pt ppr.Value…

Softing工业将在纽伦堡SPS 2024上展示Ethernet-APL现场交换机

今年,Softing工业将在纽伦堡SPS贸易展览会上展示aplSwitch Field —— 一款先进的过程自动化解决方案。这款16端口以太网高级物理层(APL)现场交换机的防护等级高达IP30,可提供从应用到现场级别的无缝以太网连接,专为Ex…

鸿蒙UI开发——小图标的使用

1、前 言 鸿蒙SDK中为我们提供了大量的高质量内置图标,图标详见(https://developer.huawei.com/consumer/cn/design/harmonyos-symbol/) 图标资源一览: 除了基本的图标图形外,我们还可以支持图标的多种填充模式(单色、多色、分层…

python3的基本数据类型:Dictionary(字典)的创建

一. 简介 本文开始简单学习一下 python3中的一种基本数据类型:Dictionary(字典)。 字典(dictionary)是Python中另一个非常有用的内置数据类型。 二. python3的基本数据类型:Dictionary(字典&…

2024 年使用 Postman 调用 WebService 接口图文教程

使用 Postman 调用 WebService 接口图文教程

设计字符串类 运算符重载 C++实现 QT环境

问题&#xff1a;设计字符串类&#xff0c; 支持下面的操作 MyString s1; // 默认构造函数 MyString s2("hello"); // 含参构造函数 MyString s3(s1); // 传参构造函数 MyString s4(5, c); // 自定义构造函数 // 运算符重载 ! > < // 运算符重…