如何解决具有多个输出 Python 的拟合函数
我有一个形式为 (y1,y2) = x*(a1,a2)+(b,b) 的函数,其中 x、y1 和 y2 是测量值,a1、a2 和 b 是我拟合的参数为了。我怎么能在python中做到这一点?我尝试像这样使用curve_fit:
x = np.array([1,2,3,4,5])
y = []
for i in range(len(x)):
y = y + [[1.2*x[i]+2,-2.2*x[i]+2]]
y = np.array(y)
def f(x,a,b,c):
return np.transpose(np.array([a*x+c,b*x+c]))
curve_fit(f,x,y)
但我收到此错误:
Result from function call is not a proper array of floats.
解决方法
您收到错误是因为您的函数必须将 yylex
的值作为 yyscan_t
而不是 y
返回。在您的代码中,float
变量是一个列表数组,而不是一个浮点数组。
您必须将 list
和 y
分开,并为每个 y1
调用 y2
。
使用以下代码,您可以独立获得 curve_fit
和 y
的 curve_fit
方程 (y1,y2) = x*(a1,a2)+(b,b ):
y1
为了确保参数 y2
对于两个 x = np.array([1,2,3,4,5])
y1 = []
for i in range(len(x)):
y1.append(1.2*x[i]+2)
y1 = np.array(y1)
y2 = []
for i in range(len(x)):
y2.append(-2.2*x[i]+2)
y2 = np.array(y2)
是相同的,您可以定义两个单独的函数,将第二个函数中的 b
替换为 y
from第一个:
b
输出:
curve_fit
注意:您可以运行脚本2次交换函数(先取第二个等式,然后取第一个),第一次看def f1(x,a,b):
return a*x+b
def f2(x,a):
return a*x+curve_fit(f1,x,y1)[0][1] # here replace b for curve_fit(f1,y1)[0][1]
的值是否与>>> print(curve_fit(f1,y1)) # results for y1 ([a1,b])
(array([1.2,2. ]),array([[ 1.31476816e-31,-3.94430449e-31],[-3.94430449e-31,1.44624498e-30]]))
>>> print(curve_fit(f2,y2)) # results for y2 ([a2])
(array([-2.2]),array([[5.37859713e-33]]))
相似你运行了脚本。如果两者相似,您可以计算平均值 (b2
),这将是您优化的 b1
。如果 (b1+b2)/2
的两个值不相似,则表示 R(实数)中没有 b
的值,或者 b
有多个满足两个方程的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。