Мой код Python решает систему линейных уравнений с использованием функции LUsolve()
.Это довольно быстро.Но проблема в том, что печать решения занимает очень много времени даже для небольшого числа переменных.Это код, который я написал.
from sympy import *
from tkinter.filedialog import asksaveasfilename
import tkinter as tk
from tkinter import *
from tkinter import simpledialog
root = tk.Tk()
root.withdraw()
file_name = asksaveasfilename()
root.withdraw()
niso=tk.simpledialog.askinteger("Value of Niso","Value of Niso:")
MM = Matrix( niso, 1, lambda i,j:var('MM_%s' % (i+1) ) )
MA = Matrix( niso, 1, lambda i,j:var('m_%s%s' % ('A', chr(66+i)) ) )
MX = Matrix( niso, 1, lambda i,j:var('m_%s%s' % (chr(66+i), 'A')) )
RB = Matrix( niso-1, 1, lambda i,j:var('R_%s%s' % ('A'+chr(66+i),i+2)) )
R = Matrix( niso, niso-1, lambda i,j:var('R_%s%d' % (chr(65+i) , j+2 )) )
K = Matrix( niso-1, 1, lambda i,j:var('K_%d' % (i+2) ) )
A = Matrix(niso-1,niso-1, lambda i,j:var('A_%d' % i))
b = Matrix(niso-1,1, lambda i,j:var('A_%d' % i))
for i in range(0,niso-1):
b[i,0]=MM[0,0]*(1/(MA[i,0]*(RB[i,0]-R[0,i]))-1/(MX[i,0]*(-RB[i,0]+R[i+1,i])) )
for j in range(0,niso-1):
A[i,j]=MM[j+1,0]*(R[0,j]/(MA[i,0]*(RB[i,0]-R[0,i]))-R[i+1,j]/(MX[i,0]*(-RB[i,0]+R[i+1,i])) )
X = ( A.LUsolve(b) )
with open(file_name, 'w') as logFile:
for i in range(0,niso-1):
print(K[i,0],'=',X[i],file=logFile)
Основная проблема состоит в том, что элементы вектора X
состоят из множества sympy
символов и print()
должен преобразовать их в строки.
Есть ли более быстрый способ напечатать мое решение?