基于QT开发的线性代数初学者的矩阵计算器设计
资源下载地址: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
基于QT开发的线性代数初学者的矩阵计算器设计相关推荐
- 基于qt开发的智能系统:电子相册,监控摄像头模块,音乐播放器,视频播放器,电子时钟
登录模块 源码请移步 //登录验证按钮函数 void MainWindow::on_loginBtn_clicked() {//获得userNameLEd输入框的文本userNameLEd->t ...
- 基于Qt开发的网络诊断工具
导语: 项目名称:基于Qt开发的网络诊断工具 开发环境:VS2008 QT版本:4.7 数据读入:用户自行选中的.ini配置文件 功能实现:解析.ini文件,实时检测相关的域名连通性以及DNS解析的结 ...
- 【QT/C++】基于QT开发的一款A-SOUL元素的视频播放器(附源码)
[QT/C++]基于QT开发的一款关于A-SOUL的视频播放器(附源码) 前言 一.软件使用说明 1.运行软件的界面如下 2.操作软件的步骤 二.软件设计说明 1.UI界面的设计 2.主代码中的部分函 ...
- 基于嵌入式linux电子相册设计,用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发...
用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发,包含源代码和编译好的可执行程序 linux_project\album\album.pro .............\.....\al ...
- 基于QT开发PC端文件加密工具
基于QT开发PC端文件加密工具 1.客户需求 某案子.该方案,通过外挂TF卡实现,本地教育资源的调取使用.按客户需求,把TF卡内的内容进行加密,并在软件中写好解密,确保资源文件只能在教育机中才能正常播 ...
- 基于QT开发的多媒体播放器
基于QT开发的多媒体播放器 描述: 使用QT软件设计一个多媒体播放器,实现视频及音乐的播放,暂停,快进,快退,音量的调整. 歌词的实时显示和视频全屏播放等基本功能. 功能: 1.音乐系统:提供播放.暂 ...
- 基于QT开发的音乐播放器(附源码)
基于QT开发的音乐播放器(附源码) 一.简介 1.介绍 2.功能描述 3.系统功能层次模块图 4.各模块功能描述 (1)播放界面 (2)歌词 (3)歌曲信息 (4)歌曲列表 5.文件格式 6.运行环境 ...
- Qt:基于Qt开发的轻量级HTTP/HTTPS服务器
介绍 JQHttpServer是基于Qt开发的轻量级HTTP/HTTPS服务器,目前支持GET和POST两个协议. 底层有QTcpSocket.QSslSocket和QLocalSocket三个版本, ...
- 基于Qt的P2P局域网聊天及文件传送软件设计
基于Qt的P2P局域网聊天及文件传送软件设计 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<通信网络>的课程设计作业,之 ...
- 基于qt和mysql点菜系统的优点_基于QT的电子点餐订餐系统的设计与实现(SQLite)
基于QT的电子点餐订餐系统的设计与实现(SQLite)(任务书,外文翻译,毕业论文20000字,程序代码,SQLite数据库,答辩PPT) 摘 要 在深入研究中小餐饮企业工作流程的基础上,分析制约餐 ...
最新文章
- UE5蓝图初学课程 Unreal Engine 5: Blueprints for Beginners
- 将DBF,XLS,XML,MDB文件导入C#DataGrid的方法
- 8、MySQL变量的定义和赋值
- js粘贴板为什么获取不到图片信息_JavaScript 学习笔记(3):图片库
- 在千万级的数据库查询中,如何提高效率?
- java 多态_Java的多态
- Alphabet高管:移动搜索为收入主要增长点 广告形式改进长期获益
- POJ3263 Tallest Cow【差分数组】
- 查看 java heapspace_Java heap space 问题查找
- 2.数据中台 --- 什么是数据中台
- vi设计清单_最终产品设计组合清单
- java多边形生成_如何为凹多边形生成回声路径
- 《请君入瓮——APT攻防指南之兵不厌诈》—第8章8.5节安全贵在未雨绸缪
- 计算机桌面图标右上角出现双箭头符号,电脑桌面图标有箭头,如何消除小小障碍小编有绝招...
- python描述对象静态特性的数据为_The couple wanted to adopt the black boy they had been _______._学小易找答案...
- 电脑太卡之NT kernel System
- c语言模拟自动饮料机,C语言--小程序--简单模拟ATM机
- 国货美妆新宠“完美日记”爆发,给传统企业的数字化营销带来哪些启发?
- Android_常驻进程(杀不死的进程)
- ip地址掩码和位数对应关系表、子网掩码、网络地址、主机地址-yellowcong
热门文章
- apdu 移动sim_做移动sim卡读写程序, 用APDU指令, 怎么给白卡写入iccid和IMSI?
- Urule-Pro 规则引擎 本地Urule下载 初始化教程
- 传奇3单机显示服务器进不去,传奇3私服单机 数据库连接不上 dafe
- 【OS】Linux下 /dev 常见特殊设备介绍与应用[loop]
- QtreeView 树形结构
- visio箭头尾部遮盖方框边线
- 搜索巨头百度深耕中国量子产业
- PyHook3简明教程
- java十大排序法_Java 十大排序算法
- 凯恩帝k1000ti参数设置_凯恩帝K1000T系统用户手册.pdf