《基于MATLAB的简易矩阵计算器.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的简易矩阵计算器.docx(13页珍藏版)》请在三一办公上搜索。
1、基于MATLAB的简易矩阵计算器MATLAB程序设计 程序设计报告 设计题目:简易矩阵计算器 班 级:021231 姓 名:余颖智 学 号:02123021 1 目录 1. 设计目标 2. 设计内容 3. 设计思想 4. 设计说明 5. 设计步骤及程序代码 6. 运行计算器 7. 总结 2 1. 设计目标 1.熟悉MATLAB的主要控件使用方法。 2.熟悉MATLAB的GUI设计流程。 2.设计内容 设计一个简易的矩阵计算器,通过对简单应用矩阵计算器的设计,编制、调试实现矩阵相加减,矩阵的转置等简单运算,以学习应用MATLAB编写程序原理,加深对MATLAB的学习及应用。 3.设计思想 基于M
2、ATLAB中GUI界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用信息函数完成数据的输入输出,实现计算功能。生成简单的应用软件。 4.设计说明 1) 包含的功能有:加、减、乘、转置等。 2) 输入的原始数据分别为A或B矩阵,分别显示在不同标签中,运算的结果则显示在输出部分。 3) 计算功能基本上是用系统内部函数。 4) 程序能够自动判断输入数据的正确性,如不能输入。 5.设计步骤及只要代码 1) 打开MATLAB,点击,出现GUI的3 2) 设计计算器版面直至4 3) 对功能键进行设计 执行A矩阵加B矩阵,其执行代码如下 A = eval(get(handles.Matrix
3、_A,String); B = eval(get(handles.Matrix_B,String); iA jA=size(A); iB jB=size(B); if iA = iB | jA = jB |(iA = iB & jA = jB) R=error.Matrix dimensions must agree.; set(handles.Answer,string,R) guidata(hObject, handles); else result=A + B ; R =num2str(result); set(handles.Answer,string,R) guidata(hObje
4、ct, handles); end 5 执行A矩阵减B矩阵,其执行代码如下 A = eval(get(handles.Matrix_A,String); B = eval(get(handles.Matrix_B,String); iA jA=size(A); iB jB=size(B); if iA = iB | jA = jB |(iA = iB & jA = jB) R=error.Matrix dimensions must agree.; set(handles.Answer,String,R) guidata(hObject, handles); else result = A -
5、 B ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); end 执行A矩阵与B矩阵相乘,其执行代码如下 A = eval(get(handles.Matrix_A,String); B = eval(get(handles.Matrix_B,String); iA jA=size(A); iB jB=size(B); if jA=iB R=error.Inner matrix dimensions must agree.; set(handles.Answer,String,R) gui
6、data(hObject, handles); else result = A * B ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); end 执行A右除B矩阵,其执行代码如下 A = eval(get(handles.Matrix_A,String); B = eval(get(handles.Matrix_B,String); iA jA=size(A); iB jB=size(B); if iA=iB 、 R=error.Matrix dimensions must agree.
7、; set(handles.Answer,String,R) guidata(hObject, handles); else 6 result = A B ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); end 执行A.*B,其执行代码如下 A = eval(get(handles.Matrix_A,String); B = eval(get(handles.Matrix_B,String); result = A .* B ; R = num2str(result); set(han
8、dles.Answer,String,R) guidata(hObject, handles); 执行A./B,其执行代码如下 A = eval(get(handles.Matrix_A,String); B = eval(get(handles.Matrix_B,String); result = A ./ B ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); 执行A的转置,其执行代码如下 A = eval(get(handles.Matrix_A,String); result =
9、A ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); 执行A右除B,其执行代码如下 A = eval(get(handles.Matrix_A,String); B = eval(get(handles.Matrix_B,String); iA jA=size(A); iB jB=size(B); if iA=iB R=error.Matrix dimensions must agree.; set(handles.Answer,String,R) guidata(hObject, ha
10、ndles); else result = A / B ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); end 7 执行求A的行列式,其执行代码如下 A = eval(get(handles.Matrix_A,String); iA jA=size(A); if iA =jA R=error.Matrix must be square.; set(handles.Answer,String,R) guidata(hObject, handles); else result = det(
11、A) ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); end 执行求A的逆,其执行代码如下 A = eval(get(handles.Matrix_A,String); iA jA=size(A); if iA =jA R=error.Matrix must be square.; set(handles.Answer,String,R) guidata(hObject, handles); else if det(A) = 0 R=error.Matrix is singular t
12、o working precision.; set(handles.Answer,String,R) guidata(hObject, handles); else result = inv(A) ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); end end 执行求A的非共轭转置,其执行代码如下 A = eval(get(handles.Matrix_A,String); result = A. ; R = num2str(result); set(handles.Answer,St
13、ring,R) guidata(hObject, handles); 8 执行求解系数阵为方阵且非奇异的线性方程组,其执行代码如下 A = eval(get(handles.Matrix_A,String); B = eval(get(handles.Matrix_B,String); iA jA=size(A); iB jB=size(B); if iA = iB R=error.; set(handles.Answer,String,R) guidata(hObject, handles); else if iA =jA R=error.Matrix must be square.; se
14、t(handles.Answer,String,R) guidata(hObject, handles); else if det(A) = 0 R=error.Matrix is singular to working precision.; set(handles.Answer,String,R) guidata(hObject, handles); else result = AB ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); end end end 执行求A的秩,其执行代码如
15、下 A = eval(get(handles.Matrix_A,String); result = rank(A) ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); 执行求A的平方,其执行代码如下 A = eval(get(handles.Matrix_A,String); iA jA=size(A); if iA =jA R=error.Inputs must be a scalar and a square matrix.; set(handles.Answer,String,R)
16、guidata(hObject, handles); else 9 result = A2 ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); end 执行求A的立方,其执行代码如下 A = eval(get(handles.Matrix_A,String); iA jA=size(A); if iA =jA R=error.Inputs must be a scalar and a square matrix.; set(handles.Answer,String,R) guidata(
17、hObject, handles); else result = A3 ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); end 执行求A的特征值,其执行代码如下 A = eval(get(handles.Matrix_A,String); iA jA=size(A); if iA =jA R=error.Matrix must be square.; set(handles.Answer,String,R) guidata(hObject, handles); else result
18、= eig(A) ; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); end 执行求A开平方根,其执行代码如下 A = eval(get(handles.Matrix_A,String); result = sqrt(A); R = num2str(result); set(handles.Answer,String,R) 执行计算矩阵范围,其执行代码如下 A = eval(get(handles.Matrix_A,String); result = norm(A); R = num2st
19、r(result); 10 set(handles.Answer,String,R) guidata(hObject, handles); 执行对A的分解,其执行代码如下 A = eval(get(handles.Matrix_A,String); L U = lu(A); result = L;U; R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); 执行将矩阵A化为最简阶梯矩阵,其执行代码如下 A = eval(get(handles.Matrix_A,String); result =
20、rref(A); R = num2str(result); set(handles.Answer,String,R) guidata(hObject, handles); 4)对输出进行设计 输出框内有新添加的,使经过计算后的式子通过输出框显示。 6.运行计算器 A+B 11 A-B A*B 12 A/LB A.*B 13 A./B A 14 A/R det(A) 15 inv(A) A. 16 Ax=B Rank(A) 17 A2 A3 18 eig(A) Sqrt(A) 19 Norm(A) Lu(A) 20 rref(A) 7.总结 课程设计到此已告一段落,经过与同学的交流和上网搜寻资料,在老师给与的时间内,设计基本完成。 在本次设计中,学到很多有用的知识,也积累了不少宝贵的经验。从一开始对MATLAB的模糊认识,到现在能用它制作一个简易矩阵计算器,对我个人来说是一个进步,因为在此期间遇到过很多难题,但还是一一去解决了,比如说对计算器的排版,对执行代码的设计等等。 设计完毕留给我的是欣喜,不过计算器仍存在一些不足与漏洞,有待以后去不断完善,并且我知道自己要学的东西还多着呢,希望今后多加学习,争取达到做我想做的东西的境界。 21