MATLAB实验二
MATLAB数据分析和符号计算
试验报告说明:
1 做试验前请先预习,并独立完成试验和试验报告。
2 报告解答方式:将MATLAB执行命令和最后运行结果从命令窗口拷贝到每题的题目下面,请将报告解答部分的底纹设置为灰色,以便于批阅。
3 在页眉上写清报告名称,学生姓名,学号,专业以及班级。
3 报告以Word文档书写。
文档命名方式: 学号+姓名+_(下划线)+试验几.doc 如:110400220张三_试验1.doc
4 试验报告doc文档以附件形式发送到maya_email@tom.com。凡文档命名不符合规范,或者发送方式不正确,不予登记。
一目的和要求
1熟悉MATLAB多项式和数据分析方法
2熟练掌握MATLAB符号表达式的创建
3熟练掌握符号表达式的代数运算
4掌握符号表达式的化简和替换
5熟练掌握符号微积分
6熟练掌握符号方程的求解
二试验内容
1元胞和结构数组
学生信息存放在下列的表格中
1.1 创建元胞数组
1.1-1将每个学生的姓名以字符串形式存储,并将所有的字符串存入一个元胞数组Name
>>Name={‘Mike’,’Nancy’,’Emily’};
1.1-2将每个学生的学号以字符串形式存储,并将所有的字符串存入一个字符矩阵Id
>>Id=['1001';'1002';'1003'];
1.1-3将学生的所有成绩存放在一个二维数组中Score
>> Score=[67 83 90;70 78 86;85 80 92];
1.1-4将步骤1)2)3)中创建的数组合并到一个元胞数组stuCell中
>> stuCell={Name,Id,Score};
1.1-5从步骤4)创建的元胞中提取所有学生的数学成绩。
>> stuCell{1,3}(:,2);
1.2 结构数组
1.2-1 创建结构数组,将表格信息保存在结构数组student中。
student=struct('Name',{{'Mike','Nancy','Emily'}},'Id',[1001 1002 1003],'Score',[67 83 90;70 78 86;85 80 92]);
1.2-2 从结构数组student提取Nancy的信息,并用disp命令或者fprintf命令打印Nancy的语文成绩信息,显示格式如下:
×××(姓名)的语文成绩:×××是: ×××
>>x1=[student.Name(2) student.Id(2) student.Score(2)];
>>fprintf('%s %s %d','student.Name(2)','的语文成绩是:',student.Score(2,1))
2 多项式运算(必做)
2.1 有2个多项式,
f
2.1.1 计算
>> a=[5 4 3 2 1];
>> b=[0 0 3 0 1];
>> c=conv(a,b);
>> syms x
>> C=sym('15*x^6+12*x^5+14*x^4+10*x^3+6*x^2+2*x+1');
2.1.2计算的根
>> r=roots(c);
2.1.3 当时,计算的值.
>> x=5;
>> polyval(c,x);
2.1.4 计算的商式和余式.
>> a=[5 4 3 2 1];
>> b=[3 0 1];
>> [p,r]=deconv(a,b);
2.2 多项式插值。
下表是一个标准大气压下的蒸汽数据,用于分析温度和内能之间的关系。使用线性插值法确定温度215度时的内能,以及内能为2600KJ/kg时的温度。
>> t=[100 150 200 250 300 400 500];
>> E=[2506.7 2582.8 2658.1 2733.7 2810.4 2967.9 2131.6];
>> E1=interp1(t,E,215);
2.3 多项式的拟合。已知:
X0=0:0.5:10;
Y0=[0,82,212,326,395,526,622,738,818,909,1029,1108,1186,1330,1411,1540,1612,1726,1822,1940,2044];
对上述数据进行多项式拟合,分别采用一阶,二阶,四阶进行拟合。
>> X0=0:0.5:10;
Y0=[0,82,212,326,395,526,622,738,818,909,1029,1108,1186,1330,1411,1540,1612,1726,1822,1940,2044];
>> p1=polyfit(X0,Y0,1);
>> P2=polyfit(X0,Y0,2);
>> P3=polyfit(X0,Y0,4);
3 数据分析(必做)
下表为5位学生的成绩表
3.1 用二维矩阵保存学生成绩信息
>> Score=[75 81 73;62 85 79;71 68 60;58 92 75;73 90 81];
3.2 统计每位学生的平均分和总分
>> mean(Score,2);
>> sum(Score,2);
3.3 统计每门课程的平均分和总分
>> mean(Score);
>> sum(Score);
3.4按照语文成绩的升序列对矩阵进行重新排序
>> [y,ind]=sortrows(Score,2);
3.5打印语文成绩最高分学生的三门课程的成绩信息: 显示格式如下:×的数学成绩:××分,语文成绩:××分物理成绩:××分
>> student=[1 75 81 73;2 62 85 79;3 71 68 60;4 58 92 75;5 73 90 81];
>> student=sortrows(student,3);
>> fprintf('%d %s %d %s %d %s %d',student(5),'的数学成绩是:',student(10),'语文成绩是:',student(15),'物理成绩是:',student(20))
4 创建符号表达式。(必做)
4.1 分别使用sym和syms命令创建符号表达式。
>> f=sym('a*x^3+b*x^2+c*x+d');
>> syms a b c d x
>> f=a*x^3+b*x^2+c*x+d;
4.2 使用findsym确定上题符号表达式f的自由变量以及第一自由变量。
>> findsym(f);
>> findsym(f,1);
4.3 执行下列语句,比较a1,a2,a3和a4的执行结果和数据类型。
>> a1=1/4+1/6
>> a2=sym(1/4+1/6)
>> a3=’1/4+1/6’
>> a4=eval('1/4+1/6')
>> a1=1/4+1/6
a1 =
0.4167
>> a2=sym(1/4+1/6)
a2 =
5/12
>> a3='1/4+1/6'
a3 =
1/4+1/6
>> a4=eval('1/4+1/6')
a4 =
0.4167
>> whos a1
Name Size Bytes Class Attributes
a1 1x1 8 double
>> whos a2
Name Size Bytes Class Attributes
a2 1x1 132 sym
>> whos a3
Name Size Bytes Class Attributes
a3 1x7 14 char
>> whos a4
Name Size Bytes Class Attributes
a4 1x1 8 double
5 置换操作—subs命令的应用(必做)。
5.1对于符号表达式,分别求解:
5.1.1
>> syms x
>> f=exp(-x);
>> x=0;
>> f1=subs(f);
5.1.2
>> x=1:20;
>> f2=subs(f);
>> digits;
>> vpa(f2);
5.2 对于符号表达式
5.2.1 用符号变量y替代sin(x)+cos(x)
>> syms a x
>> f=a*(sin(x)+cos(x));
>> f1=subs(f,'sin(x)+cos(x)','y');
5.2.2 求解当a=3, x=pi/3时,f的值。
>> a=3;
>> x=pi/3;
>> f2=subs(f);
6符号表达式的运算
6.1已知符号表达式,
6.1.1计算当时,的值。
>> syms x
>> f=1-sin(x)*sin(x);
>> x=1;
>> f1=subs(f);
6.1.2 求符合函数
>> compose(f,g,'z');
6.1.3 求的反函数
>> g1=finverse(g);
6.2 求极限:。
>> f1=sym('exp(-t)')
>>f2=sym('sin(x)')
>>f=f1*f2
>> limit(f,'t',inf)
6.3 求和:。
>> syms n
>> f=1/(2*n-1)^2;
>> int(f,'t',1,inf);
第二篇:matlab20xx实验3参考答案
MATLAB实验三
MATLAB计算可视化
试验报告说明:
1 做试验前请先预习,并独立完成试验和试验报告。
2 报告解答方式:将MATLAB执行命令和最后运行结果从命令窗口拷贝到每题的题目下面,请将报告解答部分的底纹设置为灰色,以便于批阅。
3 在页眉上写清报告名称,学生姓名,学号,专业以及班级。
3 报告以Word文档书写。
文档命名方式: 学号+姓名+_(下划线)+试验几.doc 如:110400220张三_试验1.doc
4 试验报告doc文档以附件形式发送到maya_email@tom.com。凡文档命名不符合规范,或者发送方式不正确,不予登记。
一目的和要求
(1)熟练掌握MATLAB二维曲线的绘制
(2)熟练掌握图形的修饰
(3)掌握三维图形的绘制
(4)熟练掌握各种特殊图形的绘制
(5)掌握句柄图形的概念
二内容和步骤
1 符号计算 (必做)
1.1 已知,求。(必做)
syms x y
f=(x^3*y-5*y)/(2*x^2+7)
g =diff(diff(f,x),y)
%有同学调用方式:>> f1=diff(f,2) ,要注意这种调用方法其实是对第一自由变量x求2阶导数。
subs(g,x,1)
ans =
0.5309
1.2计算二重积分。(必做)
>> f=sym('sin(x)/x');
>> int(int(f,'x','y-pi',pi),'y',pi,2*pi) %注意对y积分,要明确指定积分变量‘y’
% 注意积分区间(a,b),参数的前后顺序
ans =
2
1.3解方程组: 。(必做)
>> S=solve('x^2+y^2=1','x*y=2',’x’,’y’);
>> xx=double(S.x),yy=double(S.y)
xx =
1.1180 - 0.8660i
1.1180 + 0.8660i
-1.1180 - 0.8660i
-1.1180 + 0.8660i
yy =
1.1180 + 0.8660i
1.1180 - 0.8660i
-1.1180 + 0.8660i
-1.1180 - 0.8660i
1.4 求微分方程,当,时的解。(必做)
>>rs=dsolve('D2y+2*Dy+2*y=0','y(0)=0,Dy(0)=1')
2 绘制二维曲线(必做)(说明:绘图题需在报告中粘贴图形结果。)
查阅stem绘图指令,利用stem绘制复指数序列(其中,间隔)的相关图形,要求:(1)把窗口分成2行2列。(2)左上窗口绘制复指数序列的实部波形,窗口右上角绘制复指数序列的虚部波形,左下角绘制复指数序列的幅度波形,右下角绘制窗口的相位波形。要求每个子图标注标题,X,Y轴说明。要求显示网格。
% 复指数序列程序
n=0:0.1:10;
alpha=j*pi/4;
x=2.^n.*exp(alpha*n);
real_x=real(x); % 实部
img_x=imag(x); % 虚部
mag_x=abs(x); % 幅值
phase_x=(180/pi)*angle(x); % 相角,转为角度
subplot(2,2,1)
stem(n,real_x);title('实数部分');xlabel('n');ylabel('real');
grid on
subplot(2,2,2)
stem(n,img_x);title('虚数部分');xlabel('n');ylabel('imag');
grid on
subplot(2,2,3)
stem(n,mag_x);title('幅度');xlabel('n');ylabel('abs');
grid on
subplot(2,2,4)
stem(n,phase_x);title('相位');xlabel('n');ylabel('phase');
grid on
3 绘制多条曲线(必做)
在同一图形窗口绘制。利用plot绘图指令绘图命令。
(1) 在窗口上部绘制正弦信号,。要求曲线为黑色实线。
(2) 使用hold on命令在同一窗口重叠绘制信号,。要求曲线线型为红色点划线。
(3) X轴标注“时间t”, y轴标注“”,标题为“正弦/指数序列”。
(4) 使用legend命令在图的右上角标注两条曲线的图例。
(5) 使用gtext交互式图形命令,分别标注曲线和。
% 绘制多条曲线
t=0:0.1:4*pi;
x=sin(0.5*pi.*t+pi/4);
plot(t,x,'k-');
title('正弦信号');
xlabel('时间t');
ylabel('x(t)');
hold on
g=x.*(0.5.^t);
% 注意 :有同学用g=pow2(x,-t) , pow2(F,E )函数要求输入参数F是实数,E是整数,计算时自动将其转为整数。故本题不宜采用。
plot(t,g,'r-.')
title('指数序列');
xlabel('序列t');
ylabel('g(n)');
%添加图例
legend('sin(0.5*\pi*t+\pi.4)','x(t)*0.5^t',1)
% gtext标注曲线
gtext('sin(0.5*\pi*t+\pi.4)');
gtext('x(t)*0.5^t');
4 句柄的学习
(1)获取图形句柄:(必做)
1)显示并获取上图(题2)的标题句柄。
% 方法一:通过title的上级gca找到title的句柄
h_axis=gca; %获取坐标轴句柄
h_title=get(gca,'title') %获取标题属性,找到title句柄
% 方法二:在生成标题对象时直接返回句柄
p=title('指数序列')
% 方法三:用findobj,通过属性值找标题句柄
h_title=findobj(h_fig,'string','正弦/指数序列')
(2)设置图形对象属性:(必做)
1)利用set 命令设置图形标题的颜色为蓝色,字体大小14。
set(h_title,'color','blue','fontsize',14)
2)使用图形窗口功能。选择菜单“Edit”---“Figure Properties”打开图形属性窗口(或直接在命令窗口输入命令:propedit(gcf)直接打开图形属性窗口)。在图形属性窗口中,修改曲线的颜色和线条宽度。(必做)
(本题解答略)
3)使用set命令实现3-2)题的设置。(选做)
% 通过findobj找对象句柄
h=findobj('linestyle','-.') %返回线型是 -. 的对象的句柄
set(h,'color','m','linewidth',5)
%生成图形对象时返回句柄
h_line2=plot(t,g,'r-.')
set(h_line2,'color','green','linewidth',2)
4) 分别采用set命令和图形属性窗口重新设置Y轴的刻度令其为[-1 -0.5 0 0.5 1](选做)
set(gca,'ytick',[-1 -0.5 0 0.5 1])
通过本题希望大家理解图形对象和句柄的概念。句柄是图形对象的标识,通过这个标识,我们可以找到这个对象,并通过set函数对对象的属性进行任意的修改。当然我们已可以在图形对象的属性窗口中直接修改
5 绘制三维曲线(必做)
1. 绘制曲线的网线图。 ,要求:
(1)设置标题和x,y,z轴说明。(必做)
(2)选择色图,并显示色图。(必做)
(3)分别对图形区域进行镂空和裁剪 (选作)
(4)改变视点,分别察看图形:1)az=-37.5,el=30 2)az=0,el=90 (必做)
(1)
[xx,yy]=meshgrid([-3:0.1:3]);
zz=4.*xx.*exp(-xx.^2-yy.^2);
mesh(xx,yy,zz);
title('z=4xye^{-(x^{2}+y^{2})}曲面');
xlabel('X');
ylabel('Y');
zlabel('Z');
(2)
colormap hot % 指定hot色图
colorbar % 显示色图
(3)
%%镂空
ind=find((xx<0)&(xx>-2)&(yy<0)&(yy>-2)); % 找镂空区间数组下标
zz(ind)=nan; %设置为nan,实现镂空
mesh(xx,yy,zz);
%%裁减
ind=find((xx<0)&(xx>-2)&(yy<0)&(yy>-2));
zz(ind)=0; %设置为0,实现裁减
mesh(xx,yy,zz);
(4)
view(0,90) %改变视点
本题存在的问题:
1 理清三维作图的一般顺序。尤其是理解meshgrid函数产生二维平面栅格点阵的作用。
2 注意几个函数的区别:Colormap命令用于指定色图,colorbar命令用于显示色图。
3 有同学使用peaks函数,注意该函数用于产生特定函数曲面的数据,供测试。