多项式拟合一次函数
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from numpy import polyfit, poly1d
%matplotlib inline
x = np.linspace(-5, 5, 100) # 产生[-5,5]的100个等间隔的数组
y = 4 * x + 1.5 # y是关于x的一次函数
noise_y = y + np.random.randn(y.shape[-1]) * 2.5 # y添加噪声后的函数值。
print(y.shape[-1]) # 100个元素
运行结果:
100
p = plt.plot(x, noise_y, 'rx') # 画红色叉叉就是rx,画红色叉叉虚线图就是rx--
p = plt.plot(x, y, 'b:') # 画蓝色点图,"b" 表示蓝色,":"表示点图。
![d19c11580ab0b52a0505906213032d8f.png](https://i-blog.csdnimg.cn/blog_migrate/7664fa33bee2a683eab49def47711f28.png)
coeff = polyfit(x, noise_y, 1)
print(coeff)
运行结果:
[4.00355516 1.55927961]
p = plt.plot(x, noise_y, 'rx')
p = plt.plot(x, coeff[0] * x + coeff[1], 'k-') # 画黑色实线图,"k" 表示实线,"-"表示实线。
p = plt.plot(x, y, 'b--') # 这里可看出拟合出一阶函数与原函数重合了,课通过注释该语句看出。
![bbb621a7e0f44abcc68ecc3b167550b3.png](https://i-blog.csdnimg.cn/blog_migrate/213fecf2898a4c5282e767581f3e810f.png)
# 还可以用 poly1d 生成一个以传入的 coeff 为参数的多项式函数:
f = poly1d(coeff)
p = plt.plot(x, noise_y, 'rx') # 绘制红色叉叉散点图
p = plt.plot(x, f(x)) # 带入x点,画出f函数。
![092de96f5a2951974fcc574cdb36c0e1.png](https://i-blog.csdnimg.cn/blog_migrate/edc04d1d971abfd2f00b4ae257ec599c.png)
多项式拟合正弦函数
x = np.linspace(-np.pi,np.pi,100)
y = np.sin(x)
# 用一阶到九阶多项式拟合,类似泰勒展开:
y1 = poly1d(polyfit(x,y,1))
y3 = poly1d(polyfit(x,y,3))
y5 = poly1d(polyfit(x,y,5))
y7 = poly1d(polyfit(x,y,7))
y9 = poly1d(polyfit(x,y,9))
x = np.linspace(-3 * np.pi,3 * np.pi,100)
p = plt.plot(x, np.sin(x), 'k') # 黑色为原始的图形,
p = plt.plot(x, y1(x))
p = plt.plot(x, y3(x))
p = plt.plot(x, y5(x))
p &#