我在理解PdfFixedDocument doc = new PdfFixedDocument();
// Default page is portrait letter
PdfPage page = doc.Pages.Add();
// Create a landscape letter page
page.Rotation = 90;
函数时遇到麻烦。我的拟合函数是幂律。但是我不知道plot命令中的第二个值应该是什么?首先,我们必须调用函数optimize.curve_fit
,它将返回拟合线,但我们没有调用此函数。我想知道这个命令的工作方式。
ff(L,v)
答案 0 :(得分:0)
plot
命令可绘制x与y值,因此您必须根据定义的函数ff
计算相应的y值。由于pfit
是作为数组返回的,因此您在调用fit函数ff
时必须解压缩这些值。如果您知道自己有两个系数,则当然可以像v, k = pfit
那样提取它们,并使用ff(x, v, k)
计算y值。但是,如果稍后将拟合函数更改为L**(-1/v) * k + a
怎么办?然后,您将不得不重写代码。一种更简单的方法是将其留给Python,以使用*pfit
解包系数:
from scipy.optimize import curve_fit
from matplotlib import pyplot as plt
import numpy as np
#define some sample data
x = np.arange(1, 6)
y = np.asarray([100, 37, 18, 3, 1])
#fitting function with more than one parameter to fit
def ff(L, v, k):
return L**(-1/v) * k
pfit, perr = curve_fit(ff,x,y)
print(pfit)
#plot original data
plt.plot(x, y, "ro", label = "data")
#calculate y-values
y_fit = ff(x, *pfit)
#plot fitted curve
plt.plot(x, y_fit, "b", label = "fit")
plt.legend()
plt.show()
为克服这一点,我们可能想创建一个分辨率更高的x值范围,并绘制该值而不是原始的x值数据:
x_fit = np.linspace(np.min(x), np.max(x), 1000)
plt.plot(x_fit, ff(x_fit, *pfit), "b", label = "fit")
现在好多了: