微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有多个输出 Python 的拟合函数

如何解决具有多个输出 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 变量是一个列表数组,而不是一个浮点数组。 您必须将 listy 分开,并为每个 y1 调用 y2

使用以下代码,您可以独立获得 curve_fitycurve_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 举报,一经查实,本站将立刻删除。