四时宝库

程序员的知识宝库

计算机来求解线性方程组的解 能解线性方程组的计算器

今天先分享一点利用计算机来求解线性方程组的解,大家也许会问,这与理财有什么关系,至于为什么,这当然是有用的,具体的且下一步解说,呵呵,先举个例,大家也可自行验证。

线性方程组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)

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接