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

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

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 plt

x = [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 plt

x = [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()

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

 这基本已经够我课设用了

  • 15
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桃成蹊2.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值