matlabGUI矩阵计算器.docx

上传人:b****5 文档编号:7813186 上传时间:2023-01-26 格式:DOCX 页数:19 大小:474.80KB
下载 相关 举报
matlabGUI矩阵计算器.docx_第1页
第1页 / 共19页
matlabGUI矩阵计算器.docx_第2页
第2页 / 共19页
matlabGUI矩阵计算器.docx_第3页
第3页 / 共19页
matlabGUI矩阵计算器.docx_第4页
第4页 / 共19页
matlabGUI矩阵计算器.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

matlabGUI矩阵计算器.docx

《matlabGUI矩阵计算器.docx》由会员分享,可在线阅读,更多相关《matlabGUI矩阵计算器.docx(19页珍藏版)》请在冰豆网上搜索。

matlabGUI矩阵计算器.docx

matlabGUI矩阵计算器

matlab-GUI矩阵计算器

 

数学应用软件工具箱开发

——矩阵计算器

 

姓名:

***

学号:

********

指导老师:

***

专业:

********

 

2014年9月11日

一.操作过程

1.准备工作

①在Matlab的主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示GUI的设计模板;

②选择GUI模板中的默认的空白模版BlankGUI(Default)就会显示GUI设计窗口,可以开始设计矩阵计算器了。

2.设计过程

①在GUI界面中加入以下控件:

1>2个文本编辑器(edittext)作为输入矩阵的窗口;

2>16个用以执行运算的按钮(pushbutton);

3>4个静态文本框(statictext),其中一个作为显示计算所得结果的窗口,另外3个分别作为表示所输入的矩阵(A、B)以及用来输入标题(矩阵计算器);

4>加入3个按钮组(buttongroup)分别圈住:

a.1>中的2个控件及3>中的A、B;

b.2>中的16个计算按钮;

c.3>中的显示计算结果的窗口。

②分别双击以上25个控件修改其string属性如下:

1>中的改为空白(将原有的“edittext”删掉);

2>中的改为对应的矩阵运算或文字,如“+”、“/R”、“秩”、“逆”等(见图1);

3>中的按顺序改为空白、“A”、“B”以及“矩阵计算器”;

4>中的按钮组分别改为“输入区”、“功能区”、“输出区”。

③对每个控件分别单击右键,选择“viewcallback”→“callback”→“保存”,在每个控件的函数后加入代码(见附件)。

④此外,还需要做的小变动有:

1>②中修改string属性时通过修改fontWeight及fontSize把string的字

图4

输入的A、B矩阵必须是维数相同,否则不能实现按元素乘(除)的运算。

如输入不同维数的矩阵且进行按元素乘的运算,则会提示出错,提示信息同图3。

3>矩阵相乘:

输入A=[123;456;789],B=[147;258;369],按下“*”按钮,输出区显示计算结果如图5所示:

图5

输入的A、B矩阵必须满足前者的列数等于后者的行数,否则不能实现矩阵的乘法运算,出现错误提示如图6所示:

图6

4>左除(右除):

输入A=[123;456;789],B=[147;258;369],按下“/L”按钮,输出区显示计算结果如图7所示:

图7

输入的A、B矩阵必须满足行相等,否则出现错误提示如图8所示:

图8

5>矩阵转置:

输入矩阵A=[123;456;789],点击“A’”按钮,显示结果如图9所示:

图9

6>矩阵求秩:

输入矩阵A=[123;456;789],点击“秩”按钮,输出区显示计算结果如图10所示:

图10

7>矩阵求逆:

输入矩阵A=[124;456;789],按下“逆”按钮,输出区显示计算结果如图11所示:

图11

本矩阵计算器求逆功能只针对非奇异方阵,如果输入矩阵A为奇异阵或非方阵,均会提示错误

A为非方阵时提示错误如图12:

图12

A为奇异阵时提示错误如图13:

图13

8>行列式:

输入A=[124;456;789],按下“行列式”按钮,输出区显示计算结果如图14所示:

图14

输入矩阵A必须为方阵,否则无法计算行列式,提示错误如图15所示:

图15

9>范数:

输入矩阵A=[123;456;789],按下“范数”按钮,输出区显示计算结果如16所示:

图16

由于设计者能力有限,本计算器默认计算矩阵的2范数,其他范数暂不能计算。

10>LU分解:

