如何解决在图形上打印拟合详细信息并绘制多项式拟合
2部分问题:通过一堆拼凑在一起的谷歌搜索,我设法将Python中的代码粘合在一起以获取列表的日志并将其与原始列表相对应,并应用最合适的线性线(以下代码,综合数据)。
我该如何在图形本身上打印此线性拟合的详细信息(例如渐变,y截距,卡方)?
我将如何修改代码以对多项式拟合(例如x ^ 2行)执行相同的操作?
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from numpy import exp,loadtxt,pi,sqrt,random,linspace
from lmfit import Model
import glob,os
x=[2,3,5,7,11,13,17,19,23,29,31]
y=np.log10(x)
print(y)
plt.scatter(x,y,label="prime-logs",color="red",marker="1",s=50)
plt.xlabel('Primes')
plt.ylabel('Log10 Primes')
plt.title('Non-Log Plot of Log Prime v Prime')
plt.legend()
plt.plot(np.unique(x),np.poly1d(np.polyfit(x,1))(np.unique(x)))
plt.show()
解决方法
这是一个解决方案。此处仅显示卡方(作为平方和残差)。注意,np.polyfit
不存在梯度下降问题,因为该问题是最小二乘问题,可以使用SVD伪逆矩阵计算直接解决。
使用一种算法,您可以提取反演的每个步骤(使用梯度下降或任何其他优化程序),从而可以在同一图形上显示拟合的每个步骤。
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from numpy import exp,loadtxt,pi,sqrt,random,linspace
# from lmfit import Model
import glob,os
x = [2,3,5,7,11,13,17,19,23,29,31]
y = np.log10(x)
print(y)
plt.plot(x,y,"1",ms=8,label="prime-logs")
y1,r,*_ = np.polyfit(x,1,full=True)
f1 = np.poly1d(y1)
plt.plot(x,f1(x),label=f"linear ($\chi^2$ = {r[0]:0.2f})")
y2,2,full=True)
f2 = np.poly1d(y2)
plt.plot(x,f2(x),label=f"quadratic ($\chi^2$ = {r[0]:0.2f})")
plt.xlabel("Primes")
plt.ylabel("Log10 Primes")
plt.title("Non-Log Plot of Log Prime v Prime")
plt.legend()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。