最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

matlab-GUI矩阵计算器..

来源:动视网 责编:小OO 时间:2025-09-27 11:49:37
文档

matlab-GUI矩阵计算器..

数学应用软件工具箱开发——矩阵计算器姓名:***学号:********指导老师:***专业:********2014年9月11日一.操作过程1.准备工作①在Matlab的主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示GUI的设计模板;②选择GUI模板中的默认的空白模版BlankGUI(Default)就会显示GUI设计窗口,可以开始设计矩阵计算器了。2.设计过程①在GUI界面中加入以下控件:1>2个文本编辑器(edittext)作为输入矩阵的窗口;2>16个用以执
推荐度:
导读数学应用软件工具箱开发——矩阵计算器姓名:***学号:********指导老师:***专业:********2014年9月11日一.操作过程1.准备工作①在Matlab的主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示GUI的设计模板;②选择GUI模板中的默认的空白模版BlankGUI(Default)就会显示GUI设计窗口,可以开始设计矩阵计算器了。2.设计过程①在GUI界面中加入以下控件:1>2个文本编辑器(edittext)作为输入矩阵的窗口;2>16个用以执


数学应用软件工具箱开发

——矩阵计算器

姓    名:  ***

学    号:********

指导老师:  ***

专    业:******** 

2014年9月11日

一.操作过程

1.准备工作

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

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

2.设计过程

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

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

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

3>4个静态文本框(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:

图12

A为奇异阵时提示错误如图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 = 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 = 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);

    end

end

%%求行列式

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

a=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 must be square.';

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

        guidata(hObject, handles);

    else

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

            c='error.Matrix is singular to working precision.';

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

[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

文档

matlab-GUI矩阵计算器..

数学应用软件工具箱开发——矩阵计算器姓名:***学号:********指导老师:***专业:********2014年9月11日一.操作过程1.准备工作①在Matlab的主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示GUI的设计模板;②选择GUI模板中的默认的空白模版BlankGUI(Default)就会显示GUI设计窗口,可以开始设计矩阵计算器了。2.设计过程①在GUI界面中加入以下控件:1>2个文本编辑器(edittext)作为输入矩阵的窗口;2>16个用以执
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top