输入矩阵A=[123;456;426],按下“LU”按钮,输出区显示计算结果如图17所示:

图17

其中,输出前三行为L矩阵,中间三行为U矩阵,后三行为P矩阵

11>线性方程组求解:

AX=B

输入A=[123;456;789](系数矩阵),B=[4;5;6](常数项),按下“Ax=B”按钮,输出区显示计算结果图18所示:

图18

本部分输入限制较大,须详细说明。

第一,系数矩阵必须是非奇异的方阵,否则方程组解不存在或不唯一,本计算器无法求解。

第二,常数项必须与系数矩阵行数相同,否则也会出现错误提示

12>最简行阶梯形矩阵:

输入矩阵A=[123;456;789],分别按下“阶梯形”按钮,输出区显示计算结果如图19所示:

图19

13>特征值:

输入矩阵A=[123;456;789],按下“特征值”按钮,输出区显示计算结果如图20所示:

图20

 

附录:

主要代码

%%矩阵相加

a=str2num(get(handles.edit1,'string'));

b=str2num(get(handles.edit2,'string'));

[iaja]=size(a);

[ibjb]=size(b);

ifia~=ib|ja~=jb|(ia~=ib&ja~=jb)%判断A、B是否满足相加条件

c='error.Matrixdimensionsmustagree.';

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'));

[iaja]=size(a);

[ibjb]=size(b);

ifia~=ib|ja~=jb|(ia~=ib&ja~=jb)%判断A、B是否满足相减条件

c='error.Matrixdimensionsmustagree.';

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'));

[iaja]=size(a);

[ibjb]=size(b);

ifia~=ib|ja~=jb|(ia~=ib&ja~=jb)%判断A、B是否满足点乘条件

c='error.Matrixdimensionsmustagree.';

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'));

[iaja]=size(a);

[ibjb]=size(b);

ifja~=ib%判断A、B是否满足相乘条件

c='error.Innermatrixdimensionsmustagree.';

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'));

[iaja]=size(a);

[ibjb]=size(b);

ifia~=ib|ja~=jb|(ia~=ib&ja~=jb)%判断A、B是否满足点除条件

c='error.Matrixdimensionsmustagree.';

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'));

[iaja]=size(a);

[ibjb]=size(b);

ifia~=ib%判断A、B是否满足左除条件

c='error.Matrixdimensionsmustagree.';

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'));

[iaja]=size(a);

[ibjb]=size(b);

ifia~=ib%判断A、B是否满足右除条件

c='error.Matrixdimensionsmustagree.';

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'));

[iaja]=size(a);

ifia~=ja%判断A是否为方阵

c='error.Matrixdimensionsmustagree.';

set(handles.text1,'String',c)

guidata(hObject,handles);

else

ifabs(det(a))<1e-6%判断A是否为奇异阵

c='error.Matrixissingulartoworkingprecision.';

set(handles.text1,'String',c)

guidata(hObject,handles);

else

result=inv(a);

c=num2str(result);

set(handles.text1,'String',c)

guidata(hObject,handles);

end

end

 

%%求行列式

a=str2num(get(handles.edit1,'string'));

[iaja]=size(a);

ifia~=ja%判断A是否为方阵

c='error.Matrixdimensionsmustagree.';

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=B

a=str2num(get(handles.edit1,'string'));

b=str2num(get(handles.edit2,'string'));

[iaja]=size(a);

[ibjb]=size(b);

ifia~=ib

c='error.';

set(handles.text1,'String',c)

guidata(hObject,handles);

else

ifia~=ja%判断A是否为方阵

c='error.Matrixmustbesquare.';

set(handles.text1,'String',c)

guidata(hObject,handles);

else

ifdet(a)==0%判断A是否为奇异阵

c='error.Matrixissingulartoworkingprecision.';

set(handles.text1,'String',c)

guidata(hObject,handles);

else

result=a\b;

c=num2str(result);

set(handles.text1,'String',c)

guidata(hObject,handles);

end

end

end

 

a=str2num(get(handles.edit1,'string'));

result=rref(a);

c=num2str(result);

set(handles.text1,'String',c)

guidata(hObject,handles);

%%求特征值

a=str2num(get(handles.edit1,'string'));

[iaja]=size(a);

ifia~=ja%判断A是否为方阵

c='error.Matrixmustbesquare.';

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