matlab-GUI矩阵计算器_第1页
matlab-GUI矩阵计算器_第2页
matlab-GUI矩阵计算器_第3页
matlab-GUI矩阵计算器_第4页
matlab-GUI矩阵计算器_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数学应用软件工具箱开发矩阵计算器姓 名: *学 号:*指导老师: *专 业:* 2014年9月11日一.操作过程1.准备工作在Matlab的主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示GUI的设计模板;选择GUI模板中的默认的空白模版Blank GUI(Default)就会显示GUI设计窗口,可以开始设计矩阵计算器了。2.设计过程在GUI界面中加入以下控件:12个文本编辑器(edit text)作为输入矩阵的窗口;216个用以执行运算的按钮(push button);34个静态文本框(static text),其中一个作为显示计算所得结果的窗口,另外3个分别作为表示所输入的矩阵(A、B)以及用来输入标题(矩阵计算器);4加入3个按钮组(button group)分别圈住:a.1中的2个控件及3中的A、B;b.2中的16个计算按钮;c.3中的显示计算结果的窗口。分别双击以上25个控件修改其string属性如下:1 中的改为空白(将原有的“edit text”删掉);2 中的改为对应的矩阵运算或文字,如“+”、“/R”、“秩”、“逆”等(见图1);3 中的按顺序改为空白、“A”、“B”以及“矩阵计算器”;4 中的按钮组分别改为“输入区”、“功能区”、“输出区”。对每个控件分别单击右键,选择“view callback”“callback” “保存”,在每个控件的函数后加入代码(见附件)。此外,还需要做的小变动有: 1中修改string属性时通过修改fontWeight及fontSize把string的字符粗细、字号也一并修改了。 2分别双击2个文本编辑器(edit text)将其max属性取值为100或更大的值,以使编辑器有滚动条,方便显示输入的维数比较大的矩阵。 3双击计算结果窗口将其style改为listbox,也用于显示维数比较大的计算结果。 4还可修改各控件的backgroundcolor(背景色) 、HorizontalAligment(对齐方式)等其他属性以美化界面。保存运行的结果如下:图1二功能简介1.功能概述此矩阵计算器能够实现一些基本的矩阵运算,包括对单个矩阵的运算以及对两个矩阵的运算。其中,对于两个矩阵的运算有:加、减、乘、除(左除、右除)、按元素乘、按元素除以及求解线性方程组;对于単个矩阵的运算有:转置、求秩、求逆、计算行列式、求2范数、LU分解、最简阶梯阵化简、求特征值等。计算过程中,矩阵的输入方式有两种:1与MATLAB中矩阵输入方式类似,即:矩阵行中的元素以空格或逗号间隔;矩阵行之间以分号间隔;整个元素列表用方括号括起来。2为方便计算,可直接输入每行的元素,行之间用回车间隔,每行的元素之间用空格间隔即可。(注:本报告为能把输入的矩阵完全显示出来,选择第一种输入方式)2. 功能详细描述 1 矩阵相加(减)输入A=1 2 3;4 5 6;7 8 9,B=1 4 7;2 5 8;3 6 9,按下“+”按钮,输出区显示计算结果如图2所示:图2输入的A、B矩阵必须是维数相同,否则不能实现相加运算。如输入不同维数的矩阵且进行相加运算,则会提示出错,如图3所示:图3 两矩阵相减的运算过程与相加运算类似,在此不再赘述。 2 点乘(除)输入A=1 2 3;4 5 6;7 8 9,B=1 4 7;2 5 8;3 6 9,按下“.*”按钮,输出区显示计算结果如图4所示:图4输入的A、B矩阵必须是维数相同,否则不能实现按元素乘(除)的运算。如输入不同维数的矩阵且进行按元素乘的运算,则会提示出错,提示信息同图3。 3 矩阵相乘:输入A=1 2 3;4 5 6;7 8 9,B=1 4 7;2 5 8;3 6 9,按下“*”按钮,输出区显示计算结果如图5所示:图5输入的A、B矩阵必须满足前者的列数等于后者的行数,否则不能实现矩阵的乘法运算,出现错误提示如图6所示:图6 4 左除(右除):输入A=1 2 3;4 5 6;7 8 9,B=1 4 7;2 5 8;3 6 9,按下“/L”按钮,输出区显示计算结果如图7所示:图7输入的A、B矩阵必须满足行相等,否则出现错误提示如图8所示: 图8 5 矩阵转置: 输入矩阵A=1 2 3;4 5 6;7 8 9,点击“A”按钮,显示结果如图9所示:图9 6 矩阵求秩:输入矩阵A=1 2 3;4 5 6;7 8 9,点击“秩”按钮,输出区显示计算结果如图10所示:图10 7 矩阵求逆:输入矩阵A=1 2 4;4 5 6;7 8 9,按下“逆”按钮,输出区显示计算结果如图11所示:图11本矩阵计算器求逆功能只针对非奇异方阵,如果输入矩阵A为奇异阵或非方阵,均会提示错误A为非方阵时提示错误如图12:图12A为奇异阵时提示错误如图13:图13 8 行列式:输入A=1 2 4;4 5 6;7 8 9,按下“行列式”按钮,输出区显示计算结果如图14所示:图14输入矩阵A必须为方阵,否则无法计算行列式,提示错误如图15所示:图15 9 范数: 输入矩阵A=1 2 3;4 5 6;7 8 9,按下“范数”按钮,输出区显示计算结果如16所示:图16 由于设计者能力有限,本计算器默认计算矩阵的2范数,其他范数暂不能计算。 10 LU分解: 输入矩阵A=1 2 3;4 5 6;4 2 6,按下“LU”按钮,输出区显示计算结果如图17所示:图17其中,输出前三行为L矩阵,中间三行为U矩阵,后三行为P矩阵 11 线性方程组求解:AX=B 输入A=1 2 3;4 5 6;7 8 9(系数矩阵),B=4;5;6(常数项),按下“Ax=B”按钮,输出区显示计算结果图18所示:图18本部分输入限制较大,须详细说明。第一,系数矩阵必须是非奇异的方阵,否则方程组解不存在或不唯一,本计算器无法求解。第二,常数项必须与系数矩阵行数相同,否则也会出现错误提示 12 最简行阶梯形矩阵: 输入矩阵A=1 2 3;4 5 6;7 8 9,分别按下“阶梯形”按钮,输出区显示计算结果如图19所示:图19 13 特征值:输入矩阵A=1 2 3;4 5 6;7 8 9,按下“特征值”按钮,输出区显示计算结果如图20所示:图20附录:主要代码%矩阵相加a=str2num(get(handles.edit1,string);b=str2num(get(handles.edit2,string);ia ja=size(a);ib jb=size(b);if ia = ib | ja = jb |(ia = ib & ja = jb)%判断A、B是否满足相加条件 c=error.Matrix dimensions must agree.; set(handles.text1,String,c) guidata(hObject, handles);else result = a+b ; c= num2str(result); set(handles.text1,String,c) guidata(hObject, handles);end%矩阵相减a=str2num(get(handles.edit1,string);b=str2num(get(handles.edit2,string);ia ja=size(a);ib jb=size(b);if ia = ib | ja = jb |(ia = ib & ja = jb)%判断A、B是否满足相减条件 c=error.Matrix dimensions must agree.; set(handles.text1,String,c) guidata(hObject, handles);else result = a-b ; c= num2str(result); set(handles.text1,String,c) guidata(hObject, handles);end%矩阵点乘a=str2num(get(handles.edit1,string);b=str2num(get(handles.edit2,string);ia ja=size(a);ib jb=size(b);if ia = ib | ja = jb |(ia = ib & ja = jb)%判断A、B是否满足点乘条件 c=error.Matrix dimensions must agree.; set(handles.text1,String,c) guidata(hObject, handles);else result = a.*b ; c= num2str(result); set(handles.text1,String,c) guidata(hObject, handles);end%矩阵相乘a=str2num(get(handles.edit1,string);b=str2num(get(handles.edit2,string);ia ja=size(a);ib jb=size(b);if ja = ib %判断A、B是否满足相乘条件 c=error.Inner matrix dimensions must agree.; set(handles.text1,String,c) guidata(hObject, handles);else result = a*b ; c= num2str(result); set(handles.text1,String,c) guidata(hObject, handles);end%矩阵点除a=str2num(get(handles.edit1,string);b=str2num(get(handles.edit2,string);ia ja=size(a);ib jb=size(b);if ia = ib | ja = jb |(ia = ib & ja = jb)%判断A、B是否满足点除条件 c=error.Matrix dimensions must agree.; set(handles.text1,String,c) guidata(hObject, handles);else result = a./b ; c= num2str(result); set(handles.text1,String,c) guidata(hObject, handles);end%矩阵左除a=str2num(get(handles.edit1,string);b=str2num(get(handles.edit2,string);ia ja=size(a);ib jb=size(b);if ia = ib %判断A、B是否满足左除条件 c=error.Matrix dimensions must agree.; set(handles.text1,String,c) guidata(hObject, handles);else result = ab ; c= num2str(result); set(handles.text1,String,c) guidata(hObject, handles);end%矩阵右除a=str2num(get(handles.edit1,string);b=str2num(get(handles.edit2,string);ia ja=size(a);ib jb=size(b);if ia = ib %判断A、B是否满足右除条件 c=error.Matrix dimensions must agree.; set(handles.text1,String,c) guidata(hObject, handles);else result = a/b ; c= num2str(result); set(handles.text1,String,c) guidata(hObject, handles);end%矩阵求秩a=str2num(get(handles.edit1,string);c=a;set(handles.text1,string,num2str(c) a=str2num(get(handles.edit1,string); result =rank(a) ; c= num2str(result); set(handles.text1,String,c) guidata(hObject, handles);%求逆a=str2num(get(handles.edit1,string);ia ja=size(a);if ia= ja %判断A是否为方阵 c=error.Matrix dimensions must agree.; set(handles.text1,String,c) guidata(hObject, handles);else if abs(det(a)1e-6 %判断A是否为奇异阵 c=error.Matrix is singular to working precision.; set(handles.text1,String,c) guidata(hObject, handles); else result = inv(a) ; c = num2str(result); set(handles.text1,String,c) guidata(hObject, handles); endend%求行列式a=str2num(get(handles.edit1,string);ia ja=size(a);if ia = ja %判断A是否为方阵 c=error.Matrix dimensions must agree.; set(handles.text1,String,c) guidata(hObject, handles);else result = det(a) ; c= num2str(result); set(handles.text1,String,c) guidata(hObject, handles);end%求2-范数a=str2num(get(handles.edit1,string);result = norm(a);c = num2str(result);set(handles.text1,String,c)guidata(hObject, handles)%求LU分解a=str2num(get(handles.edit1,string);L,U,P=lu(a);result = L;U;P ;c= num2str(result);set(handles.text1,String,c)guidata(hObject, handles)%求AX=Ba=str2num(get(handles.edit1,string);b=str2num(get(handles.edit2,string);ia ja=size(a);ib jb=size(b);if ia = ib c=error.; set(handles.text1,String,c) guidata(hObject, handles);else if ia =ja %判断A是否为方阵 c=error.Matrix

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论