用python如何实现求解微分线性方程?
Admin 2021-10-09 群英技术资讯 473 次浏览
用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如何匹配文本并在其上一行追加文本,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Pandas中option设置常用的选项有哪些?对于option设置常用的选项有最大展示行数、超出数据展示、最大列的宽度等等,那么具体怎样使用呢?下面我们具体的了解看看。
sys模块:全称system,指的是解释器。常用操作,用于接收系统操作系统调用解释器传入的参数
这篇文章主要为大家介绍了Python基础面向对象之继承与派生详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008