武汉大学matlab期末课程作业Word格式.docx
《武汉大学matlab期末课程作业Word格式.docx》由会员分享,可在线阅读,更多相关《武汉大学matlab期末课程作业Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
7,8;
9]
S=[123;
456;
789]
S=[1,2,3;
4,5,6;
7,8,9]%整个命令在中文状态下输入
第二条S=[123;
789]能实现目的。
中文状态下逗号不是有效字符。
第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('
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运行程序如下:
formatlong;
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)));
)));
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('
),1)
),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吗?
为什么?
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是11,t1是110,T是11,F是00;
长度分别为1,10,1,0;
t1和t2是完全相等的。
t1产生的是0到pi之前间隔为pi/9的十个数值,t2产生的是0到pi之前等分间隔的十个数值,是等价的。
2.对于命令A=reshape(1:
18,3,6)产生的数组
A=
147101316
258111417
369121518
先请你用一条命令,使A数组中取值为2、4、8、16的元素都被重新赋值为NaN。
然后,再请你用一条命令,把A数组的第4、5两列元素都被重新赋值为Inf。
A=[147101316;
258111417;
369121518];
A([24816])=NaN;
A
A([101112131415])=Inf;
3.由命令rng('
default'
),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。
运行程序如下:
rng('
);
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.采用数值计算方法,画出
在
区间曲线,并计算
cumtrapz快捷,在精度要求不高处可用;
integral也可试。
巧用find。
x=eps:
0.01:
10;
z=sin(x)./x;
y=cumtrapz(x,z);
plot(x,y),gridon;
a=find(x==4.5);
y(a)
故
=1.6541
5.求函数
在区间
中的最小值点。
作图观察。
formatlong
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]),gridon,holdon
[t1,y1]=fminbnd(y,-5,5)
plot(t1,y1,'
r*'
故最小值点为(-1.285,-0.186)。
第5章
1.已知椭圆的长、短轴
,用“小红点线”画如下图所示的椭圆
参量
;
点的大小;
axisequal)
a=4;
b=2;
t=0:
pi/75:
2*pi;
plot(a*cos(t),b*sin(t),'
r.'
'
markersize'
15)
axisequal,xlabel('
x'
),ylabel('
y'
3.A,B,C三个城市上半年每个月的国民生产总值表p5.1。
试画出如图p5-3所示的三城市上半年每月生产总值的累计直方图。
bar(x,Y,'
style'
colormap(cool);
legend。
表p5.1各城市生产总值数据(单位:
亿元)
城市
1月
2月
3月
4月
5月
6月
170
120
180
200
190
220
B
100
110
C
70
50
80
95
图p5-3
X=[1;
2;
3;
4;
6];
Y=[17012070;
12010050;
18011080;
200180100;
19017095;
220180120];
bar(X,Y,'
stacked'
),colormap(cool),legend('
A'
B'
C'
2)
第6章
1.请分别写出用for和while循环语句计算
的程序。
此外,还请写出避免循环的数值、符号计算程序。
sum和“指数采用数组”配合;
tic,toc可用以记录计算所花的时间。
用for的写法:
tic;
fork=0:
1000000;
a=a+0.2^k;
end
a
t1=toc
用while的写法:
b=0;
k=0;
whilek<
=1000000
b=b+0.2^k;
k=k+1;
b
t2=toc
避免循环数值程序:
k=zeros(1,1000000);
d=0:
k=0.2.^d;
c=sum(k)
t3=toc
符号计算程序:
symsk
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)
图p6-1
图p6-2
编写程序如下:
function[Y]=rzy(N)
%rzy()则画出单位圆。
%rzy(N)中,N为大于2的自然数时,画正N边形,是非自然数时,报错。
%该程序编写人为饶梓耀
switchnargin
case0
N=1000;
t=0:
pi/N:
plot(cos(t),sin(t),'
r'
linewidth'
3),title('
Circle'
axisequal;
axisoff;
case1
ifN~=round(N)||N<
error('
输入N应为自然数'
elseifN==round(N)&
&
N>
2
2*pi/N:
3),title(['
Polygonwith'
int2str(N),'
edges'
]);
end
示例图如下