MATLAB 实验一 MATLAB 数值计算试验报告说明:1 做试验前请先预习,并独立完成试验和试验报告。
2 报告解答方式:将MATLAB 执行命令和最后运行结果从命令窗口拷贝到每题的题目下面,请将报告解答部分的底纹设置为灰色,以便于批阅。
3 在页眉上写清报告名称,学生姓名,学号,专业以及班级。
3 报告以Word 文档书写。
文档命名方式: 学号+姓名+_(下划线)+试验几.doc 如:110400220张三_试验1.doc 4 试验报告doc 文档以附件形式发送到maya_email@ 。
凡文档命名不符合规范,或者发送方式不正确,不予登记。
5 每次试验报告的最后提交期限:下次试验课之前。
一 目的和要求1 熟练掌握MATLAB 变量的使用2 熟练掌握矩阵的创建3 熟练掌握MATLAB 的矩阵和数组的运算4 使用元胞数组和结构数组二 试验内容1 创建矩阵(必做)1.1使用直接输入,from:step:to ,linspace ,logspace 等方式创建矩阵。
1.2 输入矩阵1234246836912a ⎛⎫⎪= ⎪ ⎪⎝⎭1.2-1)分别使用全下标和单下标达方式取出元素“8”>>a=[1 2 3 4;2 4 6 8;3 6 9 12]>> a(2,4) %全下标方式 >> a(11) % 单下标方式1.2-2)分别用不同的方式从矩阵a 中取出子矩阵⎥⎦⎤⎢⎣⎡1286432%方法一:全下标方式 a([2,3],[1 2 4])%方法二:单下标方式 a([2 5 11;3 6 12])% 方法三:利用逻辑向量 l1=logical([0 1 1])l2=logical([1 1 0 1]) a(l1,l2)1.2-3)分别写出以下的执行结果:a ( :, 3 ) a (:,end) a (:, 2 : 3) a ([1 3], : )a (:) a (2 : 3) a([2 3 4])本题解答略,希望大家熟练掌握数组运算中 : end 的用法以及 全下标,单下标等方式2 矩阵的运算(必做)2.1使用format 命令,将 pi 分别用short 和long 格式显示其值。
>> format short >> pi ans = 3.1416 >> format long >> pi ans =3.141592653589792.2 设3x =, 4v =。
利用MA TLAB 分别计算下面的表达式::1) 22log()x v + 2)(2)x v ->> x=3; >> v=4;>> log(x^2+v^2)ans =3.21887582486820>> sqrt(x-3)/(x-2*v)^2 %此处,注意 / 和 \ 的使用区别,有同学混淆了 ans = 02.3 计算函数)4sin(1110)(22t ezt f t--=的值,其中t 的范围从0到pi ,步长0.1pi ;Z 为0.707。
)(1t f 为0)(1≥t f 的部分,计算)(1t f 的值。
t=0:0.1*pi:pi;z=0.707;f=10*exp(-2*t).*sin(4*t)/sqrt(1-z^2) %或f=10/sqrt(1-z^2)*exp(-2*t).*sin(4*t)l=(f>=0); % 关系运算,返回l 为逻辑向量 f1=f(l) % 利用逻辑向量l 取出f 中满足要求的元素%也可以用此指令代替:% li=find(f>0) %找出大于0元素的下标 % f1=f(li) ;2.4 设A=[1 2 1; 2 4 2; 2 1 1]; B=[3 1 2; 1 2 2; 3 1 4]; C=A+i*B. 利用MATLAB 观察下列表达式的结果:1) C ’ 和 C .’ 2) A ’ 和 A .’ 3)A*B 和A .*B (注意比较’ 和.’的区别)求解过程略。
注意区别:’ 是共轭转置,.’是非共轭转置。
* 是矩阵乘,.*是数组乘。
2.5利用MATLAB 求解线性方程组。
(思考:可以用几种方法实现)⎪⎩⎪⎨⎧=+=++=++42032153y x z y x z y x a=[1 3 1;2 1 3; 1 1 0]b=[15 20 4]' %注意符号 ' ,也可以写成b=[15;20;4], 注意符号 ;漏写则不是列向量 a\b %此处注意 / 和\ 的区别。
%解法二:a=[1 3 1;2 1 3; 1 1 0] b=[15 20 4]'inv(a)*b %此处,注意顺序,有同学写b*inv(a) 思考:错误在哪里?%解法三a=[1 3 1;2 1 3; 1 1 0] b=[15 20 4]'a^-1*b% 此题考用数值方法求解方程组。
采用符号方法,解题如下: eq1=sym('x+3*y+z=15'); eq2=sym('2*x+y+3*z=20'); eq3=sym('x+y=4');[x,y,z]=solve(eq1,eq2,eq3)2.6 分别创建两个3*3的矩阵A=round(10*rand(3)) ,B=round(20*rand(3))-10,利用MATLAB 求BA AB1-。
>> A=round(10*rand(3)),B=round(20*rand(3))-10 A =10 5 5 2 9 0 6 8 8 B =-1 8 -2 2 5 96 -6 8>> det(A*inv(B))*det(A)/det(B) %或det(A/B)*det(A)/det(B)% 或 det(A*B^(-1))*det(A)/det(B) 此题注意右除 / 和左除 \ 区别,有同学混淆。
ans =2.342773844231574 多维数组创建下面的矩阵⎥⎦⎤⎢⎣⎡=4321A ,⎥⎦⎤⎢⎣⎡=14131211B ,⎥⎦⎤⎢⎣⎡=24232221C 4.1将它们合并为一个322⨯⨯的多维数组 ABC A=[1 2;3 4] B=[11 12;13 14] C=[5 6;7 8] ABC(:,:,1)=A; ABC(:,:,2)=B;ABC(:,:,3)=C;或者:ABC=cat(3,A,B,C)4.2提取ABC 矩阵元素‘22’。
ABC(1,2,3) %下标 或者:ABC(11); %索引4.3将ABC 矩阵重排为3行,2列,2页 reshape(ABC,[3,2,2])4.4分别提取A,B,C 矩阵的第2列,组成一个32⨯数组ABC2 ABC2=cat(2,A(:,2),B(:,2),C(:,2)) 或者: ABC2=[A(:,2),B(:,2),C(:,2)]5 字符串5.1 创建字符串。
写出执行结果: str='hello matlab!', abs(str) double(str)ss1=strvcat('this','is','a','','book') ss2=char('this','is','a','','book') ss3=str2mat('this','is','a','','book') 6元胞数组和结构数组的使用学生信息存放在下列的表格中6.1 创建元胞数组1)将每个学生的姓名以字符串形式存储,并将所有的字符串存入一个元胞数组name={'Mike';'Nancy';'Emily'}2)将每个学生的学号以字符串形式存储,并将所有的字符串存入一个字符矩阵id=['1001';'1002';'1003']3)将学生的所有成绩存放在一个二维数组中score=[67,83,90;70 78 86;85,80,92]4)将1)2) 3)中创建的数组合并到一个元胞数组中stuCell={name,id,score}5)从4)中创建的元胞中提取所有学生的数学成绩。
stuCell{3}(:,2)1创建结构数组,将表格信息保存在结构数组student中。
方法一:student=struct('name',{'Mike','Nancy','Emily'},'id',{'1001','1002','1003'},'score',{[67,83,90],[70,78, 86],[85,80,92]})思考:student=struct('name',{'Mike','Nancy','Emily'},'id',['1001','1002','1003'],'score',[[67,83,90],[70,78,8 6],[85,80,92]])显示结果是什么?错在哪里。
方法二:student(1)=struct('name','Mike','Id','1001','score',[67 83 90]);student(2)=struct('name','Nancy','Id','1002','score',[70 78 86]);student(3)=struct('name','Emily','Id','1003','score',[85 80 92])方法三:student(1).name=('Mike')student(1).id=’1001’student(1).score=[67 83 90]student(2).name=('Nancy')student(2).id=’1002’student(2).score=[70 78 86]student(3).name=('Emily')student(3).id=’1003’student(3).score=[85 80 92];2 用disp命令或者fprintf命令打印李四的成绩信息,显示格式如下:×××(姓名)的语文成绩:×××是: ×××方法一:fprintf('%s的语文成绩是%d\n',student(2).name,student(2).score(1));方法二:str=[student(2).name,'的语文成绩是:',num2str(student(2).score(1))]; disp(str)思考:str=[student(2).name,'的语文成绩是:', student(2).score(1)];disp(str)显示结果将是什么?。