已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
matlab大作业 矩阵计算器matrix calculatormatlab程序设计语言大作业矩阵计算器题 目:矩阵计算器学 号:02123010姓 名:石星宇指导教师:汤建龙1、 实验目的1、 通过gui(graphical user interface,简称gui,图形用户界面,又称图形用户接口)设计矩阵计算器,熟悉matlab中gui工具的使用和编程。2、 加深对matlab gui中句柄控制变量的理解。3、 巩固线性代数中矩阵的基本运算。2、 实验内容1、 利用matlab中的guide工具箱快速生成gui界面。2、 在生成的gui界面中设计能够实现矩阵基本运算的矩阵计算器。3、 实验结果通过guide快速生成gui界面设计的矩阵计算器如下图所示:图1 matrix calculator基本界面该矩阵计算器包含四模块,分别为:输入区、输出区、功能区及其他运算区。04、 功能描述1、 功能概述本矩阵计算器能够实现一些基本的矩阵运算,包括对单个矩阵的运算以及对两个矩阵的运算。其中,对于两个矩阵的运算有:加、减、乘、除(左除、右除)、按元素乘、按元素除以及求解线性方程组;对于単个矩阵的运算有:转置(共轭与非共轭)、求逆、计算行列式、求秩、平方、立方、开方、求特征值、求2范数、lu分解、最简阶梯阵化简等。计算过程中,矩阵的输入方式与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.2矩阵相乘输入a=1 2 3;4 5 6;7 8 9,b=1 4 7;8 5 2;3 9 6,按下“*”按钮,输出区显示计算结果如图4所示:图4 矩阵相乘输入的a、b矩阵必须满足前者的列数等于后者的行数,否则不能实现矩阵的乘法运算,出现错误提示如图5所示:图5 矩阵相乘错误提示2.3按元素乘(除)输入同2.2。按下“.*”按钮,输出区显示计算结果如图6所示:图6 矩阵按元素相乘输入的a、b矩阵必须是维数相同,否则不能实现按元素乘的运算。如输入不同维数的矩阵且进行按元素乘的运算,则会提示出错,提示信息同图3。2.4矩阵左(右)除输入a=1 2;3 5,b=1 2;5 7,按下“/l”按钮,输出区显示计算结果如图7所示:图7 矩阵左除输入的a、b矩阵必须满足行相等,否则出现错误提示如图8所示:图8 矩阵左除错误提示2.5矩阵转置(共轭与非共轭)输入a=2+,5;3,7-8,按下“a”(共轭转置)与“a.”按钮(非共轭转置),输出区分别显示计算结果如图9所示:图9 共轭转置(上)与非共轭转置(下)2.6行列式计算输入a=1 2 4;4 5 6;7 8 9,按下“det”按钮,输出区显示计算结果如图10所示:图10 方阵求行列式输入矩阵a必须为方阵,否则无法计算行列式,提示错误如图11所示:图11 求行列式 错误提示2.7矩阵求逆输入a=1 2 4;4 5 6;2 5 8,按下“inv”按钮,输出区显示计算结果如图12所示:图12 矩阵求逆本矩阵计算器求逆功能只针对非奇异方阵,如果输入矩阵a为奇异阵或非方阵,均会提示错误,具体见图13、图14:图13 输入为非方阵时的错误提示图14 输入为奇异阵时的错误提示2.8线性方程组求解输入a=1 2 3 ; 2 -5 3;3 -2 5 (系数矩阵),b=0 ; 5 ;9(常数项),按下“ax=b”按钮,输出区显示计算结果如图15所示:图15 线性方程组求解本部分输入限制较大,须详细说明。第一,系数矩阵必须是非奇异的方阵,否则方程组解不存在或不唯一,本计算器无法求解。第二,常数项必须与系数矩阵行数相同,否则也会出现错误提示。2.9矩阵求秩与最简行阶梯阵化简输入矩阵a=1 2 3;4 5 6;4 5 6,分别按下“r”、“rref”按钮,输出区显示计算结果如图16所示:最简行阶梯阵矩阵的秩图16 矩阵求秩与最简行阶梯阵化简 2.10平方、立方、与开方运算输入矩阵a=1 2 3;4 5 6;7 8 9,分别按下“2”、“3”、“sqrt”按钮,输出区显示计算结果如图17所示:平方运算开方运算立方运算图17 矩阵平方、立方、与开方运算2.11矩阵特征值输入矩阵a=1 2 3;4 5 6;7 8 9,按下“eig”按钮,输出区显示计算结果如图18所示:图18 矩阵特征值求解2.12 lu分解输入矩阵a=1 2 3;4 5 6;4 2 6,按下“lu”按钮,输出区显示计算结果如图19所示:图19 矩阵lu分解其中输出区前三行为矩阵l,后三行为矩阵u,即:l = 0.2500 -0.2500 1.0000 1.0000 0 0 1.0000 1.0000 0u = 4.0000 5.0000 6.0000 0 -3.0000 0 0 0 1.5000a=l*u.2.13求矩阵范数输入矩阵a=1 2 3;4 5 6;4 2 6,按下“norm”按钮,输出区显示计算结果如图20所示:图20 求矩阵范数由于设计者能力有限,本计算器默认计算矩阵的2范数,其他范数暂不能计算。2.14其他运算设计本部分的目的在于实现功能区中无法一步实现的计算。比如两矩阵的线性组合(,其中均为常数)、矩阵的高次幂()等。具体用法见图21:图21 其他矩阵运算实现运算实现运算图21 其他矩阵运算(2)利用“其他运算”模块对一个矩阵进行操作时,另一个矩阵不能没有输入,因此,假设在操作a矩阵(),此时b矩阵仍要赋值为空(),如图所示: 否则无法进行计算。附录(主要代码):%作者:石星宇%设计时间:2014年4月26日%设计目的:通过gui设计矩阵计算器,熟悉matlab中gui工具的使用和编程。% 加深对matlab gui中句柄控制变量的理解。% 巩固线性代数中矩阵的基本运算。%功能简介:实现一些基本的矩阵运算,包括对单个矩阵的运算以及对两个矩阵的运算。其中,对于两个矩阵的运算有:加、减、乘、除(左除、右除)、按元素乘、按元素除以及求解线性方程组;对于単个矩阵的运算有:转置(共轭与非共轭)、求逆、计算行列式、求秩、平方、立方、开方、求特征值、求2范数、lu分解、最简阶梯阵化简等。function varargout = 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, );if nargin & ischar(varargin1) gui_state.gui_callback = str2func(varargin1);end if nargout varargout1:nargout = gui_mainfcn(gui_state, varargin:);else gui_mainfcn(gui_state, varargin:);endfunction matrix_calculator_openingfcn(hobject, eventdata, handles, varargin)handles.output = hobject;guidata(hobject, handles);function varargout = matrix_calculator_outputfcn(hobject, eventdata, handles)varargout1 = handles.output;function matrix_a_callback(hobject, eventdata, handles)function matrix_a_createfcn(hobject, eventdata, handles)if ispc & isequal(get(hobject,backgroundcolor), get(0,defaultuicontrolbackgroundcolor) set(hobject,backgroundcolor,white);endfunction matrix_b_callback(hobject, eventdata, handles)function matrix_b_createfcn(hobject, eventdata, handles)if ispc & isequal(get(hobject,backgroundcolor), get(0,defaultuicontrolbackgroundcolor) set(hobject,backgroundcolor,white);endfunction add_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);b = eval(get(handles.matrix_b,string);ia ja=size(a);ib jb=size(b);if ia = ib | ja = jb |(ia = ib & ja = jb)%判断a、b是否满足相加条件 r=error.matrix dimensions must agree.; set(handles.answer,string,r) guidata(hobject, handles);else result = a + b ; r = num2str(result); set(handles.answer,string,r) guidata(hobject, handles);endfunction subtract_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);b = eval(get(handles.matrix_b,string);ia ja=size(a);ib jb=size(b);if ia = ib | ja = jb |(ia = ib & ja = jb)%判断a、b是否满足相减条件 r=error.matrix dimensions must agree.; set(handles.answer,string,r) guidata(hobject, handles);else result = a - b ; r = num2str(result); set(handles.answer,string,r) guidata(hobject, handles);endfunction times_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);b = eval(get(handles.matrix_b,string);ia ja=size(a);ib jb=size(b);if ja=ib %判断a、b是否满足相乘条件 r=error.inner matrix dimensions must agree.; set(handles.answer,string,r) guidata(hobject, handles);else result = a * b ; r = num2str(result); set(handles.answer,string,r) guidata(hobject, handles);end function l_divide_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);b = eval(get(handles.matrix_b,string);ia ja=size(a);ib jb=size(b);if ia=ib %判断a、b是否满足左除条件 r=error.matrix dimensions must agree.; set(handles.answer,string,r) guidata(hobject, handles);else result = a b ; r = num2str(result); set(handles.answer,string,r) guidata(hobject, handles);endfunction r_divide_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);b = eval(get(handles.matrix_b,string);ia ja=size(a);ib jb=size(b);if ia=ib %判断a、b是否满足右除条件 r=error.matrix dimensions must agree.; set(handles.answer,string,r) guidata(hobject, handles);else result = a / b ; r = num2str(result); set(handles.answer,string,r) guidata(hobject, handles);endfunction transposition_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);result = a ;r = num2str(result);set(handles.answer,string,r)guidata(hobject, handles);function determinant_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);ia ja=size(a);if ia =ja %判断a是否为方阵 r=error.matrix must be square.; set(handles.answer,string,r) guidata(hobject, handles);else result = det(a) ; r = num2str(result); set(handles.answer,string,r) guidata(hobject, handles);end function invertor_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);ia ja=size(a);if ia =ja %判断a是否为方阵 r=error.matrix must be square.; set(handles.answer,string,r) guidata(hobject, handles);else if det(a) = 0 %判断a是否为奇异阵 r=error.matrix is singular to working precision.; set(handles.answer,string,r) guidata(hobject, handles); else result = inv(a) ; r = num2str(result); set(handles.answer,string,r) guidata(hobject, handles); endendfunction rank_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); function square_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);ia ja=size(a);if ia =ja %判断a是否为方阵 r=error.inputs must be a scalar and a square matrix.; set(handles.answer,string,r) guidata(hobject, handles);else result = a2 ; r = num2str(result); set(handles.answer,string,r) guidata(hobject, handles);end function cube_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);ia ja=size(a);if ia =ja %判断a是否为方阵 r=error.inputs must be a scalar and a square matrix.; set(handles.answer,string,r) guidata(hobject, handles);else result = a3 ; r = num2str(result); set(handles.answer,string,r) guidata(hobject, handles);endfunction times2_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);function divede2_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); function transposition2_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);result = a. ;r = num2str(result);set(handles.answer,string,r)guidata(hobject, handles); function eigenvalue_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);ia ja=size(a);if ia =ja %判断a是否为方阵 r=error.matrix must be square.; set(handles.answer,string,r) guidata(hobject, handles);else result = eig(a) ; r = num2str(result); set(handles.answer,string,r) guidata(hobject, handles);endfunction solve_callback(hobject, eventdata, handles)a = eval(get(handles.matrix_a,string);b = eval(get(handles.matrix_b,string);ia ja=size(a);ib jb=size(b);if ia = ib r=error.; set(handles.answer,string,r) guidata(hobject, handles);else if ia =ja %判断a是否为方阵 r=error.matrix must be square.; set(handles.answer,string,r) guidata(hobject, handles); else if det(a) = 0 %判断a是否为奇异阵 r=error.matrix is singular to working precision.; set(handles.answer,string,r) guidata(hobject, handles); else result = ab ; r = num2str(result); set(handles.answer,string,r) guidata(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冰库租赁合同协议模板
- 卤肉加盟培训合同范本
- 合伙开餐饮投资协议书
- 企业画册订制合同范本
- 关于合同质保金写协议
- 共享宾馆售卖合同范本
- 创业补贴股东合同范本
- 厂区打草清理合同范本
- 公司销售提成合同范本
- 出租毛坯厨房合同范本
- 2024年中国金币集团有限公司招聘真题
- 2024-2025学年广东省广州市番禺区高二上学期教学质量监测数学试卷(解析版)
- 意大利介绍教学课件
- 重症医学专业医疗质量控制指标(2024 年版)解读
- 《尊敬老师主题班会》课件
- 肿瘤科出科试卷及答案
- 水库卧管施工方案设计
- 2026华能国际电力股份有限公司应届高校毕业生招聘笔试备考试题及答案解析
- 《五石之瓠》教学设计
- (正式版)DB42∕T 971-2014 《城镇桥梁沥青混凝土铺装层施工技术与验收规程》
- 圆圈正义读书汇报
评论
0/150
提交评论