最近根据PYTHON可以支持变量名可以动态的指定,结合PYTHON 的sympy符号计算库,编写了这个可以计算求解任何方程的模块函数,用法详示例,没有测试更多的方程组,随手编了两个三元二次方程组(三个未知量,三个方程,最高幂2),均得到了正确的解。
测试用主窗体的代码如下:
#文件模块名称:mathEx_Text.py
#用于测试数学计算模块mathEx.py的PYQT窗体
import os,sys #导入系统模块
import time
import math
import copy
import random
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5 import QtCore
from PyQt5.QtGui import QMovie
from PyQt5.QtCore import QByteArray
from mathEx import * #导入自定义的要测试的mathEx.py模块
##################################################################
#测试数学计算类的主窗体
class MyWidget(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('测试mathEx类:扩展数学计算库')
self.setGeometry(0, 0, 1600, 600)
self.statusbar = self.statusBar()
self.statusbar.showMessage('准备')
self.setStatusTip('准备...')
self.qimage = QImage('1.jpg') #底图
self.initUI()
def initUI(self):
self.btn_Test1=QPushButton('1测试代码1',self)
self.btn_Test1.setGeometry(1450,50,150,50)
self.btn_Test1.clicked.connect(self.test1)
self.btn_Test2=QPushButton('2测试代码',self)
self.btn_Test2.setGeometry(1450,150,150,50)
self.btn_Test2.clicked.connect(self.test2)
self.btn_Test3=QPushButton('3测试代码',self)
self.btn_Test3.setGeometry(1450,250,150,50)
self.btn_Test3.clicked.connect(self.test3)
self.Lab01=QLabel(self)
self.Lab01.setGeometry(50,50,200,200)
self.Lab01.setText('测试标签1')
#self.Lab01.raise_()
self.Lab02=QLabel(self)
self.Lab02.setGeometry(50,300,200,200)
self.Lab02.setText('测试标签2')
########################################################################################
def test1(self):
m=mathEx()
countxt='1+2*sin(sqrt(30*pi/180))'
value=m.countText(countxt)
print(f'计算公式的值{countxt}={value}')
def test2(self):
m=mathEx()
vars1='x,y,z' #此字符串中的变量名称数量及形式要出下面的方程中保持一致
lsteqs1=['x**2+y**2-z**2', #方程1:此方程中的变量名称要同vars相一致:本例用的股定律,勾3股4弦5,计划x=3,y=4,c=5看还有其也解没有
'x+y+z-12', #方程2:此方程中的变量名称要同vars相一致
'cos(atan(x/y))-4/5' #方程3:此方程中的变量名称要同vars相一致
#'方程n..........' #.方程n.......此方程中的变量名称要同vars相一致,没测试过最大支持的变更和方程数及计算用时,和是否存在BUG
]
vars2='AB,B,C' #此字符串中的变量名称数量及形式(可为多字符)要出下面的方程中保持一致
lsteqs2=['2*AB**2+3*B**2-15*AB-653', #方程1:此方程中的变量名称要同vars相一致
'5*AB**2+4*B**2-15*B-826.25', #方程2:此方程中的变量名称要同vars相一致
'2*AB + 3*B + C - 54' #方程3