数据拟合实验

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

实验目的: 进一步熟练掌握最小二乘多项式拟合算法,提高编程能力和解决拟合问题的实践技能。

实验内容:

1 对下列数据,求解最小二乘抛物线f(x)=Ax2+Bx+C

x

-3

-1

1

3

y

15

5

1

5

先在A4纸上手工计算,再编写程序、上机调试和计算

2 数学模型与拟合算法应用:logistic 人口增长模型的参数确定。当人口P(t)受限于极限值L时,它符合logistic曲线,具有函数形式P(t)=L/(1+CeAt)。对下列数据集求解参数A和C,L是已知的。

(a)5个(t,P)点:(0,200), (1,400), (2,650), (3,850), (4,950);   L=1000

(b)5个(t,P)点:(0,500), (1,1000), (2,1800)(3,2800), (4,3700); L=5000

先在A4纸上手工计算,再编写程序、上机调试和计算

实验原理: 求多项式或确定模型参数,使得拟合函数值与离散点纵坐标偏差平方和最小----误差向量2范数的平方最小。

实验说明:数学模型与拟合算法应用问题,应对形式P(t)=L/(1+CeAt)的非线性函数进行变形,取对数,引入变换,从而将非线性函数模型转化为一次多项式模型(即完成模型的线性化处理),并用前述变换对数据处理使得处理后的数据适合一次多项式拟合。要求输入所有拟合点(ti,Pi),输出拟合函数的待定系数并在同一坐标系下画出原始离散点和拟合函数P(t)=L/(1+CeAt)的曲线(注意要求画的不是一次多项式的曲线而是原始离散点和拟合函数P(t)=L/(1+CeAt)的曲线)。

实验步骤

  1. 要求上机实验前先手工计算再编写出程序代码;
  2. 编辑录入程序;
  3. 调试程序并截图记录调试过程中出现的问题及修改程序的过程;
  4. 经反复调试后,运行程序并验证程序运行是否正确。。
  5. 截图记录运行时的输入和输出,并把截图及时粘贴在Word文档里,配上必要的文字说明,以便证实你的实验过程真实可靠、证实你的程序正确性和可靠性。 
  6. 要求在A4纸上手工计算并和计算机程序计算的主要中间结果进行列表比较,手工解算过程中所有数据保留5位小数,依据列表进行验证手工解算和机器解算是否一致,若不一致,或纠正手工计算或修改计算机程序重新调试和运行,直到两者结果高度一致。严禁不加分析、不进行列表对比的妄下断语(即论断应有充分的依据,必要的分析、对比和推理过程)。将手工计算过程及其验证结论拍照成JPG图片插入在实验报告的word 电子版中随实验报告一起打印并提交。

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

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

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

实验报告装订顺序

1)实验任务(本文档版式不得做任何改动);

2)实验报告正文(Word文档);

3)可将A4 纸上详细手工计算过程拍照成JPG图片插入在实验报告的 word 电子版中随Word文档双面打印。

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

程序代码(MATLAB程序)

1. 对下列数据,求解最小二乘抛物线

x

-3

-1

1

3

y

15

5

1

5

手工计算结果:

拟合抛物线的系数为:

a = 0.8750

b = -1.7000

c = 2.1250

程序代码:

function [a, b, c, xx, yy] = sy81(x, y)

    % 输入:

    %   x - 自变量数据点, y - 因变量数据点

    %   a, b, c - 拟合抛物线的系数

    %   xx, yy - 拟合曲线的自变量和因变量数据点

    % 构建矩阵 X

    X = [x.^2; x; ones(1, length(x))]';

    coeff = (X' * X) \ (X' * y');

    a = coeff(1);

    b = coeff(2);

    c = coeff(3);

    % 显示结果

    fprintf('拟合抛物线的系数为:\n');

    fprintf('a = %.5f\n', a);

    fprintf('b = %.5f\n', b);

    fprintf('c = %.5f\n', c);

    xx = linspace(min(x), max(x), 100);

    yy = a * xx.^2 + b * xx + c;

    figure;

    plot(x, y, 'ro', 'MarkerSize', 8, 'LineWidth', 2);

    hold on;

    plot(xx, yy, 'b-', 'LineWidth', 2);

    title('最小二乘法拟合抛物线');

    xlabel('x');

    ylabel('y');

    legend('数据点', '拟合抛物线');

    grid on;

end程序运行界面及结果:

手工计算与matlab结果对比:

A

B

C

手工计算

0.87500

-1.70000

2.12500

实验结果

0.87500

-1.70000

2.12500

经过对比,手工计算结果与matlab结果完全相同。

2.(a)5个(t,P)点:(0,200), (1,400), (2,650), (3,850), (4,950);   L=1000

手工计算结果:

程序代码:

function [A,C,t1,P1,P_1,L1] = sy82()

t1 = [0, 1, 2, 3, 4];

P1 = [200, 400, 650, 850, 950];

P_1 = [log(4), log(3/2), log(7/13), log(3/17), log(1/19)];

L1 = 1000;

Y1 = log((L1 - P1) ./ P1)';

X1 = [t1', ones(length(t1), 1)];

coeff1 = X1 \ Y1;

A1 = -coeff1(1);

D1=coeff1(2);

C1 = exp(coeff1(2));

fprintf('数据集 (a) 的参数为:\n');

fprintf('A = -%.4f\n', A1);

fprintf('D = %.4f\n', D1);

fprintf('C = %.4f\n', C1);

t_fit1 = linspace(min(t1), max(t1), 100);

P_fit1 = L1 ./ (1 + C1 * exp(-A1 * t_fit1));

figure;

plot(t1, P1, 'ro', 'MarkerSize', 8, 'LineWidth', 2);

hold on;

plot(t_fit1, P_fit1, 'b-', 'LineWidth', 2);

title('数据集 (a) 的 Logistic 拟合');

xlabel('时间 t');

ylabel('人口 P(t)');

legend('数据点', '拟合曲线');

grid on;

xx = linspace(min(t1), max(t1), 100);

yy = -A1 * xx + D1;

figure;

plot(t1, P_1, 'ro', 'MarkerSize', 8, 'LineWidth', 2);

hold on;

plot(xx, yy, 'b-', 'LineWidth', 2);

title('最小二乘法拟合曲线');

xlabel('t');

ylabel('y');

legend('数据点', '拟合曲线');

grid on;

end程序运行界面及结果:

手工计算与matlab结果对比:

A

D

C

手工计算

-1.08015

1.45904

4.30184

实验结果

-1.0802

1.4590

4.3018

经过对比,手工计算结果与matlab结果一样(matlab保留四位小数,手工计算保留五位小数)。

2. (b)5个(t,P)点:(0,500), (1,1000), (2,1800)(3,2800), (4,3700); L=5000

手工计算结果:

程序代码:

function [A,C,t2,P2,P_2,L2] = sy83()

t2 = [0, 1, 2, 3, 4];

P2 = [500, 1000, 1800, 2800, 3700];

P_2 = [log(9), log(4), log(16/9), log(11/14), log(13/37)];

L2 = 5000;

Y2 = log((L2 - P2) ./ P2)';

X2 = [t2', ones(length(t2), 1)];

coeff2 = X2 \ Y2;

A2 = -coeff2(1);

D2=coeff2(2);

C2 = exp(coeff2(2));

fprintf('数据集 (b) 的参数为:\n');

fprintf('A =- %.4f\n', A2);

fprintf('D = %.4f\n', D2);

fprintf('C = %.4f\n', C2);

t_fit2 = linspace(min(t2), max(t2), 100);

P_fit2 = L2 ./ (1 + C2 * exp(-A2 * t_fit2));

figure;

plot(t2, P2, 'ro', 'MarkerSize', 8, 'LineWidth', 2);

hold on;

plot(t_fit2, P_fit2, 'b-', 'LineWidth', 2);

title('数据集 (b) 的 Logistic 拟合');

xlabel('时间 t');

ylabel('人口 P(t)');

legend('数据点', '拟合曲线');

grid on;

grid on;

xx = linspace(min(t2), max(t2), 100);

yy = -A2 * xx + D2;

figure;

plot(t2, P_2, 'ro', 'MarkerSize', 8, 'LineWidth', 2);

hold on;

plot(xx, yy, 'b-', 'LineWidth', 2);

title('最小二乘法拟合曲线');

xlabel('t');

ylabel('y');

legend('数据点', '拟合曲线');

grid on;

end程序运行界面及结果:

手工计算与matlab结果对比:

A

B

C

手工计算

-0.81138

2.19711

8.99897

实验结果

-0.8114

2.1971

8.9991

经过对比,手工计算结果与matlab结果一样(matlab保留四位小数,手工计算保留五位小数)。

数学建模:

代码:

function [t,r,A,C] = sy84()

t = [0.10, 0.24, 0.38, 0.52, 0.66, 0.80, 0.94, 1.08, 1.22, 1.36, 1.50, 1.65, 1.79, 1.93, ...

3.26, 3.53, 3.80, 4.07, 4.34, 4.61, 15.0, 25.0, 34.0, 53.0, 62.0]; % 时间 t (毫秒)

r = [11.1, 19.9, 25.4, 28.8, 31.9, 34.2, 36.3, 38.9, 41.0, 42.8, 44.4, 46.0, 46.9, 48.7,...

59.0, 61.1, 62.9, 64.3, 65.6, 67.3, 106.5, 130.0, 145.0, 175.0, 185.0]; % 半径 r (米)

ln_r = log(r);

ln_et2_rho = 1/5 * log((t.^2));

X = [ones(length(ln_et2_rho), 1), ln_et2_rho'];

coefficients = X \ ln_r';  A = 1/5;  C = exp(coefficients(1));

disp('拟合参数:');  (['A = ', num2str(A)]);  disp(['C = ', num2str(C)]);

f = fit(t', r', 'smoothingspline');

figure;plot(f, t, r);

title('时间与半径拟合曲线');

xlabel('时间 t (毫秒)');  ylabel('半径 r (米)');

legend('拟合曲线', '原始数据');

grid on;

end

运行及结果界面:

实验总结:

在这次实验中,我学会了使用最小二乘法拟合抛物线和曲线,并在MATLAB中实现了相关计算结果输出和绘图。并且掌握了不同拟合方法的应用。通过分析给定的数据,我可以手工计算正确结果和编写程序,我还掌握了如何建立和求解正规方程。在实验过程中,我训练了数据处理和 MATLAB 编程的技能。发现了一些在处理矩阵运算和方程求解时的常见问题。

今后学习中,我需要进一步提高对算法原理的理解和 MATLAB 编程的熟练程度,特别是在处理更复杂数据和模型拟合方面。我也会继续探索更多的拟合算法,以便更好地处理不同类型的数据和问题。这次实验为我打下了良好的基础,我会在今后的学习中不断提升自己。

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

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

相关文章

系统思考:心智模式与业务创新

在最近的项目交付讨论中,我频繁听到一个词:“缺合适的人”。这让我陷入了深思:我们是否还在传统的生产力概念?纳瓦尔提出的三种杠杆:劳动力、资本、零边际成本产品。在当今这个信息化、全球化的商业世界中,…

python分步合并处理excel数据

文章目录 概要整体架构流程技术名词解释技术细节小结概要 客户需求 1. 背景与目标 用户需要将三个包含农业实验数据的Excel表格(AK、AN、AP)合并为一个结构化数据集,用于后续分析。每个表格包含相同类型的字段(如对照组与PSB处理组的样本数、均值、标准差),但需通过字…

Python爬虫实战:研究PyQuery库相关技术

1. 引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的数据量呈爆炸式增长。如何高效地从海量的网页数据中提取有价值的信息,成为当前信息技术领域的一个重要研究方向。网络爬虫作为一种自动获取网页内容的程序,能够按照一定的规则,自动地抓取万维网信息,在搜索引擎…

深度学习---注意力机制(Attention Mechanism)

一、核心概念与发展背景 注意力机制是深度学习中模拟人类注意力选择能力的关键技术,旨在从海量信息中筛选关键特征,解决长序列信息处理中的瓶颈问题(如RNN的梯度消失)。其核心思想是:对输入序列的不同部分分配不同权重…

Jenkins分配对应项目权限与用户管理

在日常开发过程中经常会出现用户和权限管理问题,没有配置trigger时,通常需要我们手动构建,但此时前端和后端的朋友没有build权限,导致每次dev环境测试都需要麻烦我们手动去构建,消息传达不及时则会降低开发效率。 现有…

XCTF-web-file_include

解析 <?php highlight_file(__FILE__); // 高亮显示当前PHP文件源代码 include("./check.php"); // 包含检查文件&#xff08;可能包含安全过滤逻辑&#xff09;if(isset($_GET[filename])) { // 检查是否传入filename参数$filename $_GET[f…

matlab全息技术中的菲涅尔仿真成像

matlab全息技术中的菲涅尔仿真成像程序。 傅里叶法&#xff08;重建距离得大&#xff09;/Fresnel.m , 545 傅里叶法&#xff08;重建距离得大&#xff09;/FresnelB.m , 548 傅里叶法&#xff08;重建距离得大&#xff09;/Fresnel_solution.m , 1643 傅里叶法&#xff08;重…

CS144 - LAB0

CS144 - Lab 0 telnet 发送请求 如图&#xff0c;很简单&#xff0c;但是注意输入时间太久会超时 发邮箱 首先我们需要用命令行去发邮箱&#xff0c;这里我用企业微信邮箱给自己的 qq 邮箱发送~ 整个命令如下&#xff01; 对于其中的参数&#xff0c;其实从英文就可以看出来…

kafka SASL/PLAIN 认证及 ACL 权限控制

一、Zookeeper 配置 SASL/PLAIN 认证&#xff08;每个zookeeper节点都要做&#xff09; 1.1 在 zookeeper 的 conf 目录下&#xff0c;创建 zk_server_jaas.conf 文件&#xff0c;内容如下 Server {org.apache.kafka.common.security.plain.PlainLoginModule requiredusernam…

20250528-C#知识:函数简介及函数重载

C#知识&#xff1a;函数简介及函数重载 本文主要介绍函数参数和函数重载相关的知识点 1、函数 函数一般写在类中 一般函数调用 static int Add(int num, int value){num value;return num;}//一般函数调用&#xff0c;发生值类型参数的复制int num 1;Add(num, 1); //调用…

Vue内置指令与自定义指令

一、前言 在 Vue 开发中&#xff0c;指令&#xff08;Directives&#xff09; 是一种非常强大的特性&#xff0c;它允许我们以声明式的方式操作 DOM。Vue 提供了一些常用的内置指令&#xff0c;如 v-if、v-show、v-bind、v-on 等&#xff0c;同时也支持开发者根据需求创建自己…

华为AP6050DN无线接入点瘦模式转胖模式

引言 华为AP6050DN是一款企业级商用的无线接入点。由于产品定位原因,其默认工作在瘦模式下,即须经AC统一控制和管理,是不能直接充当普通的无线路由器来使用的。 而本文的目的,就是让其能脱离AC的统一控制和管理,当作普通无线路由器来使用。 硬件准备 华为AP6050DN无线接…

程序员出海之英语-使用手册

为什么现在实时翻译工具这么牛逼了&#xff0c;AI转译这么准确了&#xff0c;我还在这里跟老古董一样吭哧吭哧学英语呢&#xff1f; 这是因为我们始终是和人打交道&#xff0c;不仅仅是为了考试&#xff0c;看懂官方文章&#xff0c;听懂官方视频。这里为什么说官方&#xff0c…

Java 事务管理:在分布式系统中实现可靠的数据一致性

Java 事务管理&#xff1a;在分布式系统中实现可靠的数据一致性 在当今的软件开发领域&#xff0c;分布式系统逐渐成为主流架构。然而&#xff0c;这也给事务管理带来了巨大的挑战。本文将深入探讨 Java 事务管理在分布式系统中的关键要点&#xff0c;并通过详细代码实例展示如…

微信小程序关于截图、录屏拦截

1.安卓 安卓&#xff1a; 在需要禁止的页面添加 onShow() {if (wx.setVisualEffectOnCapture) {wx.setVisualEffectOnCapture({visualEffect: hidden,complete: function(res) {}})}},// 页面隐藏和销毁时需要释放防截屏录屏设置onHide() {if (wx.setVisualEffectOnCapture) {w…

使用 PySpark 从 Kafka 读取数据流并处理为表

使用 PySpark 从 Kafka 读取数据流并处理为表 下面是一个完整的指南&#xff0c;展示如何通过 PySpark 从 Kafka 消费数据流&#xff0c;并将其处理为可以执行 SQL 查询的表。 1. 环境准备 确保已安装: Apache Spark (包含Spark SQL和Spark Streaming)KafkaPySpark对应的Ka…

第十天的尝试

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 哈哈&#xff0c;十天缺了两天&#xff0c;我写的文章现在质量不高&#xff0c;所以我可能考虑&#xff0c;应该一星期或者三四天出点高质量的文章&#xff0c;同时很开心大家能够学到知识&a…

mediapipe标注视频姿态关键点(基础版加进阶版)

前言 手语视频流的识别有两种大的分类&#xff0c;一种是直接将视频输入进网络&#xff0c;一种是识别了关键点之后再进入网络。所以这篇文章我就要来讲讲如何用mediapipe对手语视频进行关键点标注。 代码 需要直接使用代码的&#xff0c;我就放这里了。环境自己配置一下吧&…

Redis数据迁移方案及持久化机制详解

#作者&#xff1a;任少近 文章目录 前言Redis的持久化机制RDBAOF Redis save和bgsave的区别redis数据迁移redis单机-单机数据迁移redis 主从-主从数据迁移redis 单机-cluster数据迁移redis cluster –redis cluster数据迁移 前言 Redis数据迁移是常见需求&#xff0c;主要包括…

图论回溯

图论 200.岛屿数量DFS 给你一个由 ‘1’&#xff08;陆地&#xff09;和 ‘0’&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外&#xff…