繁体   English   中英

三个未知数的曲线拟合 Python

[英]Curve fitting with three unknowns Python

我有一个数据集,从其中我可以获得指数 function f( x f(x) = a*np.exp(-b*(xc)) ,在 Python 中定义如下:

def func(x, a, b, c): 
    return a*np.exp(-b*(x-c))

f = func(x, a, b, c)

a = 1.6
b = 0.02

a , b , c在这种情况下都是已知的。

然而,在代数解之后,我需要将这个 function 划分为三个不同的成员,我需要获得这个 function 的解:

g(x) = f1*a1*np.exp(-b1*(xc)) + f2*a2*np.exp(-b2*(xc)) + f3*a3*np.exp(-b3*(xc))

a1a2a3f1f2f3c都是已知的,我需要做的是以这种方式将g(x)拟合到f(x)以获得b1b2b3 ,使用 curve_fit 或任何类型足够适合这类问题。

f1f2f3代表分数,它们的和等于 1。

我的问题是:如何定义g(x) function 以获得b1b2b3的解决方案?

为了清晰和测试目的,我还附加了可能的值来解决这个问题,但请注意f1f2f3a1a2a3应该是输入的一部分,因为它们从一个点变为另一个点。 我有一个数组,但正在简化计算以明确要获取的内容:

x = np.arange(300., 701., 5.)

f1=0.3
f2=0.5
f3=0.2

c = 350.

a1=1.82
a2=7.32
a3=1.52

从 scipy 曲线拟合示例 ( https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html ) 开始,然后简单地将 b1、b2、b3 作为曲线拟合的未知输入外部定义的所有其他变量。 在这里,我假设你的意思是让 g(x) 适合 f(x)...

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

f1=0.3
f2=0.5
f3=0.2

c = 350.

a1=1.82
a2=7.32
a3=1.52

def func(x, a, b, c): 
    return a*np.exp(-b*(x-c))

def func2(x, b1, b2, b3):
    return f1*a1*np.exp(-b1*(x-c)) + f2*a2*np.exp(-b2*(x-c)) + f3*a3*np.exp(-b3*(x-c))

#You need to define some a and b values 
a = 1
b = 2
x = np.arange(300., 701., 5.)
popt, pcov = curve_fit(func2, x, func(x, a, b, c))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM