MATLAB设计矩阵计算器要点.docx

上传人:b****6 文档编号:4728684 上传时间:2022-12-08 格式:DOCX 页数:23 大小:198.14KB
下载 相关 举报
MATLAB设计矩阵计算器要点.docx_第1页
第1页 / 共23页
MATLAB设计矩阵计算器要点.docx_第2页
第2页 / 共23页
MATLAB设计矩阵计算器要点.docx_第3页
第3页 / 共23页
MATLAB设计矩阵计算器要点.docx_第4页
第4页 / 共23页
MATLAB设计矩阵计算器要点.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

MATLAB设计矩阵计算器要点.docx

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

MATLAB设计矩阵计算器要点.docx

MATLAB设计矩阵计算器要点

MATLAB程序设计语言大作业

——矩阵计算器

题目:

矩阵计算器

学号:

02123010

姓名:

石星宇

指导教师:

汤建龙

1、实验目的

1、通过GUI(GraphicalUserInterface,简称GUI,图形用户界面,又称图形用户接口)设计矩阵计算器,熟悉MATLAB中GUI工具的使用和编程。

2、加深对MATLABGUI中句柄控制变量的理解。

3、巩固线性代数中矩阵的基本运算。

2、实验内容

1、利用MATLAB中的GUIDE工具箱快速生成GUI界面。

2、在生成的GUI界面中设计能够实现矩阵基本运算的矩阵计算器。

3、实验结果

通过GUIDE快速生成GUI界面设计的矩阵计算器如下图所示:

图1MatrixCalculator基本界面

该矩阵计算器包含四模块,分别为:

输入区、输出区、功能区及其他运算区。

4、功能描述

1、功能概述

本矩阵计算器能够实现一些基本的矩阵运算,包括对单个矩阵的运算以及对两个矩阵的运算。

其中,对于两个矩阵的运算有:

加、减、乘、除(左除、右除)、按元素乘、按元素除以及求解线性方程组;对于単个矩阵的运算有:

转置(共轭与非共轭)、求逆、计算行列式、求秩、平方、立方、开方、求特征值、求2范数、LU分解、最简阶梯阵化简等。

计算过程中,矩阵的输入方式与MATLAB中矩阵输入方式类似。

即①矩阵行中的元素以空格或逗号间隔;②矩阵行之间以分号间隔;③整个元素列表用方括号括起来。

2、功能详细描述

2.1矩阵相加(减)

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

图2矩阵相加

输入的A、B矩阵必须是维数相同,否则不能实现相加运算。

如输入不同维数的矩阵且进行相加运算,则会提示出错如图3所示:

图3矩阵相加错误提示

两矩阵相减的运算过程与相加运算类似,在此不再赘述。

2.2矩阵相乘

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

图4矩阵相乘

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

图5矩阵相乘错误提示

2.3按元素乘(除)

输入同2.2。

按下“.*”按钮,输出区显示计算结果如图6所示:

图6矩阵按元素相乘

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

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

2.4矩阵左(右)除

输入A=[12;35],B=[12;57],按下“/L”按钮,输出区显示计算结果如图7所示:

图7矩阵左除

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

图8矩阵左除错误提示

2.5矩阵转置(共轭与非共轭)

输入A=[2+

5;3,7-8

],按下“A’”(共轭转置)与“A.’”按钮(非共轭转置),输出区分别显示计算结果如图9所示:

图9共轭转置(上)与非共轭转置(下)

2.6行列式计算

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

图10方阵求行列式

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

图11求行列式错误提示

2.7矩阵求逆

输入A=[124;456;258],按下“inv”按钮,输出区显示计算结果如图12所示:

图12矩阵求逆

本矩阵计算器求逆功能只针对非奇异方阵,如果输入矩阵A为奇异阵或非方阵,均会提示错误,具体见图13、图14:

图13输入为非方阵时的错误提示

图14输入为奇异阵时的错误提示

2.8线性方程组求解

输入A=[123;2-53;3-25](系数矩阵),B=[0;5;9](常数项),按下“Ax=B”按钮,输出区显示计算结果如图15所示:

图15线性方程组求解

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

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

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

2.9矩阵求秩与最简行阶梯阵化简

输入矩阵A=[123;456;456],分别按下“R”、“rref”按钮,输出区显示计算结果如图16所示:

最简行阶梯阵

矩阵的秩

图16矩阵求秩与最简行阶梯阵化简

2.10平方、立方、与开方运算

输入矩阵A=[123;456;789],分别按下“^2”、“^3”、“Sqrt”按钮,输出区显示计算结果如图17所示:

图17矩阵平方、立方、与开方运算

2.11矩阵特征值

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

图18矩阵特征值求解

2.12LU分解

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

图19矩阵LU分解

其中输出区前三行为矩阵L,后三行为矩阵U,即:

L=

0.2500-0.25001.0000

1.000000

1.00001.00000

U=

4.00005.00006.0000

0-3.00000

001.5000

A=L*U.

2.13求矩阵范数

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

图20求矩阵范数

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

2.14其他运算

设计本部分的目的在于实现功能区中无法一步实现的计算。

比如两矩阵的线性组合(

,其中

均为常数)、矩阵的高次幂(

)等。

具体用法见图21:

