1、matlabGUI矩阵计算器matlab-GUI矩阵计算器数学应用软件工具箱开发矩阵计算器姓 名: *学 号:*指导老师: *专 业:* 2014年9月11日一.操作过程1.准备工作在Matlab的主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示GUI的设计模板;选择GUI模板中的默认的空白模版Blank GUI(Default)就会显示GUI设计窗口,可以开始设计矩阵计算器了。2.设计过程在GUI界面中加入以下控件:12个文本编辑器(edit text)作为输入矩阵的窗口;216个用以执行运算的按钮(push button);34个静态文本框(static tex
2、t),其中一个作为显示计算所得结果的窗口,另外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 ca
3、llback”“callback” “保存”,在每个控件的函数后加入代码(见附件)。此外,还需要做的小变动有: 1中修改string属性时通过修改fontWeight及fontSize把string的字图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、 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本矩阵计算器求逆功能只针对非奇异方阵
5、,如果输入矩阵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”按钮,输出区显示计算结果如图
6、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
7、 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);e
8、lse 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(
9、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是
10、否满足点乘条件 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
11、(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,strin
12、g);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(han
13、dles.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%矩
14、阵右除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(hO
15、bject, 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是否为方
16、阵 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,Stri
17、ng,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, hand
18、les);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(
19、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 must be square.; set(handles.text1,String,c) guidata(hObject, handles); else if det(a) = 0 %判断A是否为奇
20、异阵 c=error.Matrix is singular to working precision.; set(handles.text1,String,c) guidata(hObject, handles); else result = ab ; c = num2str(result); set(handles.text1,String,c) guidata(hObject, handles); end endenda=str2num(get(handles.edit1,string);result = rref(a);c= num2str(result);set(handles.tex
21、t1,String,c)guidata(hObject, handles);%求特征值a=str2num(get(handles.edit1,string);ia ja=size(a);if ia = ja %判断A是否为方阵 c=error.Matrix must be square .; set(handles.text1,String,c) guidata(hObject, handles);else result = eig(a) ; c= num2str(result); set(handles.text1,String,c) guidata(hObject, handles);end
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1