今天先分享一点利用计算机来求解线性方程组的解,大家也许会问,这与理财有什么关系,至于为什么,这当然是有用的,具体的且下一步解说,呵呵,先举个例,大家也可自行验证。
线性方程组python求解
2*x1-3*x2 +2*x4=8
X1+5*x2+2*x3+x4=2
3*X1-x2+x3-x4=7
4*X1+x2+2*x3+2*x4=12
注:上述x1,x2,x3,x4均为末知数
将上述线性方程组转换为一般形式A*X=b,A代表线性方程组的系数,b代表结果值。即
系数矩阵A为: [[ 2. -3. 0. 2.]
[ 1. 5. 2. 1.]
[ 3. -1. 1. -1.]
[ 4. 1. 2. 2.]]
向量b为: [ 8. 2. 7. 12.]
线性方程组的解为: [ 3.00000000e+00 7.01193489e-16 -1.00000000e+00 1.00000000e+00]
下方附上代码:
import numpy as np
import openpyxl
# 文件路径,这里假设文件在当前目录下,如果不在需修改为完整路径
file_path = 'D:\\data.xlsx'
try:
# 加载Excel工作簿
workbook = openpyxl.load_workbook(file_path)
# 获取活动的工作表(通常是第一个工作表)
sheet = workbook.active
# 用于存储系数矩阵A的数据
A_data = []
# 用于存储向量b的数据
b_data = []
# 遍历工作表中的每一行
for row in sheet.iter_rows(values_only=True):
row_data = [value for value in row if value is not None]
if len(row_data) < 2:
continue
A_data.append(row_data[:-1])
b_data.append(row_data[-1])
# 将数据转换为numpy数组
A = np.array(A_data, dtype=float)
b = np.array(b_data, dtype=float)
print("系数矩阵A为:", A)
print("向量b为:", b)
# 检查系数矩阵A的行数和列数关系
num_rows_A, num_cols_A = A.shape
if num_rows_A < num_cols_A:
print("系数矩阵A是欠定的,可能有无穷多解,将尝试求解")
elif num_rows_A > num_cols_A:
print("系数矩阵A是超定的,将使用最小二乘法求解")
x, residuals, rank, s = np.linalg.lstsq(A, b, rcond=None)
print("最小二乘法得到的解为:", x)
else:
try:
x = np.linalg.solve(A, b)
print("线性方程组的解为:", x)
except np.linalg.LinAlgError as e:
print("该线性方程组无解或有无穷多解:", e)
except FileNotFoundError:
print(f"文件 {file_path} 未找到,请检查文件路径")
except Exception as e:
print("出现其他未预期的错误:", e)