Python矩阵运算与多项式拟合绘图

29、已知范德蒙德矩阵可以在Python中使用vander命令来创建,Python的polyval命令可用于计算由系数向量定义的多项式。现有任务:给定向量y,求解线性方程组Va = y(其中V为范德蒙德矩阵)。设a的分量为ai,i = 0, …, 5。编写一个函数poly,该函数以a和z为输入,计算多项式。绘制该多项式,并在同一图中将点(xi, yi)绘制成小星号。使用向量x = (0.0, 0.5, 1.0, 1.5, 2.0, 2.5),y = (-2.0, 0.5, -2.0, 1.0, -0.5, 1.0)测试代码。请使用上述vander和polyval命令完成该任务。

可结合以下要求编写代码:给定向量 `y`,在 Python 中求解线性方程组 `Va = y`。设 `a` 的分量为 `aᵢ`,`i = 0, …, 5`。

编写一个函数 `poly`,该函数以 `a` 和 `z` 为输入,计算多项式:

$$
P(z) = a_0 + a_1 z + a_2 z^2 + a_3 z^3 + a_4 z^4 + a_5 z^5
$$

绘制该多项式,并在同一图中将点 `(xᵢ, yᵢ)` 绘制成小星号 `*`。

使用向量测试代码:

```python
x = [0.0, 0.5, 1.0, 1.5, 2.0, 2.5]
y = [-2.0, 0.5, -2.0, 1.0, -0.5, 1.0]

30、构造矩阵 B = (A 的转置乘以 A)的逆乘以 A 的转置。已知矩阵 A 为 2 行 2 列矩阵,示例矩阵可设为 [[1, 2], [3, 4]],请给出计算矩阵 B 的具体步骤及 Python 代码实现。

按照线性代数常规步骤,可先计算矩阵 $ A $ 的转置 $ A^T $,再计算 $ A^T $ 与 $ A $ 的乘积得到 $ A^T A $,接着求 $ A^T A $ 的逆 $ (A^T A)^{-1} $,最后将 $ (A^T A)^{-1} $ 与 $ A^T $ 相乘得到矩阵 $ B $。

在 Python 中可使用 NumPy 库完成,示例代码如下:

import numpy as np

# 假设 A 是一个已知矩阵
A = np.array([[1, 2], [3, 4]])

# 计算 A 的转置
A_T = A.T

# 计算 A^T A
ATA = np.dot(A_T, A)

# 计算 (A^T A) 的逆
ATA_inv = np.linalg.inv(ATA)

# 计算 B = (A^T A)^(-1) A^T
B = np.dot(ATA_inv, A_T)

print(B)

31、使用 Python 中的 numpy 的 polyval 函数绘制由系数向量 c 定义的多项式曲线,并在同一图中绘制点 (xi, yi)。

实现步骤如下:

  1. 导入必要的库,如 numpy matplotlib
  2. 定义 x y 向量;
  3. 得到矩阵 A B 和向量 c
  4. 使用 polyval 函数根据 c 计算多项式的值;
  5. 使用 matplotlib 绘制多项式和点 (xi, yi)

示例代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 定义 x 和 y 向量
x = np.array([0.0, 0.5, 1.0, 1.5, 2.0, 2.5])
y = np.array([-2.0, 0.5, -2.0, 1.0, -0.5, 1.0])

# 构建 Vandermonde 矩阵 V
V = np.vander(x, increasing=True)

# 删除 V 的第一列得到矩阵 A
A = V[:, 1:]

# 计算 B = (A^T A)^(-1) A^T
B = np.linalg.inv(A.T @ A) @ A.T

# 计算 c
c = B @ y

# 定义绘制范围
x_plot = np.linspace(min(x), max(x), 400)

# 使用 polyval 计算多项式的值
y_plot = np.polyval(c[::-1], x_plot)

# 绘制多项式和点 (xi, yi)
plt.plot(x_plot, y_plot, label='Polynomial defined by c')
plt.plot(x, y, 'r*', label='Points (xi, yi)')
plt.legend()
plt.show()

32、在数值线性代数中,具有特定性质的 m × m 矩阵 A 在进行 LU 分解时,被用作极端增长因子的示例。在 Python 中为不同的 m 设置该矩阵,使用命令 scipy.linalg.lu 计算其 LU 分解,并通过实验得出关于增

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值