当前位置:网站首页>基于QT开发的线性代数初学者的矩阵计算器设计
基于QT开发的线性代数初学者的矩阵计算器设计
2022-06-26 20:33:00 【biyezuopinvip】
资源下载地址:https://download.csdn.net/download/sheziqiong/85788074
资源下载地址:https://download.csdn.net/download/sheziqiong/85788074
一、 题目
一个适用于线性代数初学者的矩阵计算器
开发软件
Visual Studio 2019,Qt5.14.2,Qt VS Tools (version 2.7.1)
课题要求
面向对象。
单元测试。
模型部分
验证
主要流程
开发流程及算法介绍
从 0.0 版本到 4.0 版本均为在 VS 上编写好矩阵计算器计算部分的算法。
版本为之前写过的两个独立程序(求逆、求有唯一解的线性方程组)
版本完成了以下部分的计算代码:
矩阵基本运算(加、减、乘),初等行变换(交换两行,将一行乘上某个实数,将一行的几倍加到另一行上)、求行列式,求逆矩阵,求解有唯一解的线性方程组。
补充说明:
求行列式的方法是将其化成上三角行列式
求逆矩阵用的方法是初等变换法(高斯消元法)
求解有唯一解的线性方程组是将常数列矩阵左乘上系数矩阵的逆
版本完成了以下部分的计算代码:
求矩阵的行最简形,求矩阵的秩,求矩阵的标准形补充说明:
求行最简形的算法:
首先找到每行第一个不为 0 的数的下标,按每行的下标给行进行排序(下标小的在上),并将每行乘上第一个不为 0 的数的倒数,目的是化成如下图所示的形式。
然后找到每列第一个不为 0 的数的下标定义为 start
从第 1 行开始到矩阵的最后一行第 m 行结束(跳过 start 行),用第 start 行通过初等行变换将第 j 行第 i 列(i 为对列的循环变量)的数化为 0。重复上述操作,就将第 1 列除 start 行之外的数全部化为 0。
而后对每一列重复上述操作,若某列全为 0 则跳过。
第二列:
第三列:
第…列最终结果:
求标准形:
把行最简形矩阵转置后再求一次行最简形,再转置回来
版本重载了分数的四则运算,并编写了约分函数
版本新增功能:支持求解有无穷解的线性方程组增广矩阵及求解结果如下图所示:
算法思路:首先求得增广矩阵的行最简形,如下图:
由图可知,x1,x2 为非自由元,x3,x4 为自由元,在矩阵类的成员变量中将非自由元的下标和自由元的下标存放在两个数组中。
特解为将所有自由元取 0,非自由元取 1 得到的解,即最后一列的数对应放置到解向量中的非自由元下标的位置
而通解的解向量为将所有自由元依次取 1,未取到则为 0,非自由元取 1 得到的解。即在行最简形中将取到的自由元那一列乘上-1(移到等式右边)在将那一列的数对应放置到解向量中的非自由元下标的位置,取到的自由元下标位置放置“1”。
从 5.0 版本到 6.0 版本均为矩阵计算器在 Qt 中的实现主界面简介
红色框使用 tool box 控件,用于选择运算功能,各个运算功能通过 pushButton 实现选择。
黄色框为矩阵的显示部分,使用 tabWidget 控件实现各个矩阵的切换,在 tabWidget 的每一页中使用 tableWidget 显示矩阵,最大可显示 10*10 的矩阵。
ans 为矩阵运算的结果(除了初等行变换运算将直接改变原矩阵)蓝色框为分数形式计算和小数形式计算的选择界面,使用 radioButton 控件进行选择,在进行任何输入和计算之前需先选择计算形式。
绿色框为行列式和秩的结果显示界面,使用 lineEdit 控件进行显示。
黑色框为线性方程组求解结果的输出界面,使用 textEdit 控件进行显示。
各个对话框界面采用 lineEdit 控件进行数据的输入和读取,各对话框界面分别如下:
类的继承关系:主程序:
基类:QMainWindow matrix_calculator
各对话框
基类:QDialog
qdialog1 qdialog2 qdialog3 power qdialog4 qdialog5 qdialog6 matrix_calculator 是 qdialog1, qdialog2, qdialog3,power, qdialog4, qdialog5, qdialog6 的父类
版本分数运算功能的实现:
分数运算功能的实现分为三个主要部分:
分数的输入与读取,分数运算,分数的输出
输入形式为: 13/22 或者含有负数的 -9/4 或者只有整数算法:查找输入的 QString 中有没有”/”,如果有,利用 indexOf 函数找到”/”的下标,再利用 left,right 函数和 toInt 函数读取分子和分母。
输出部分:
如果分子能被分母整除,约分函数会将分母化为 1,此时直接输出分子即可。
如果不能,构造 QString s=分子 +”/”+ 分母,输出 s。
版本报错功能通过 QMessagebox 中的 critical 函数实现,报错框界面如下:
样例测试
矩阵加法、减法、乘法样例:用于运算的矩阵:
运算结果:
加法:
减法:
乘法:
转置:(矩阵 1 的转置)次方:
(矩阵 1 的三次方)
求逆矩阵:
求行列式和秩:
求解线性方程组(唯一解):
无穷解:
上述矩阵的行最简形:
标准形:
初等行变换的演示见求行最简形算法的讲解。
开发中遇到的问题与收获
new 创建二维动态数组时,输出和析构函数会出问题,多次调试无果,考虑到实际应用时手算的矩阵阶数不会很大,故选定 10*10 矩阵为矩阵大小。
注意用于迭代的中间量要及时置零
对浮点数进行加减运算后,如需再次进行乘除操作,需
提前用
if(fabs(num)<pow(10,-12)){ num=0
}
进行置零,以避免自己除自己时将一个实际上为 0 的数变为 1
更改某个类的头文件和源文件时注意应更改当前文件夹内的文件,否则在文件中进行的更改将无法运用。
用 extern 声明全局类对象时记得用 new 初始化全局类对象
在.ui 文件中,控件名修改后不按回车键,即使按保存,控件名仍然为原来的名字
修改头文件及对应的源文件时,注意两个文件是否在同一项目中
未知 bug
在读取输入的分数时有如下三种方式:
第二种是逻辑上正确的,但在调试过程中发现,若分数前有负号,right 函数会错误截取字符串。
资源下载地址:https://download.csdn.net/download/sheziqiong/85788074
资源下载地址:https://download.csdn.net/download/sheziqiong/85788074
边栏推荐
- mongoDB的三种基础备份方法
- Jz-062- the k-th node of binary search tree
- Tiktok practice ~ search page ~ video details
- C language file cursor fseek
- 不要做巨婴了
- JWT operation tool class sharing
- MongoDB实现创建删除数据库、创建删除表(集合)、数据增删改查
- 孙老师版本JDBC(2022年6月12日21:34:25)
- 西瓜书重温(七): 贝叶斯分类器(手推+代码demo)
- 30. concatenate substrings of all words
猜你喜欢
Tiktok practice ~ search page ~ scan QR code
Keep alive cache component in Vue
抖音实战~分享模块~生成短视频二维码
[Bayesian classification 4] Bayesian network
mongoDB的三种基础备份方法
【山东大学】考研初试复试资料分享
抖音实战~搜索页面~视频详情
飞天+CIPU体为元宇宙带来更大想象空间
[Bayesian classification 2] naive Bayesian classifier
On the origin of the dispute between the tradition and the future of database -- AWS series column
随机推荐
mongoDB的三种基础备份方法
Fixed length memory pool
Gamefi active users, transaction volume, financing amount and new projects continue to decline. Can axie and stepn get rid of the death spiral? Where is the chain tour?
C语言 文件光标 fseek
Disruptor本地线程队列_使用transProcessor处理器和WorkPool两种方式进行消费对比---线程间通信工作笔记005
The two files are merged into a third file.
GameFi 活跃用户、交易量、融资额、新项目持续性下滑,Axie、StepN 能摆脱死亡螺旋吗?链游路在何方?
Détails de l'annotation des ressources sentinelles
Gee: calculate the maximum and minimum values of pixels in the image area
Super VRT
回溯思路详解
Detailed explanation of shutter textfield
0 basic C language (3)
飞天+CIPU体为元宇宙带来更大想象空间
GEE:计算image区域内像素最大最小值
MongoDB实现创建删除数据库、创建删除表(集合)、数据增删改查
Good thing recommendation: mobile terminal development security tool
这些地区考研太疯狂!哪个地区报考人数最多?
Case description: the competition score management system needs to count the competition scores obtained by previous champions and record them in the file. The system has the following requirements: -
Comment installer la base de données MySQL 8.0 sous Windows? (tutoriel graphique)