3请分别用“标量循环+条件分支”法和“数组混合运算”法,在一1.5≤x≤1.5、-3≤y≤3的矩形域内计算以下二元函数。然后,比较两个计算结果中元素的最大相对误差,并使用surf命令绘制函数图形。(提示:数组运算时所需的矩形域内的自变量数组X、Y可使用meshgria生成。)
时间: 2024-09-17 16:08:21 浏览: 40
19 进阶MATLAB高级编程技巧.zip
在Python中,你可以使用NumPy库来进行高效的数组运算,同时结合条件分支和数组混合运算来计算二维函数。这里以计算`z = x**2 + y**2`为例:
1. **标量循环+条件分支法**:
```python
import numpy as np
# 定义矩形区域的边界
x_min, y_min, x_max, y_max = -3, -3, 1.5, 1.5
dx, dy = 0.01 # 步长
# 创建网格
x = np.arange(x_min, x_max + dx, dx)
y = np.arange(y_min, y_max + dy, dy)
# 初始化空数组存储值
Z_scalar = np.zeros_like(x)
for i in range(len(x)):
for j in range(len(y)):
if 1.5 >= x[i] >= -1.5 and -1.5 >= y[j] >= -3: # 条件分支
Z_scalar[i, j] = x[i]**2 + y[j]**2
```
2. **数组混合运算法**:
```python
Z_array = (x[None, :]**2 + y[:, None]**2) # broadcasting,直接对x和y进行广播运算
Z_array = Z_array[(x > -1.5) & (x < 1.5) & (y > -3) & (y < 3)] # 使用布尔索引来过滤非有效范围
```
比较最大相对误差:
```python
relative_error = abs(Z_array - Z_scalar) / np.max(np.abs(Z_array))
max_rel_error = relative_error.max()
```
使用`surfc`命令绘制函数图形:
```python
import matplotlib.pyplot as plt
plt.surf(x, y, Z_array)
plt.title('Surf plot of z = x^2 + y^2')
plt.xlabel('x')
plt.ylabel('y')
plt.colorbar(label='z')
plt.show()
```
阅读全文