· 使用def自己定义一个二次函数A(x) .借助random库,使用def定义一个函数noise(xr),为输入值x添加一个不 超过r的随机噪声 · 从scipy.optimize中寻找方法,拟合函
时间: 2024-12-08 14:22:47 浏览: 10
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
好的,首先我们来定义一个简单的二次函数 `A(x)` 和一个添加随机噪声的函数 `noise(x, r)`:
```python
import random
# 自己定义一个二次函数 A(x)
def quadratic_function(A=1, B=0, C=-1):
def calculate_A(x):
return A * x**2 + B * x + C
return calculate_A
# 使用random库定义添加随机噪声的函数 noise(x, r)
import numpy as np
from scipy import stats
def add_noise(x, r):
return x + stats.uniform(-r, r).rvs() # 使用均匀分布生成噪声
# 从scipy.optimize中选择拟合函数,这里使用最小二乘法(Leastsq)
from scipy.optimize import curve_fit
# 示例如何使用curve_fit拟合数据
def noisy_quadratic(x_data, y_data, noise_range):
def fitter(x, a, b, c):
return a * x**2 + b * x + c
params, _ = curve_fit(fitter, x_data, y_data, bounds=((-np.inf, -np.inf, -np.inf), (np.inf, np.inf, np.inf)))
# 添加噪声到拟合结果上
x_fit_with_noise = np.linspace(min(x_data) - noise_range, max(x_data) + noise_range, 100)
y_fit_with_noise = fitter(x_fit_with_noise, *params)
return params, x_fit_with_noise, y_fit_with_noise
# 使用例子
quadratic_func = quadratic_function()
x = np.linspace(-10, 10, 100)
y_clean = quadratic_func(x)
noisy_range = 2.0
x_noisy = x + add_noise(x, noisy_range)
y_noisy = quadratic_func(x_noisy) # 这里会因为添加了噪声而变得不完美
params, fit_x, fit_y = noisy_quadratic(x_noisy, y_noisy, noisy_range)
print("拟合参数:", params)
print("拟合后的曲线:", fit_x, fit_y)
```
在这个例子中,`quadratic_function` 定义了一个二次函数,`add_noise` 函数将噪声添加到输入值上,然后通过 `curve_fit` 使用最小二乘法拟合数据并处理噪声。
阅读全文