散点曲线拟合常用思路(课设被逼无奈)

news/2024/11/25 1:27:05/

最近课设经常要插值,拟合什么的,觉得需要总结下使用的工具,我主要使用了三种方式来实现。

matlab

1.首选matlab工具箱

将我们准备好的数据事先给变量(这里应该叫什么不记得了,这里放下我的数据)

x = [760,2240,3480,3805,4720,5960,7200,9920]
y1 = [273,215,153.5,111.5,83,64,53,47.5]

 之后输入

cftool

之后就就进入工具箱界面了,拟合参数意思以及选用什么拟合这里不介绍了,可自由选择 

按照如下选择,进入平时绘图的页面 

就可以跟普通画图一样看图形了 

 2.使用拟合函数ployfit

polyfit函数是matlab中用于进行曲线拟合的一个函数。其数学基础是最小二乘法曲线拟合原理。曲线拟合:已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近给定的值。

这里我用的样例如下:

x=[760,2240,3480,3805,4720,5960,7200,9920];
y1=[273,215,153.5,111.5,83,64,53,47.5];
y2=[215,211.5,172.5,125,98,80,69,64.5];
y3=[153.5,172.5,182.5,154.5,113.5,87.5,71.5,64];
y4=[111.5,125,154.5,171.5,149,113.5,93,83];P1 = polyfit(x,y1,3); % 得到多项式,后面是多项式的次数
P2 = polyfit(x,y2,3); % 得到多项式
P3 = polyfit(x,y3,3); % 得到多项式
P4 = polyfit(x,y4,3); % 得到多项式
%绘图
xi = 0:100:10000;
yy1 = polyval(P1,xi);
yy2 = polyval(P2,xi);
yy3 = polyval(P3,xi);
yy4 = polyval(P4,xi);subplot(2,2,1)
plot(xi,yy1,x,y1,'r*');
subplot(2,2,2)
plot(xi,yy2,x,y2,'r*');
subplot(2,2,3)
plot(xi,yy3,x,y3,'r*');
subplot(2,2,4)
plot(xi,yy4,x,y4,'r*');hold on

图像结果如下 

 可以看出拟合效果也是不错的。

excle

首先还是先准备好需要的数据

 趋势线里面选择更多,进入丰富的设置页面

 最下面可以显示公式和R平方,R平方跟相关系数有关,这里不做推导,基本上只需要知道这个数值和1越接近拟合的效果越好就是了。 

python

python也是很好用的拟合工具了,拟合函数和matlab非常像

import numpy as np
import matplotlib.pyplot as pltx = [760,2240,3480,3805,4720,5960,7200,9920]
y = [273,215,153.5,111.5,83,64,53,47.5]plt.scatter(x,y,color="red")
plt.title("demo")
plt.xlabel("X")
plt.ylabel("Y")linear_model=np.polyfit(x,y,3) # 三次拟合
linear_model_fn=np.poly1d(linear_model)  # 得到拟合函数x_s=np.arange(0,10000) #生成点
plt.plot(x_s,linear_model_fn(x_s),color="green") #画拟合曲线plt.show()

拟合结果如下,这里我们可以直接鼠标移动,就能看到坐标,这个比matlab方便点。 

添加水平竖直的曲线,观看需要的数据

import numpy as np
import matplotlib.pyplot as pltx = [760,2240,3480,3805,4720,5960,7200,9920]
y = [273,215,153.5,111.5,83,64,53,47.5]plt.scatter(x,y,color="red")
plt.title("demo")
plt.xlabel("X")
plt.ylabel("Y")linear_model=np.polyfit(x,y,3) # 三次拟合
linear_model_fn=np.poly1d(linear_model)  # 得到拟合函数x_s=np.arange(0,10500,100) #生成点
plt.plot(x_s,linear_model_fn(x_s),color="green",linewidth=2) #画拟合曲线x1 = [375,875,2675,3975,5775,7075,8875,10125]
y1 = linear_model_fn(x1)
for x in x1:plt.plot([x,x],[0,linear_model_fn(x)],color="black",linewidth=1)
plt.plot([0,x1[-1]],[0,0],color="black",linewidth=1)
plt.plot([0,0],[0,linear_model_fn(0)],color="black",linewidth=1)plt.show()

只要对需要的点一一遍历即可 

 这基本已经够我课设用了


http://www.ppmy.cn/news/479979.html

相关文章

fio 磁盘I/O测试工具

前言 环境:centos7.9 fio-2.1.10.tar.gz fio是一款优秀的磁盘IO测试工具,在Linux中比较常用于测试磁盘IO,其下载地址:https://brick.kernel.dk/snaps/fio-2.1.10.tar.gz或者登录其官网:http://freshmeat.sourceforge.…

C51延时函数delay的编写

例如,要写一个延迟10ms的delay函数:(12M晶振) void delay_10ms() {unsigned char i,j,k;for(i5;i>0;i--){for(j4;j>0;j--){for(k248;j>0;j--);}} }原理:3层for循环,循环次数是 NUM 4X5X248 4960…

单片机:延时函数的理解

在实现单片机功能的时候,经常会用到延时函数,那么延时函数的原理也是非常有必要了解的。一般我们写延时函数的时候,默认的晶振频率fosc12MHZ,而机器周期T12/fosc1us。 这里我们来写一个10ms的延时函数: void delay_10…

(CODE:3 MEDIA_ERR_DECODE) Playback cannot continue. No available working or supported playlists

着急的盆友可以直接看下面我的解决办法(大家项目不同,报错原因也可能不同,但是可以试试这个思路),不着急的童鞋可以看看跟我的报错是否一样。 最近项目中才接触m3u8格式的文件,其实相当于是对视频文件记录地…

国产单路AHDRX芯片XS9950,替代TP9950

国产单路AHDRX芯片XS9950,单通道模拟复合视频解码芯片方案,替代TP9950 XS9950 是单通道模拟复合视频解码芯片方案,支持 HDcctv 高清协议和 CVBS 标清协议,最高支持单路 1080P30fps。XS9950将接收到的高清模拟复合视频信号经过模数…

99版人民币收藏价值分析

一、99版人民币剖析 1、票面 99100:票面棕红色;横黑竖蓝,两组数码,两种色彩(05100一组数码,前2位数棕黄色,后6位数黑色,双色组码递减式排列);票面无面额水印100;无面额拼音YUAN。 99…

SpringMVC 源码分析之 DispatcherServlet

SpringMVC 源码分析之 DispatcherServlet FrameworkServletserviceprocessRequestLocaleContext 和 RequestAttributesLocaleContextRequestAttributes 事件发布 DispatcherServletdoService代码分析 doDispatch参数含义具体的处理逻辑: processDispatchResult 引用…

Python基础语法第一章、认识Python

一、计算机基础概念 1.1什么是计算机? 很多老一辈的人, 管下面这个叫做计算机. 然鹅, 它只是 "计算器", 和计算机是有很大区别的. 现在我们所说的计算机, 不光能进行算术运算, 还能进行逻辑判断, 数据存储, 网络通信等等功能, 以至于可以自动的完成非常复杂的工作…