基于MATLAB的简易矩阵计算器.docx
《基于MATLAB的简易矩阵计算器.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的简易矩阵计算器.docx(23页珍藏版)》请在冰豆网上搜索。
![基于MATLAB的简易矩阵计算器.docx](https://file1.bdocx.com/fileroot1/2022-12/14/a60f747e-b804-41fc-963a-5d9730af9069/a60f747e-b804-41fc-963a-5d9730af90691.gif)
基于MATLAB的简易矩阵计算器
《MATLAB程序设计》
程序设计报告
设计题目:
简易矩阵计算器
班级:
021231
******
学号:
********
1.设计目标……………………
2.设计内容……………………
3.设计思想……………………
4.设计说明……………………
5.设计步骤及程序代码……………………
6.运行计算器……………………
7.总结…………………………
1.设计目标
1.熟悉MATLAB的主要控件使用方法。
2.熟悉MATLAB的GUI设计流程。
2.设计内容
设计一个简易的矩阵计算器,通过对简单应用矩阵计算器的设计,编制、调试实现矩阵相加减,矩阵的转置等简单运算,以学习应用MATLAB编写程序原理,加深对MATLAB的学习及应用。
3.设计思想
基于MATLAB中GUI界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用信息函数完成数据的输入输出,实现计算功能。
生成简单的应用软件。
4.设计说明
1)包含的功能有:
加、减、乘、转置等。
2)输入的原始数据分别为A或B矩阵,分别显示在不同标签中,运算的结果则显示在输出部分。
3)计算功能基本上是用系统内部函数。
4)程序能够自动判断输入数据的正确性,如不能输入
(1)。
5.设计步骤及只要代码
1)打开MATLAB,点击
,出现GUI的
2)
设计计算器版面直至
3)对功能键进行设计
执行A矩阵加B矩阵,其执行代码如下
A=eval((get(handles.Matrix_A,'String')));
B=eval((get(handles.Matrix_B,'String')));
[iAjA]=size(A);
[iBjB]=size(B);
ifiA~=iB|jA~=jB|(iA~=iB&jA~=jB)
R='error.Matrixdimensionsmustagree.';
set(handles.Answer,'string',R)
guidata(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')));
[iAjA]=size(A);
[iBjB]=size(B);
ifiA~=iB|jA~=jB|(iA~=iB&jA~=jB)
R='error.Matrixdimensionsmustagree.';
set(handles.Answer,'String',R)
guidata(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')));
[iAjA]=size(A);
[iBjB]=size(B);
ifjA~=iB
R='error.Innermatrixdimensionsmustagree.';
set(handles.Answer,'String',R)
guidata(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')));
[iAjA]=size(A);
[iBjB]=size(B);
ifiA~=iB、
R='error.Matrixdimensionsmustagree.';
set(handles.Answer,'String',R)
guidata(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')));
result=A.*B;
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')));
result=A./B;
R=num2str(result);
set(handles.Answer,'String',R)
guidata(hObject,handles);
执行A的转置,其执行代码如下
A=eval((get(handles.Matrix_A,'String')));
result=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')));
[iAjA]=size(A);
[iBjB]=size(B);
ifiA~=iBþ
R='error.Matrixdimensionsmustagree.';
set(handles.Answer,'String',R)
guidata(hObject,handles);
else
result=A/B;
R=num2str(result);
set(handles.Answer,'String',R)
guidata(hObject,handles);
end
执行求A的行列式,其执行代码如下
A=eval((get(handles.Matrix_A,'String')));
[iAjA]=size(A);
ifiA~=jAR='error.Matrixmustbesquare.';
set(handles.Answer,'String',R)
guidata(hObject,handles);
else
result=det(A);
R=num2str(result);
set(handles.Answer,'String',R)
guidata(hObject,handles);
end
执行求A的逆,其执行代码如下
A=eval((get(handles.Matrix_A,'String')));
[iAjA]=size(A);
ifiA~=jA
R='error.Matrixmustbesquare.';
set(handles.Answer,'String',R)
guidata(hObject,handles);
else
ifdet(A)==0
R='error.Matrixissingulartoworkingprecision.';
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,'String',R)
guidata(hObject,handles);
执行求解系数阵为方阵且非奇异的线性方程组,其执行代码如下
A=eval((get(handles.Matrix_A,'String')));
B=eval((get(handles.Matrix_B,'String')));
[iAjA]=size(A);
[iBjB]=size(B);
ifiA~=iB
R='error.';
set(handles.Answer,'String',R)
guidata(hObject,handles);
else
ifiA~=jA
R='error.Matrixmustbesquare.';
set(handles.Answer,'String',R)
guidata(hObject,handles);
else
ifdet(A)==0
R='error.Matrixissingulartoworkingprecision.';
set(handles.Answer,'String',R)
guidata(hObject,handles);
else
result=A\B;
R=num2str(result);
set(handles.Answer,'String',R)
guidata(hObject,handles);
end
end
end
执行求A的秩,其执行代码如下
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')));
[iAjA]=size(A);
ifiA~=jA
R='error.Inputsmustbeascalarandasquarematrix.';
set(handles.Answer,'String',R)
guidata(hObject,handles);
else
result=A^2;
R=num2str(result);
set(handles.Answer,'String',R)
guidata(hObject,handles);
end
执行求A的立方,其执行代码如下
A=eval((get(handles.Matrix_A,'String')));
[iAjA]=size(A);
ifiA~=jA
R='error.Inputsmustbeascalarandasquarematrix.';
set(handles.Answer,'String',R)
guidata(hObject,handles);
else
result=A^3;
R=num2str(result);
set(handles.Answer,'String',R)
guidata(hObject,handles);
end
执行求A的特征值,其执行代码如下
A=eval((get(handles.Matrix_A,'String')));
[iAjA]=size(A);
ifiA~=jA
R='error.Matrixmustbesquare.';
set(handles.Answer,'String',R)
guidata(hObject,handles);
else
result=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)
执行计算矩阵范围(默认为2范数),其执行代码如下
A=eval(get(handles.Matrix_A,'String'));
result=norm(A);
R=num2str(result);
set(handles.Answer,'String',R)
guidata(hObject,handles);
执行对A的分解,其执行代码如下
A=eval(get(handles.Matrix_A,'String'));
[LU]=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=rref(A);
R=num2str(result);
set(handles.Answer,'String',R)
guidata(hObject,handles);
4)对输出进行设计
输出框内有新添加的
,使经过计算后的式子通过输出框显示。
6.运行计算器
A+B
A-B
A*B
A/LB
A.*B
A./B
A’
A/R
det(A)
inv(A)
A.’
Ax=B
Rank(A)
A^2
A^3
eig(A)
Sqrt(A)
Norm(A)
Lu(A)
rref(A)
7.总结
课程设计到此已告一段落,经过与同学的交流和上网搜寻资料,在老师给与的时间内,设计基本完成。
在本次设计中,学到很多有用的知识,也积累了不少宝贵的经验。
从一开始对MATLAB的模糊认识,到现在能用它制作一个简易矩阵计算器,对我个人来说是一个进步,因为在此期间遇到过很多难题,但还是一一去解决了,比如说对计算器的排版,对执行代码的设计等等。
设计完毕留给我的是欣喜,不过计算器仍存在一些不足与漏洞,有待以后去不断完善,并且我知道自己要学的东西还多着呢,希望今后多加学习,争取达到做我想做的东西的境界。
(好远)