- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经很长时间没有编程了,而且从来都不擅长编程,但这是我正在努力解决的一项重要任务。我正在尝试拟合两组数据(x - 时间,y1 和 y2 - 应从文本文件读取的不同值列)。对于每个数据集(y1 和 y2),我都有一个适合它们的函数。在这两个函数中,我有几个需要安装的参数。对于某些时间值,“y”的数据不存在,因此任务是在“y”缺失时以某种方式对其进行编程,并在没有这些值的情况下拟合数据。参数应该适合两个函数,因此应该同时拟合。这就是我无法解决的问题。
要在我的例子中定义函数,需要使用拉普拉斯逆变换,所以我使用了并且没有任何问题。
import numpy as np
import pylab as plt
from scipy.optimize import leastsq
from cmath import *
# Here is the Laplace functions
def Fp(s, td, m0, kon, koff):
gs=s+kon-kon*koff/(s+koff)
sr=np.sqrt(gs*td)
return (m0/(s*s))*sr/sinh(sr)
def Fd(s, td, m0, kon, koff):
gs=s+kon-kon*koff/(s+koff)
sr=np.sqrt(gs*td)
fu=koff/(koff+kon)
fs=fu+koff*(1-fu)/(s+koff)
return (m0/s)*fs*2*tanh(0.5*sr)/sr
# Define the trig functions cot(phi) and csc(phi)
def cot(phi):
return 1.0/tan(phi)
def csc(phi):
return 1.0/sin(phi)
# inverse Laplace transform for two functions which are going to be fitted next
def Qpt(t, td, m0, kon, koff):
shift = 0.1;
ans = 0.0;
N=30
h = 2*pi/N;
c1 = 0.5017
c2 = 0.6407
c3 = 0.6122
c4 = 0. + 0.2645j
for k in range(0,N):
theta = -pi + (k+1./2)*h;
z = shift + N/t*(c1*theta*cot(c2*theta) - c3 + c4*theta);
dz = N/t*(-c1*c2*theta*(csc(c2*theta)**2)+c1*cot(c2*theta)+c4);
ans += exp(z*t)*Fp(z, td, m0, kon, koff)*dz;
return ((h/(2j*pi))*ans).real
def Qdt(t,td, m0, kon, koff):
shift = 0.1;
ans = 0.0;
N=30
h = 2*pi/N;
c1 = 0.5017
c2 = 0.6407
c3 = 0.6122
c4 = 0. + 0.2645j
for k in range(0,N):
theta = -pi + (k+1./2)*h;
z = shift + N/t*(c1*theta*cot(c2*theta) - c3 + c4*theta);
dz = N/t*(-c1*c2*theta*(csc(c2*theta)**2)+c1*cot(c2*theta)+c4);
ans += exp(z*t)*Fd(z, td, m0, kon, koff)*dz;
return ((h/(2j*pi))*ans).real
#now we have Qp and Qd as theoretical functions
我编译了它并询问程序几个值,Qp 和 Qd 定义正确。关于上面部分的唯一问题:是否有可能以某种方式同时定义两个函数而不进行两次变换?
然后我添加了同时拟合此功能的部分,它给了我一个错误:
TypeError: only length-1 arrays can be converted to Python scalars
所以这是我的合适部分:
# FITTING PART
def residuals(pars, t, qd, qp):
td = np.array(pars[0])
m0 = np.array(pars[1])
kon = np.array(pars[2])
koff = np.array(pars[3])
diff1 = Qdt(t,td, m0, kon, koff) - qd
diff2 = Qpt(t,td, m0, kon, koff) - qp
return np.concatenate((diff1[np.where(qd!=-1)], diff2[np.where(qp!=-1)]))
# for both functions with all the values
t = np.array([0.5, 2, 5, 10, 15, 20, 30, 40, 60, 90, 120, 180])
qd = np.array([0.145043746,0.273566338,0.437829373,0.637962531,-1,0.898107567,-1,1.186340492,1.359184345,-1,1.480552058,1.548143954])
qp = np.array([-1,-1,0.002701867,0.006485195,0.014034067,-1,0.06650739,-1,0.309055933,0.645945584,1.000811933,-1])
# initial values
par_init = np.array([1, 1, 1, 1])
best, cov, info, mesg, ier = leastsq(residuals, par_init, args=(t, qd, qp), full_output=True)
print(" best-fit parameters: ", best)
#for each function separately to plot them and fitted functions as well
xqd= [0.5, 2, 5, 10, 20, 40, 60, 120, 180]
xqp= [5, 10, 15, 30, 60, 90, 120]
yqd= [0.145043746, 0.273566338, 0.437829373, 0.637962531, 0.898107567, 1.186340492, 1.359184345, 1.480552058, 1.548143954]
yqp= [0.002701867, 0.006485195, 0.014034067, 0.06650739, 0.309055933, 0.645945584, 1.000811933]
tt=np.linspace(0,185,100)
qd_fit=Qdt(tt,best[0], best[1], best[2], best[3])
qp_fit=Qdp(tt,best[0], best[1], best[2], best[3])
plt.plot(xqd,yqd,'bD:',xqp,yqp,'r^:', tt,qd_fit,'b',tt,qp_fit,'r')
plt.grid()
plt.show()
我将不胜感激任何帮助和建议!我迫切需要纠正这个错误!
提前致谢!
最佳答案
要同时将多个模型函数拟合到不同的数据集,您需要让残差函数执行以下操作:
一个简单的残差可能如下所示:
import numpy as np
from scipy.optimize import leastsq
def residual_two_functions(pars, x, y1, y2):
off1 = pars[0]
slope1 = pars[1]
off2 = pars[2]
slope2 = pars[3]
diff1 = y1 - (off1 + slope1 * x)
diff2 = y2 - (off2 + slope2 * x)
return np.concatenate((diff1, diff2))
# create two tests data sets
NPTS = 201
x = np.linspace(0, 10, NPTS)
y1 = -0.7 + 1.7*x + np.random.normal(scale=0.01, size=NPTS)
y2 = 5.2 + 50.1*x + np.random.normal(scale=0.02, size=NPTS)
# initial values
par_init = np.array([0, 1, 10, 100])
best, cov, info, message, ier = leastsq(residual_two_functions,
par_init, args=(x, y1, y2),
full_output=True)
print(" Best-Fit Parameters: ", best)
关于python - python中使用leastsq同时拟合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24820715/
我正在使用 SciPy 的 LeastSq 将实验谱拟合到理论期望。当然存在与实验值相关的误差。我如何将这些输入到 LeastSq 或者我是否需要不同的例程?我在文档中找不到任何内容。 最佳答案 sc
我正在研究一个图像分析程序,我已经缩小了我的瓶颈,尝试多次将 2D 高斯拟合到一个小窗口 (20x20) 像素。 90% 的执行时间花在这段代码上。 我正在使用 scipy cookbook 中给出的
我想弄清楚我在这里不明白的是什么。 我正在关注 http://www.scipy.org/Cookbook/FittingData并试图拟合正弦波。真正的问题是卫星磁力计数据,它在旋转的航天器上产生了
我有一个数据表面,我正在使用 SciPy 的 leastsq 函数进行拟合。 我想在 leastsq 返回后对拟合质量进行一些估计。我原以为这会作为函数的返回值包含在内,但如果是这样,似乎没有明确记录
我正在尝试使函数适合我的数据。我有两个不同的轴,x 轴:高度,y 轴:体重。通过目视检查,我可以看到它或多或少给出了在权重 = 10 附近饱和的平方根函数的形状。这是我正在做的: from scipy
我想了解如何设置 python scipy 最小化问题。这是我从 Excel Solver 问题中获取的示例。解释该问题的最简单方法是尝试求解一个非常简单的电网: R1: 100 R2: 1000 R
有谁知道scipy.optimize.leastsq中具体实现了哪种优化算法? 最佳答案 根据 the documentation : “leastsq” is a wrapper around MI
我想用参数 (mu=1, sig=2, height=1) 和传递初始参数 x0 = (0.8, 0.8, 0.9)。 我想知道优化器如何知道参数的顺序。我本可以采用 (mu,height,sig)
基于 https://stackoverflow.com/a/10552563/8235309 ,我正在尝试并行执行 scipy.optimize.leastsq。 xx,yy,zz 是 3D 云点的
除了最后一行,一切正常。我的目标是通过卡方检验计算最佳拟合。 leastsq函数的应用有问题。z,d 和 d_err 是相同长度的数组,给定(实验数据)。 def df(z,omega_m,omega
SciPy 关于 LeastSq 的文档是 here .它指出 ier 是 An integer flag. If it is equal to 1, 2, 3 or 4, the solution
我正在尝试让我的雅可比行列式与 SciPy 的优化库的 leastsq 函数一起工作。 我有以下代码: #!/usr/bin/python import scipy import numpy from
我想将洛伦兹峰拟合到一组数据 x 和 y,数据很好。 OriginLab 等其他程序非常适合它,但我想使用 python 自动进行拟合,所以我有以下基于 http://mesa.ac.nz/?page
如何在 python 中计算最小二乘拟合 (scipy.optimize.leastsq) 的置信区间? 最佳答案 我会使用自举方法。 看这里:http://phe.rockefeller.edu/L
我正在 scipy/numpy 中寻找一个优化例程,它可以解决非线性最小二乘类型问题(例如,将参数函数拟合到大型数据集),但包括边界和约束(例如,最小值和最大值)待优化参数)。目前我正在使用 mpfi
我有两个函数和一组数据。这两个函数具有相同的 x 数据和相同的参数。我想通过最适合我的数据的最小二乘法获得参数。 参数为:ex,ey,ez。 X数据为:RA,DE(比如3000点) Y数据为:dRA,
我正在使用 optimize.leastsq 来拟合数据。我想将拟合参数限制在一定范围内。使用 optimize.leastsq 时是否可以定义边界?边界在 optimize.fmin_slsqp 中
自从我参加了 Python 讲座后,我想用它来拟合我的数据。虽然我现在已经尝试了一段时间,但我仍然不知道为什么这不起作用。 我想做什么 从子文件夹(此处称为“测试”)中取出一个又一个数据文件,稍微转换
我可以从 scipy.optimize.leastsq 模块获取 RMSE 的值吗? 最佳答案 这是一个使用 leastsq 的小例子: import numpy as np import scipy
我试图解决一个小玩具问题 import numpy as np import scipy.optimize as opt def f(a): return np.array([a+.2,a-.
我是一名优秀的程序员,十分优秀!