(完整版)武汉大学matlab期末课程作业

(完整版)武汉大学matlab期末课程作业

2023年7月26日发(作者:)

“MATLAB及其应用”课程作业

院系:

姓名:

学号:

联系方式:

第1章

1. 请指出如下5个变量名中,哪些是合法的?

abcd-2 xyz_3 3chan a变量 ABCDefgh

答:xyz_3,ABCDefgh是合法的。

2. 在命令窗中,运行命令a=sqrt(2)。然后请回答以下问题:计算结果a是精准的2吗?该计算结果只是5位有效数字精度的2近似吗?请在命令窗中,显示出具有最多位有效数字的2近似值?再请恢复MATLAB数值结果显示的默认设置。

答:不是精确的2。该计算结果只是5位有效数字精度的2近似。

3. 命令clear, clf, clc各有什么用处?

答:clear可以清除matlab工作空间中保持的变量。clf可以清除图形窗。clc清除命令窗中显示内容。

1234. 想要在MATLAB中产生二维数组S456,下面哪些命令能实现目的?

789S=[1,2,3;4,5,6;7,8;9]

S=[1 2 3;4 5 6;7 8 9]

S=[1,2,3;4,5,6;7,8,9] %整个命令在中文状态下输入

答:第二条S=[1 2 3;4 5 6;7 8 9]能实现目的。中文状态下逗号不是有效字符。

第2章

1.说出以下四条命令产生的结果各属于哪种数据类型,是“双精度”对象,还是“符号”对象?

3/7+0.1, sym(3/7+0.1), vpa(sym(3/7+0.1),4), vpa(sym(3/7+0.1))

答:3/7+0.1结果是双精度。sym(3/7+0.1)结果是符号。vpa(sym(3/7+0.1),4)结果是符号。vpa(sym(3/7+0.1))结果是符号。

过程如图:

2.已知a1=sin(sym(pi/4)+exp(sym(0.7)+sym(pi/3)))产生精准符号数字,请回答:以下产生的各种符号数哪些是精准的?若不精准,误差又是多少?能说出产生误差的原因吗?

a2=sin(sym(pi/4)+exp(sym(0.7))*exp(sym(pi/3)))

a3=sin(sym('pi/4')+exp(sym('0.7'))*exp(sym('pi/3')))

a4=sin(sym('pi/4')+exp(sym('0.7+pi/3')))

a5=sin(sym(pi/4)+exp(sym(0.7+pi/3)))

a6=sin(sym(pi/4)+sym(exp(0.7+pi/3)))

a7=sin(sym(pi/4+exp(0.7+pi/3)))

a8=sym(sin(pi/4+exp(0.7+pi/3)))

(提示:可用vpa观察误差;注意数位的设置)。

答:matlab运行程序如下:

format long;

a1=sin(sym(pi/4)+exp(sym(0.7)+sym(pi/3)));

a2=sin(sym(pi/4)+exp(sym(0.7))*exp(sym(pi/3)));

a3=sin(sym('pi/4')+exp(sym('0.7'))*exp(sym('pi/3'))); a4=sin(sym('pi/4')+exp(sym('0.7+pi/3')));

a5=sin(sym(pi/4)+exp(sym(0.7+pi/3)));

a6=sin(sym(pi/4)+sym(exp(0.7+pi/3)));

a7=sin(sym(pi/4+exp(0.7+pi/3)));

a8=sym(sin(pi/4+exp(0.7+pi/3)));

b2=vpa(a1-a2,40)

b3=vpa(a1-a3,40)

b4=vpa(a1-a4,40)

b5=vpa(a1-a5,40)

b6=vpa(a1-a6,40)

b7=vpa(a1-a7,40)

b8=vpa(a1-a8,40)

观察可知,只有a2是精准的。这是由sym('Num')和sym(Num)的区别带来的。前者以字符串的形式传给符号运算内核,可以保留完整的精度;而后者经过浮点运算后再转换为符号类型,存在精度损失。

3.在不加专门指定的情况下,以下符号表达式中的哪一个变量被认为是独立自由变量。

sym('sin(w*t)') , sym('a*exp(-X)' ) , sym('z*exp(j*th)')

答:运行程序如下

clear

symvar(sym('sin(w*t)') ,1)

symvar(sym('a*exp(-X)' ) ,1)

symvar(sym('z*exp(j*th)') ,1)

可知分别为w,a,z。

第3章

1. 请读者先运行以下命令

a=0;b=pi;

t1=a:pi/9:pi;

t2=linspace(a,b,10);

T=t1*t2';

F=find(T<0);

然后,请回答变量a、t1、T、F的维度、规模、长度分别是多少?t1完全等于t2吗?为什么?

答:运行程序如下

clear

a=0;

b=pi;

t1=a:pi/9:pi;

t2=linspace(a,b,10);

T=t1*t2';

F=find(T<0);

a1=ndims(a),a2=ndims(t1),a3=ndims(T),a4=ndims(F)

b1=size(a),b2=size(t1),b3=size(T),b4=size(F)

c1=length(a),c2=length(t1),c3=length(T),c4=length(F)

可知,维度都是2维;规模a是1 1,t1是1 10,T是1 1,F是0 0;长度分别为1,10,1,0;t1和t2是完全相等的。t1产生的是0到pi之前间隔为pi/9的十个数值,t2产生的是0到pi之前等分间隔的十个数值,是等价的。

2. 对于命令A=reshape(1:18,3,6)产生的数组 A =

1 4 7 10 13 16

2 5 8 11 14 17

3 6 9 12 15 18

先请你用一条命令,使A数组中取值为2、4、8、16的元素都被重新赋值为NaN。然后,再请你用一条命令,把A数组的第4、5两列元素都被重新赋值为Inf。

答:运行程序如下

A=[1 4 7 10 13 16;

2 5 8 11 14 17;

3 6 9 12 15 18];

A([2 4 8 16])=NaN;

A

A([10 11 12 13 14 15])=Inf;

A

3. 由命令rng('default'),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。

答:运行程序如下:

rng('default');

A=rand(3,5);

B=(A>0.5)

si=find(B)

[r,c]=find(B) 可知,单下标为1,2,4,5,8,9,10,12,13,15;

双下标为(1,1)(2,1)(1,2)(2,2)(2,3)(3,3)(1,4)(3,4)(1,5)(3,5)。

第4章

2. 采用数值计算方法,画出y(x)x0sint并计算y(4.5)。(提dt在[0, 10]区间曲线,t示:cumtrapz快捷,在精度要求不高处可用;integral也可试。巧用find。)

答:运行程序如下

x=eps:0.01:10;

z=sin(x)./x;

y=cumtrapz(x,z);

plot(x,y),grid on;

a=find(x==4.5);

y(a)

故y(4.5)=1.6541

5. 求函数f(t)(sin5t)2e0.06t1.5tcos2t1.8t0.5在区间[5,5]中的最小值点。(提示:作图观察。)

答:运行程序如下:

format long

t=-5:0.00001:5;

y=@(t)(sin(5*t))^2*exp(0.06*t^2)-1.5*t*cos(2*t)+1.8*abs(t+0.5);

ezplot(y,[-5,5]),grid on,hold on

[t1,y1]=fminbnd(y,-5,5)

plot(t1,y1,'r*')

2

故最小值点为(-1.285,-0.186)。 第5章

1. 已知椭圆的长、短轴a4,b2,用“小红点线”画如下图所示的椭圆(提示:参量t;点的大小;axis equal)

3xacost。ybsint210y-1-2-3-4-3-2-10x1234

答:运行程序如下:

a=4;b=2;

t=0:pi/75:2*pi;

plot(a*cos(t),b*sin(t),'r.','markersize',15)

axis equal,xlabel('x'),ylabel('y');

3. A,B,C三个城市上半年每个月的国民生产总值表p5.1。试画出如图p5-3所示的三城市上半年每月生产总值的累计直方图。(提示:bar(x,Y,'style'); colormap(cool); legend。)

表p5.1 各城市生产总值数据(单位:亿元)

城市

A

B

C

1月

170

120

70

6001000

ABC2月

120

100

50

3月

180

110

80

4月

200

180

100

5月

190

170

95

6月

220

180

120

123456

图 p5-3

运行程序如下:

X=[1;2;3;4;5;6];

Y=[170 120 70;120 100 50;180 110 80;200 180 100;190 170 95;220 180 120];

bar(X,Y,'stacked'),colormap(cool),legend('A','B','C',2)

第6章

10000001. 请分别写出用for 和while 循环语句计算K0.2i0i10.20.220.21000000的程序。此外,还请写出避免循环的数值、符号计算程序。(提示:sum和“指数采用数组”配合; tic, toc可用以记录计算所花的时间。)

答:用for的写法:

tic;a=0;

for k=0:1000000;

a=a+0.2^k;

end

a

t1=toc

用while的写法:

tic;b=0;k=0;

while k<=1000000

b=b+0.2^k;

k=k+1;

end

b

t2=toc

避免循环数值程序:

tic;k=zeros(1,1000000);

d=0:1000000;

k=0.2.^d;

c=sum(k)

t3=toc

符号计算程序:

tic;

syms k

d=vpa(symsum(0.2^k,k,0,1000000))

t4=toc

3. 编写一个函数M文件,它的功能:没有输入量时,画出单位圆(见图p6-1);输入量是大于2的自然数N时,绘制正N边形,图名应反映显示多边形的真实边数(见图p6-2);输入量是“非自然数”时,给出“出错提示”。此外,函数M文件应有H1行、帮助说明和程序编写人姓名。(提示:nargin, error, int2str) Circle

图 p6-1

Polygon with 6 edges

图 p6-2

编写程序如下:

function [Y]=rzy(N)

%rzy()则画出单位圆。

%rzy(N)中,N为大于2的自然数时,画正N边形,是非自然数时,报错。

%该程序编写人为饶梓耀

switch nargin

case 0

N=1000;

t=0:pi/N:2*pi;

plot(cos(t),sin(t),'r','linewidth',3),title('Circle')

axis equal;axis off;

case 1

if N~=round(N)||N<0

error('输入N应为自然数');

elseif N==round(N)&&N>2 t=0:2*pi/N:2*pi;

plot(cos(t),sin(t),'r','linewidth',3),title(['Polygon with

',int2str(N),' edges']);

axis equal;axis off;

end

end

示例图如下

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690366770a338964.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信