# 矩阵合并
def matrix_merge():
"""
矩阵合并
"""
a = np.arange(16).reshape(4, 4)
b = np.floor(5 * np.random.random(size=(2, 4))) # shape = (2, 4)
c = np.ceil(6 * np.random.random(size=(4, 2)))
d = np.vstack([a, b]) # 上下合并矩阵
e = np.hstack([a, c]) # 左右合并矩阵
# 矩阵分割
def matrix_split():
"""
矩阵分割
"""
a = np.arange(16).reshape(4, 4)
b = np.vsplit(a, 2) # 横向分割
c = np.hsplit(a, 4) # 纵向分割
# 解方程组
def solve_func_group():
"""
解方程组
"""
a = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
x1 = np.linalg.inv(a) @ b
x2 = np.dot(np.linalg.inv(a), b)
x3 = np.linalg.solve(a, b)
a_det = np.linalg.det(a)
# 解方程组
def solve_func_group1():
x1, x2 = sp.symbols('x1, x2')
s = sp.solve([x1**2 + x2**2 - 1, x1 - x2], [x1, x2])
x = sp.symbols('x:2')
a = sp.solve([x[0]**2 + x[1]**2 - 1, x[0]-x[1]], x)
# 解多维线性方程组
def solve_multi_func_group():
"""
解多维线性方程组
"""
a = 4 * np.eye(1000) + np.eye(1000, k=1) + np.eye(1000, k=-1)
b = np.arange(1, 1001).reshape([1000, 1])
ret = np.dot(np.linalg.inv(a), b)
# 插值
def insert_value_curve():
x0 = np.arange(1, 7)
y0 = np.array([16, 18, 21, 17, 15, 12])
A = np.vander(x0) # 求范德蒙德矩阵
p = np.linalg.inv(A) @ y0 # 求插值多项式的系数
print('从高次幂到低次幂的系数为: ' + str(np.round(p, 4)))
yh = np.polyval(p, [1.5, 2.6]) # 计算函数值
print('预测值为: ' + str(np.round(yh, 4)))
plt.plot(x0, y0, 'o') # 画出已知数据点的散点
xt = np.linspace(1, 6, 100)
plt.plot(xt, np.polyval(p, xt)) # 画插值曲线
plt.show()
# 拉格朗日插值
def lagrange_insert_value():
x0 = np.arange(1, 7)
y0 = np.array([16, 18, 21, 17, 15, 12])
p = lagrange(x0, y0) # 求拉格朗日多项式的系数
print('从高次幂到低次幂的系数为: ' + str(np.round(p, 4)))
yh = np.polyval(p, [1.5, 2.6]) # 计算多项式的函数值
print('预测值为: ' + str(np.round(yh, 4)))
# 最小二乘法
def smallest_double_multi_method():
t = np.arange(8)
y = np.array([27, 26.8, 26.5, 26.3, 26.1, 25.7, 25.3, 24.8])
tb = t.mean()
yb = y.mean()
a1 = sum((t - tb) * (y - yb)) / sum((t - tb) ** 2)
b1 = yb - a1 * tb
print('拟合的多项式系数: ' + str([a1, b1]))
A = np.vstack([t, np.ones(len(t))]).T
p = np.linalg.pinv(A) @ y
print('拟合的多项式系数: ' + str(p))