Python求解多个多元一次方程组(完整可运行版本代码) | 您所在的位置:网站首页 › python解方程组代码 › Python求解多个多元一次方程组(完整可运行版本代码) |
问题描述:
三个未知量构成一个方程式,该CSV文件中一共有N行数据有关[x, y, z]的系数,求解三个未知量[x, y, z]的值。 文章目录 前言一、工具包二、使用步骤 1.读入文件2.编写方程总结 前言三个未知量[x, y, z]之间的关系是:a*x + b*y + c*z = p。 像这样的式子,csv文件中一共有N行,我的需求是根据这些不同的系数和不同的结果p值,求出三个未知量的值。 一、工具包首先要使用到的工具主要是numpy和pandas,pandas也是基于numpy的一种工具,里面的DataFrame很适合用于打开和修改CSV文件。 二、使用步骤 1.读入文件代码如下: import numpy as np import pandas as pd from sympy import * df = pd.read_csv(r'C:/Users/hanhan/PycharmProjects/pythonProject/data.csv',encoding = 'gbk') 2.编写方程代码如下: #参数定义 x = [] y = [] z = [] for i in range(len(df)-3): a = np.array(df['系数1'].iloc[i:i+3]) b = np.array(df['系数2'].iloc[i:i+3]) c = np.array(df['系数3'].iloc[i:i+3]) """ a1*x + b1*y + c1*z = p1 a2*x + b2*y + c2*z = p2 a3*x + b3*y + c3*z = p3 """ #p = [p1, p2, p3] p = [1, 2, 3] m = np.array([[a[0], b[0], c[0]], [a[1], b[1], c[1]], [a[2], b[2], c[2]]]) n = np.array(p) #可替换为式子右边的常数 print(m) print(n) solution = np.linalg.solve(m, n) #solution format: np.array([x, y, z]) print('solution=', solution) x.append(solution[0]) y.append(solution[1]) z.append(solution[2]) ①首先,定义参数(也就是需要求的三个未知量) ②每次三行三行的取系数数据及常数项数据,每个三行数据构成方程组。a1*x + b1*y + c1*z = p1 a2*x + b2*y + c2*z = p2 a3*x + b3*y + c3*z = p3 ③用np.linalg.solve()函数来求解方程组,该函数是以矩阵形式给出线性方程的解,将每一个方程式的系数一组一组的写入m中,常数项写入n中。m = np.array([[a[0], b[0], c[0]], [a[1], b[1], c[1]], [a[2], b[2], c[2]]]) n = np.array(p) #可替换为式子右边的常数 ④每个方程组会得到一个解集,解集分别对应三个未知量[x, y, z]的解。 ⑤并依次存入到之前定义的参数空列表中,方便后面存入文件。 ⑥按列存入文件,并导出为csv。这里的每一列就是x的可行解,因为我的需求是比较大的项目,所以我是取的每一列的平均值作为我的最后解。可是如果只是一个方程组的话,输出的就是一组解集了。 ls = np.array([x, y, z]) df = pd.DataFrame(ls.transpose()) df.to_csv(r'C:/Users/hanhan/PycharmProjects/pythonProject/data_answer.csv', encoding='gbk')总结 下面是完整版代码: import numpy as np import pandas as pd import math from sympy import * #数据表格 df = pd.read_csv(r'C:/Users/hanhan/PycharmProjects/pythonProject/data.csv',encoding = 'gbk') #参数定义 x = [] y = [] z = [] for i in range(len(df)-3): a = np.array(df['系数1'].iloc[i:i+3]) b = np.array(df['系数2'].iloc[i:i+3]) c = np.array(df['系数3'].iloc[i:i+3]) """ a1*x + b1*y + c1*z = p1 a2*x + b2*y + c2*z = p2 a3*x + b3*y + c3*z = p3 """ #p = [p1, p2, p3] p = [1, 2, 3] m = np.array([[a[0], b[0], c[0]], [a[1], b[1], c[1]], [a[2], b[2], c[2]]]) n = np.array(p) #可替换为式子右边的常数 print(m) print(n) solution = np.linalg.solve(m, n) #solution format: np.array([x, y, z]) print('solution=', solution) x.append(solution[0]) y.append(solution[1]) z.append(solution[2]) ls = np.array([x, y, z]) df = pd.DataFrame(ls.transpose()) df.to_csv(r'C:/Users/hanhan/PycharmProjects/pythonProject/data_answer.csv', encoding='gbk')也可以提前画出求出解的图片看看效果: import matplotlib.pyplot as plt # 画图 fig = plt.figure() x1= [j for j in range(len(x))] ax1 = fig.add_subplot(3,2,1) ax1.scatter(x1, x) ax1.set_title('x') ax2 = fig.add_subplot(3,2,2) ax2.scatter(x1, y) ax2.set_title('y') ax3 = fig.add_subplot(3,2,3) ax3.scatter(x1, z) ax3.set_title('z') plt.show() |
CopyRight 2018-2019 实验室设备网 版权所有 |