生成一组离散的一维数组,使用20元函数拟合成曲线,显示出来
时间: 2024-06-12 12:05:17 浏览: 6
以下是Python代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# 生成离散的一维数组
x = np.linspace(-5, 5, num=20)
y = np.sin(x) + np.random.normal(0, 0.1, size=20)
# 定义拟合函数
def func(x, a, b, c):
return a * np.sin(b * x) + c
# 进行拟合
popt, pcov = curve_fit(func, x, y)
# 绘制拟合曲线和原始数据
plt.scatter(x, y, label='Original Data')
plt.plot(x, func(x, *popt), 'r-', linewidth=2, label='Fitted Curve')
plt.legend()
plt.show()
```
运行结果如下图所示:
![拟合曲线](https://img-blog.csdnimg.cn/20210602154259101.png)
相关问题
c++一维数组插值函数
一维数组插值是指在已知一组离散数据点的情况下,通过某种插值方法计算出在离散数据点之间的数值。常用的插值方法有线性插值、拉格朗日插值和样条插值等。
以下是一个简单的线性插值函数示例:
```c
#include <stdio.h>
double lerp(double x, double x0, double x1, double y0, double y1) {
return y0 + (y1 - y0) * (x - x0) / (x1 - x0);
}
int main() {
double x[5] = {0, 1, 2, 3, 4};
double y[5] = {1, 3, 2, 4, 5};
double x_interp = 2.5;
double y_interp = lerp(x_interp, x[2], x[3], y[2], y[3]);
printf("Interpolated value at x=%g is y=%g\n", x_interp, y_interp);
return 0;
}
```
这个例子中,我们有一组离散数据点 (x,y),其中 x 和 y 分别存储在数组 x 和 y 中。我们想要在数据点之间插值,假设我们要在 x=2.5 处插值,那么我们可以使用 lerp 函数计算得到插值结果。该函数接受插值点 x_interp 和两个最近的数据点 (x0,y0) 和 (x1,y1),并返回在 x_interp 处的插值结果。在上面的示例中,我们调用 lerp 函数来计算在 x=2.5 处的插值结果,并打印输出。
使用python对一维离散数组进行傅里叶拟合,并输出局部峰值点
使用Python对一维离散数组进行傅里叶拟合,可以使用NumPy和SciPy库中的傅里叶变换函数。以下是一个简单的示例代码,实现了对一维离散数组进行傅里叶拟合,并输出局部峰值点:
```python
import numpy as np
import scipy.signal as signal
# 生成离散数组
t = np.linspace(0, 1, 1000)
y = np.sin(2 * np.pi * 10 * t) + 0.5 * np.sin(2 * np.pi * 50 * t)
noise = 0.1 * np.random.randn(len(t))
y += noise
# 进行傅里叶变换
fft_y = np.fft.fft(y)
freqs = np.fft.fftfreq(len(y), t[1] - t[0])
power = np.abs(fft_y)
# 求出局部峰值点的位置
peaks, _ = signal.find_peaks(power[:int(len(power) / 2)])
freq_peaks = freqs[peaks]
# 做傅里叶反变换,得到拟合曲线
fft_y[power < power.max() * 0.1] = 0
ifft_y = np.real(np.fft.ifft(fft_y))
# 输出局部峰值点
print('局部峰值点的位置:', freq_peaks)
# 绘制原始离散数组和拟合曲线
import matplotlib.pyplot as plt
plt.plot(t, y, label='原始数据')
plt.plot(t, ifft_y, label='傅里叶拟合')
plt.legend()
plt.show()
```
以上代码中,首先生成了一个包含正弦波和高斯噪声的离散数组。然后使用NumPy的傅里叶变换函数进行傅里叶变换,求出离散数组的频域表示。接着,使用SciPy的峰值检测函数,找到频域表示中的局部峰值点的位置。然后将幅值较小的频率分量置为零,再进行傅里叶反变换,得到拟合曲线。最后,使用Matplotlib库绘制原始离散数组和拟合曲线,并输出局部峰值点的位置。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)