Python求解多个多元一次方程组(完整可运行版本代码)_python求解多元方程组-程序员宅基地

技术标签: python  数据分析  

问题描述: 

三个未知量构成一个方程式,该CSV文件中一共有N行数据有关[x, y, z]的系数,求解三个未知量[x, y, z]的值。


前言

三个未知量[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()

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Han_torch/article/details/121562902

智能推荐

小米商城项目总结_小米商城项目总结心得-程序员宅基地

文章浏览阅读7.2k次。脚本中判断是否相等不能用equals,没有这个方法,只能用== 数据库工具类,只需要加载一次就够了,所以我们采用静态代码块来初始化该方法,作为工具类使用 public static QueryRunner qr = null;//因为是在不同包下的,所以要用public才可以调用 Ajax往Servlet发送数据的时候Servlet必须response一个数据,不然会报parsee..._小米商城项目总结心得

Windows Phone App测试良好但提交后失败的可能性-程序员宅基地

文章浏览阅读1k次。调用了诸如ScheduledActionService.LaunchForTest 之类只有在测试环境才能用的API。在提交后可能会闪退。写入 InstalledLocation 文件夹。安装文件夹在测试环境是可读写的,但是提交后就只读不可写了,而只能写入独立存储。把ProductId Hard Code了。Product Id 在提交后会变化。但是再次提交后不会变化,如果非要省事Hard Cod

Matlab中double,im2double,mat2gray区别-程序员宅基地

文章浏览阅读459次。转载:http://blog.sina.com.cn/s/blog_6c41e2f30101559d.htm ****************假设某图像数据A(uint8格式)**********************A = 235 200 89 20>> double(A) %返回与原矩阵数值相同但类型为double的矩阵...

ROSBug:Usage: rosrun [--prefix cmd] [--debug] PACKAGE EXECUTABLE [ARGS] rosrun will locate PACKAGE-程序员宅基地

文章浏览阅读1.2w次,点赞20次,收藏28次。输入~$ rosrun turtlesim错误Usage: rosrun [--prefix cmd] [--debug] PACKAGE EXECUTABLE [ARGS] rosrun will locate PACKAGE and try to find an executable named EXECUTABLE in the PACKAGE tree. If it finds it, it will run it with ARGS.解决方法在输入~$ rosrun t_usage: rosrun [--prefix cmd] [--debug] package executable [args] rosrun will

周期方波信号的级数分解_方波信号分解-程序员宅基地

文章浏览阅读1.2w次,点赞9次,收藏54次。根据傅里叶级数的定义我们知道:对于任意一个周期为的周期信号,都可以求出它在三角函数集中各函数中的分量,从而可将在区间内表示为三角函数集中各函数的加权和。即:其中:借助Matlab编写M文件,以方波信号为例,选取不同的级数项数进行合成,观察与原方波的逼近情况。源码如下:%该m文件用于绘制方波信号及其傅立叶级数谐波叠加clc;clear;close all;syms x; %定义符号变量x,用..._方波信号分解

docker kkfile-程序员宅基地

文章浏览阅读110次。映射了file文件夹和application的配置文件。kkfile 文件预览的docker命令。_docker kkfile

随便推点

To install them, you can run: npm install --save core-js/modules/es.array.push.js-程序员宅基地

文章浏览阅读5k次,点赞5次,收藏8次。To install them, you can run: npm install --save core-js/modules/es.array.push.js core-js/modules/es.error.cause.js core-js/modules/es.object.proto.js core-js/modules/es.re

wpf 界面切换-程序员宅基地

文章浏览阅读1.3w次,点赞3次,收藏30次。界面切换和窗口跳转是所有桌面程序都需要的。 wpf里面也有很多方法来做到界面切换,简单常用的有TabControl和UserControl。TabControl优点是简单,继续拖控件。 缺点就是全部代码会堆到一起。代码<TabControl HorizontalAlignment="Left" Height="200" Margin="10,10,0,0" Vert...

win10 vmware 磁盘映射 位置不可用_vmware映射虚拟磁盘 不可用-程序员宅基地

文章浏览阅读1.9w次,点赞6次,收藏22次。原文链接:https://www.itsk.com/thread-395102-1-1.html出现Z:\不可用。如果该位置位于这台电脑上,请确保设备或驱动器已连接,或者光盘已插入,然后重试。如果该位置位于网络上,请确保你已连接到网络或Internet,然后重试。如果仍然找不到该位置,则它可能已移动或删除。解决办法:主要是因为新版WIN10的资源管理不是以管理员身份运行的,这时候只需要打开任务管理器,结束Windows资源管理器的进程,再点左上角文件,运行新任务,打开C:\Windows\exp._vmware映射虚拟磁盘 不可用

闲鱼亿级商品结构化背后的思考和演进-程序员宅基地

文章浏览阅读1.5k次,点赞5次,收藏5次。背景闲鱼是一个典型的C2C场景的闲置交易平台,每个在闲鱼的用户都能享受到自由交易的乐趣,只要简单的输入商品名,商品价格,库存等信息就能完成一个商品的发布。充分的自由是闲鱼..._闲鱼服务端架构演进的心得

VirtualBox使用大全_virtualbox 下的vi-程序员宅基地

文章浏览阅读543次。=================复制虚拟机网卡问题=============== 每次复制的虚拟机的时候如果不选择复制的虚拟机网卡地址跟源的一样,这里点击上就会重新分配网卡mac地址。 重启后的虚拟机的网卡并不能用,这里需要设置。 这里是重新获得的mac地址, vi /etc/sysconfig/network-scripts/ifcfg-eth0将网卡的mac地址手动改成修改后的,_virtualbox 下的vi

国产化复旦微电子 FMQL45T900 FPGA开发板( 替代Xilinx ZYNQ ARM+FPGA 7045开发板)-程序员宅基地

文章浏览阅读2.5w次,点赞10次,收藏97次。-FM4550国产化开发板功能接口-- 系统框图-01- 产品参数-1.主要参数系统1: FPGA型号:FMQL45T900 PS内核:四核ARM Cortex-A7,主频800MHz PS端内存:1GB DDR3,数据速率1066Mbps,32bit PL端内存:1GB DDR3,数据速率1600Mbps,32bit GTX收发器:16X 速度等级:对标进口-2 ..._fmql45t900

推荐文章

热门文章

相关标签