将某城市的布局用一个 101×101 的矩阵进行网格化表示(每个网格单位长度为 1 千米)。与城市布局网格对应的具体污染物数值由所附 Excel 文件 C01.xlsx 给出(数值表示多少个浓度单位)。一共有3个污染源。用高斯函数写出python代码来确定3个污染源。
时间: 2024-03-03 18:50:38 浏览: 27
以下是使用高斯函数确定三个污染源位置坐标的 Python 代码:
```python
import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
# 读取Excel数据
data = pd.read_excel('C01.xlsx', header=None)
# 定义高斯函数
def gauss(x, y, a, x0, y0, sigma):
return a * np.exp(-((x - x0)**2 + (y - y0)**2) / (2 * sigma**2))
# 初始化变量
x = np.arange(0, 101)
y = np.arange(0, 101)
X, Y = np.meshgrid(x, y)
Z = np.array(data)
# 拟合高斯函数
popt_list = []
for i in range(3):
p0 = [np.max(Z), np.argmax(Z) % 101, np.argmax(Z) // 101, 10]
popt, pcov = curve_fit(gauss, (X, Y), Z.ravel(), p0)
popt_list.append(popt)
# 输出污染源位置坐标
for i, popt in enumerate(popt_list):
print('第{}个污染源位置坐标为:({:.2f}, {:.2f})'.format(i+1, popt[1], popt[2]))
```
这段代码与之前的代码类似,只不过我们在定义高斯函数时增加了两个参数 x 和 y,用于表示高斯函数在二维坐标系上的位置。接着,我们使用循环语句拟合出了三个污染源的位置坐标,将其存储在一个列表 popt_list 中,并输出了三个污染源的位置坐标。需要注意的是,在拟合高斯函数时,我们需要提供一个初始参数值 p0,其中第一个参数值为矩阵 Z 中的最大值,第二个参数值和第三个参数值分别为最大值所在的行和列,第四个参数值为高斯函数的标准差。
相关推荐
![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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)