图21其他矩阵运算

实现

运算

实现

运算

图21其他矩阵运算

(2)

利用“其他运算”模块对一个矩阵进行操作时,另一个矩阵不能没有输入,因此,假设在操作A矩阵(

),此时B矩阵仍要赋值为空([]),如图所示:

否则无法进行计算。

附录(主要代码):

%%作者:

石星宇

%%设计时间:

2014年4月26日

%%设计目的:

通过GUI设计矩阵计算器,熟悉MATLAB中GUI工具的使用和编程。

%%加深对MATLABGUI中句柄控制变量的理解。

%%巩固线性代数中矩阵的基本运算。

%%功能简介:

实现一些基本的矩阵运算,包括对单个矩阵的运算以及对两个矩阵的运算。

其中,对于两个矩阵的运算有:

加、减、乘、除(左除、右除)、按元素乘、按元素除以及求解线性方程组;对于単个矩阵的运算有:

转置(共轭与非共轭)、求逆、计算行列式、求秩、平方、立方、开方、求特征值、求2范数、LU分解、最简阶梯阵化简等。

functionvarargout=Matrix_Calculator(varargin)

gui_Singleton=1;

gui_State=struct('gui_Name',mfilename,...

'gui_Singleton',gui_Singleton,...

'gui_OpeningFcn',@Matrix_Calculator_OpeningFcn,...

'gui_OutputFcn',@Matrix_Calculator_OutputFcn,...

'gui_LayoutFcn',[],...

'gui_Callback',[]);

ifnargin&&ischar(varargin{1})

gui_State.gui_Callback=str2func(varargin{1});

end

ifnargout

[varargout{1:

nargout}]=gui_mainfcn(gui_State,varargin{:

});

else

gui_mainfcn(gui_State,varargin{:

});

end

functionMatrix_Calculator_OpeningFcn(hObject,eventdata,handles,varargin)

handles.output=hObject;

guidata(hObject,handles);

functionvarargout=Matrix_Calculator_OutputFcn(hObject,eventdata,handles)

varargout{1}=handles.output;

functionMatrix_A_Callback(hObject,eventdata,handles)

functionMatrix_A_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

End

functionMatrix_B_Callback(hObject,eventdata,handles)

functionMatrix_B_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functionadd_Callback(hObject,eventdata,handles)

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)%判断A、B是否满足相加条件

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

functionsubtract_Callback(hObject,eventdata,handles)

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)%判断A、B是否满足相减条件

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

functiontimes_Callback(hObject,eventdata,handles)

A=eval((get(handles.Matrix_A,'String')));

B=eval((get(handles.Matrix_B,'String')));

[iAjA]=size(A);

[iBjB]=size(B);

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

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

functionL_divide_Callback(hObject,eventdata,handles)

A=eval((get(handles.Matrix_A,'String')));

B=eval((get(handles.Matrix_B,'String')));

[iAjA]=size(A);

[iBjB]=size(B);

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

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

functionR_divide_Callback(hObject,eventdata,handles)

A=eval((get(handles.Matrix_A,'String')));

B=eval((get(handles.Matrix_B,'String')));

[iAjA]=size(A);

[iBjB]=size(B);

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

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

functiontransposition_Callback(hObject,eventdata,handles)

A=eval((get(handles.Matrix_A,'String')));

result=A';

R=num2str(result);

set(handles.Answer,'String',R)

guidata(hObject,handles);

functiondeterminant_Callback(hObject,eventdata,handles)

A=eval((get(handles.Matrix_A,'String')));

[iAjA]=size(A);

ifiA~=jA%判断A是否为方阵

R='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

functioninvertor_Callback(hObject,eventdata,handles)

A=eval((get(handles.Matrix_A,'String')));

[iAjA]=size(A);

ifiA~=jA%判断A是否为方阵

R='error.Matrixmustbesquare.';

set(handles.Answer,'String',R)

guidata(hObject,handles);

else

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

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

functionrank_Callback(hObject,eventdata,handles)

A=eval((get(handles.Matrix_A,'String')));

result=rank(A);

R=num2str(result);

set(handles.Answer,'String',R)

guidata(hObject,handles);

functionsquare_Callback(hObject,eventdata,handles)

A=eval((get(handles.Matrix_A,'String')));

[iAjA]=size(A);

ifiA~=jA%判断A是否为方阵

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

functioncube_Callback(hObject,eventdata,handles)

A=eval((get(handles.Matrix_A,'String')));

[iAjA]=size(A);

ifiA~=jA%判断A是否为方阵

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

functiontimes2_Callback(hObject,eventdata,handles)

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

functiondivede2_Callback(hObject,eventdata,handles)

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

functiontransposition2_Callback(hObject,eventdata,handles)

A=eval((get(handles.Matrix_A,'String')));

result=A.';

R=num2str(result);

set(handles.Answer,'String',R)

guidata(hObject,handles);

functioneigenvalue_Callback(hObject,eventdata,handles)

A=eval((get(handles.Matrix_A,'String')));

[iAjA]=size(A);

ifiA~=jA%判断A是否为方阵

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

functionsolve_Callback(hObject,eventdata,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%判断A是否为方阵

R='error.Matrixmustbesquare.';

set(handles.Answer,'String',

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1