gpt4 book ai didi

python - 在 SciPy 中求解方程系统

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:26 26 4
gpt4 key购买 nike

我正在尝试通过三个给定点拟合指数曲线。但我只得到 fsolve 或实际 0 的非常错误的结果。我的学士论文需要这个,所以如果有人知道这个问题的更好解决方案,很高兴告诉我这个解决方案。

from numpy import *
from scipy.optimize import *

def myFunction(variables):
x1 = 1
y1 = 100
x2 = 5
y2 = 50
x3 = 10
y3 = 1
(a,k,b) = variables

y1 = a*exp(-x1*k)+b
y2 = a*exp(-x2*k)+b
y3 = a*exp(-x3*k)+b
#0 = a*k**2 * exp(-x1+k)
return ([a, k, b])

z = fsolve(myFunction,(1,0.1,5))
print(z)

这是我的问题,我需要通过这3个给定点来拟合一个e函数,另外forumla的二阶导数应该是0

编辑:2017 年 12 月 6 日在某种程度上,我现在有了一个多项式的改进,但并不像它应该的那样适合。第二个最大值不应该在那里.. :D

from numpy import *
from scipy.optimize import *
import matplotlib.pyplot as plt

def myFunction(z):
a = z[0]
b = z[1]
c = z[2]
d = z[3]
e = z[4]
f = z[5]
g = z[6]

x = [0, 10 ,15 ,20 ,50 ,100]
y = [10 ,90 ,100 ,90 ,50 ,10]
s = [0, 10, 1, 0, 0, 0]

F = empty((8))
F[0] = a*x[0]**6 + b*x[0]**5 + c*x[0]**4 + d*x[0]**3 + e*x[0]**2 + f*x[0]**1 + g - y[0]
F[1] = a*x[1]**6 + b*x[1]**5 + c*x[1]**4 + d*x[1]**3 + e*x[1]**2 + f*x[1]**1 + g - y[1]
F[2] = a*x[2]**6 + b*x[2]**5 + c*x[2]**4 + d*x[2]**3 + e*x[2]**2 + f*x[2]**1 + g - y[2]
F[3] = a*x[3]**6 + b*x[3]**5 + c*x[3]**4 + d*x[3]**3 + e*x[3]**2 + f*x[3]**1 + g - y[3]
F[4] = a*x[4]**6 + b*x[4]**5 + c*x[4]**4 + d*x[4]**3 + e*x[4]**2 + f*x[4]**1 + g - y[4]
F[5] = a*x[5]**6 + b*x[5]**5 + c*x[5]**4 + d*x[5]**3 + e*x[5]**2 + f*x[5]**1 + g - y[5]
F[6] = 6*a*x[3]**5 + 5*b*x[3]**4 + 4*c*x[3]**3 + 3*d*x[3]**2 + 2*e*x[3]**1 + f - s[3]
F[7] = 6*a*x[5]**5 + 5*b*x[5]**4 + 4*c*x[5]**3 + 3*d*x[5]**2 + 2*e*x[5]**1 + f - s[5]
return F

zGuess = array([1,1,1,1,1,1,1,1])
z = fsolve(myFunction,zGuess)
print(z)
x_axis = linspace(0,100,100)

y_axis = z[0]*x_axis**6 + z[1]*x_axis**5 + z[2]*x_axis**4 + z[3]*x_axis**3 + z[4]*x_axis**2 + z[5]*x_axis**1 + z[6]
plt.plot(x_axis, y_axis)
plt.show()

编辑 07.12.17整个信号应该看起来像第二个例子的数据。但困难在于第一个例子的部分。我的建议是使用 2 个多项式,但我的教授更喜欢多项式 x<20 和 e 函数 x>20。两者的重叠也应该是非常平滑的。

最佳答案

好吧 fsolve 求一个函数的根,并没有真正做非线性拟合。我必须承认我实际上并没有完全理解您想用您的代码实现的目标。如果您想进行非线性拟合(因为您在这里谈论的是指数函数),您可能需要在此处查看我的笔记本 https://github.com/michelucci/Regression-with-Python/blob/master/(Non)%20linear%20fit%20in%20Python.ipynb我希望能为您指明正确的方向。它首先包含线性回归部分,然后是非线性教程。

您可以检查 scipy.optimize 库中的 curve_fit() python 函数。这应该可以帮助您完成您想做的事情。

如果对您有帮助,请告诉我。

您可能还想查看此链接以更好地了解什么是非线性拟合 https://en.wikipedia.org/wiki/Nonlinear_regression

最好的,翁贝托

关于python - 在 SciPy 中求解方程系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47659126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com