用python如何实现求解微分线性方程?
Admin 2021-10-09 群英技术资讯 1134 次浏览
用python如何实现求解微分线性方程?python的功能还是比较强大的,这篇文章我们就来看看用Python编写稀疏线性方程组的求解方法,下文有实例代码供大家参考,感兴趣的朋友就继续往下看吧。
简单的方程如: AX=b
其中

python有很多功能库,这些库对于编程很有帮助,可以在pycharm的Project Interpreter导入库,例如numpy、os、scipy等比较基础的库,
import numpy as np
from scipy import linalg
import os
#输入矩阵维数
print("你好,这里是计算稀疏矩阵线性方程组的地方,非诚勿扰!")
dism_num = input("你的A矩阵维数是:")
dism_num = int(dism_num)
print("接下来请你依次输入矩阵的行向量(注意只能输入英文逗号,):")
A =[]
#X =[]
for i in range(1,dism_num+1):
a=input("第"+str(i)+"行向量是:")
alist = a.split(",")
alist = [int(alist[j]) for j in range(len(alist))]
A.append(alist)
print("你所输入的矩阵行向量是:")
print(A)
#记录输入的X矩阵
#输入向量b
print("输入b向量")
b = input("b向量是:")
b_list = b.split(",")
b_list = [int(b_list[j]) for j in range(len(b_list))]
print("你输入的b向量是:")
print(b_list)
#记录b向量
#询问是否计算单个答案(单元素)
ask = input("是否只需求解单个值:(是或否)")
while(True):
if ask == '是':
ask_a = 'T'
ask_num = input("请继续输入你所需要的答案序号:")
ask_num = int(ask_num)
if ask_num<=dism_num and ask_num>0:
print("OK,马上帮你计算")
break
else:
print("输入的值超出矩阵维数,请重新输入:")
if ask == '否':
ask_a = 'F'
break
#询问完成,只有当用户输入正确的序号才可以进行计算,否则重新询问
#开始计算x向量了
A = np.array(A)
b = np.array(b_list)
x = linalg.solve(A,b)
print("计算的结果的:")
if ask_a == 'F':
print(x)
if ask_a =='T':
print(x[ask_num-1])
#计算完x向量了
os.system("pause")
#用于py文件结束玩暂停显示结果
其基本流程如图:

运行结果如下:

补充:python 多线程稀疏矩阵乘法

import threading, time
import numpy as np
res = []
class MyThread(threading.Thread):
def __init__(self,i,j,m1,m2):
threading.Thread.__init__(self)
self.x, self.y = i,j
self.m1, self.m2 = m1, m2
def run(self):
global res, lock
if lock.acquire():
m1 = self.m1[self.m1[:,0]==self.x]
m2 = self.m2[self.m2[:,1]==self.y]
value = 0.
for item1 in m1:
for item2 in m2:
if item1[1] == item2[0]:
value += item1[2]*item2[2]
res.append([self.x,self.y,value])
lock.release()
if "__main__" == __name__:
m1 = [[2,2],[0,0,1],[0,1,2],[1,0,3],[1,1,4]]
m2 = [[2,3],[0,0,2],[0,2,1],[1,2,3],[1,1,4]]
s1, s2 = m1[0], m2[0]
assert s1[1]==s2[0], 'mismatch'
m1_value = np.array(m1[1:])
m2_value = np.array(m2[1:])
rows, cols = s1[0], s2[1]
res.append([rows, cols])
ThreadList = []
lock = threading.Lock()
for i in range(rows):
for j in range(cols):
t = MyThread(i,j,m1_value,m2_value)
ThreadList.append(t)
for t in ThreadList:
t.start()
for t in ThreadList:
t.join()
print (res)
以上就是关于用python如何实现求解微分线性方程的介绍了,有需要的朋友可以参考学习,希望对大家学习python有帮助,想要了解更多python的应用,大家可以继续浏览群英网络其他相关的文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Python常用的魔法方法有几种?用法是什么?新手学习Python,可能对于算数运算符的魔法方法和反运算相关的魔法方法不是很了解,对此,下面小编就给大家介绍一下Python常用的魔法方法,感兴趣的朋友就继续往下看吧。
大家好,本篇文章主要讲的是Python中的变量,参数和模块介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
Pandas是当前Python数据分析中最为重要的工具,其提供了功能强大且灵活多样的API,可以满足使用者在数据分析和处理中的多种选择和实现方式,下面这篇文章主要给大家介绍了关于Python Pandas聚合函数的相关资料,需要的朋友可以参考下
本篇将基于Python+Django结合Vue.js前端框架,为大家介绍如何基于这三者的技术栈来实现一个前端后离的Web开发项目。文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家介绍了Python提升运行速度的几个小技巧,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008