武漢大學matlab期末課程作業(yè).doc
“MATLAB及其應(yīng)用”課程作業(yè)
院系:
姓名:
學號:
聯(lián)系方式:
第1章
1. 請指出如下5個變量名中,哪些是合法的?
abcd-2 xyz_3 3chan a變量 ABCDefgh
答:xyz_3,ABCDefgh是合法的。
2. 在命令窗中,運行命令a=sqrt(2)。然后請回答以下問題:計算結(jié)果a是精準的嗎?該計算結(jié)果只是5位有效數(shù)字精度的近似嗎?請在命令窗中,顯示出具有最多位有效數(shù)字的近似值?再請恢復MATLAB數(shù)值結(jié)果顯示的默認設(shè)置。
答:不是精確的。該計算結(jié)果只是5位有效數(shù)字精度的近似。
3. 命令clear, clf, clc各有什么用處?
答:clear可以清除matlab工作空間中保持的變量。clf可以清除圖形窗。clc清除命令窗中顯示內(nèi)容。
4. 想要在MATLAB中產(chǎn)生二維數(shù)組,下面哪些命令能實現(xiàn)目的?
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] %整個命令在中文狀態(tài)下輸入
答:第二條S=[1 2 3;4 5 6;7 8 9]能實現(xiàn)目的。中文狀態(tài)下逗號不是有效字符。
第2章
1. 說出以下四條命令產(chǎn)生的結(jié)果各屬于哪種數(shù)據(jù)類型,是“雙精度”對象,還是“符號”對象?
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結(jié)果是雙精度。sym(3/7+0.1)結(jié)果是符號。vpa(sym(3/7+0.1),4)結(jié)果是符號。vpa(sym(3/7+0.1))結(jié)果是符號。
過程如圖:
2. 已知a1=sin(sym(pi/4)+exp(sym(0.7)+sym(pi/3)))產(chǎn)生精準符號數(shù)字,請回答:以下產(chǎn)生的各種符號數(shù)哪些是精準的?若不精準,誤差又是多少?能說出產(chǎn)生誤差的原因嗎?
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觀察誤差;注意數(shù)位的設(shè)置)。
答: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)的區(qū)別帶來的。前者以字符串的形式傳給符號運算內(nèi)核,可以保留完整的精度;而后者經(jīng)過浮點運算后再轉(zhuǎn)換為符號類型,存在精度損失。
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的維度、規(guī)模、長度分別是多少?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維;規(guī)模a是1 1,t1是1 10,T是1 1,F(xiàn)是0 0;長度分別為1,10,1,0;t1和t2是完全相等的。t1產(chǎn)生的是0到pi之前間隔為pi/9的十個數(shù)值,t2產(chǎn)生的是0到pi之前等分間隔的十個數(shù)值,是等價的。
2. 對于命令A=reshape(1:18,3,6)產(chǎn)生的數(shù)組
A =
1 4 7 10 13 16
2 5 8 11 14 17
3 6 9 12 15 18
先請你用一條命令,使A數(shù)組中取值為2、4、8、16的元素都被重新賦值為NaN。然后,再請你用一條命令,把A數(shù)組的第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)生成二維數(shù)組A,試求該數(shù)組中所有大于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. 采用數(shù)值計算方法,畫出在區(qū)間曲線,并計算。(提示: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)
故=1.6541
5. 求函數(shù)在區(qū)間中的最小值點。(提示:作圖觀察。)
答:運行程序如下:
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*)
故最小值點為(-1.285,-0.186)。
第5章
1. 已知橢圓的長、短軸,用“小紅點線”畫如下圖所示的橢圓。(提示:參量;點的大?。籥xis equal)
答:運行程序如下:
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三個城市上半年每個月的國民生產(chǎn)總值表p5.1。試畫出如圖p5-3所示的三城市上半年每月生產(chǎn)總值的累計直方圖。(提示:bar(x,Y,style); colormap(cool); legend。)
表p5.1 各城市生產(chǎn)總值數(shù)據(jù)(單位:億元)
城市
1月
2月
3月
4月
5月
6月
A
170
120
180
200
190
220
B
120
100
110
180
170
180
C
70
50
80
100
95
120
圖 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章
1. 請分別寫出用for 和while 循環(huán)語句計算的程序。此外,還請寫出避免循環(huán)的數(shù)值、符號計算程序。(提示:sum和“指數(shù)采用數(shù)組”配合; 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
避免循環(huán)數(shù)值程序:
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. 編寫一個函數(shù)M文件,它的功能:沒有輸入量時,畫出單位圓(見圖p6-1);輸入量是大于2的自然數(shù)N時,繪制正N邊形,圖名應(yīng)反映顯示多邊形的真實邊數(shù)(見圖p6-2);輸入量是“非自然數(shù)”時,給出“出錯提示”。此外,函數(shù)M文件應(yīng)有H1行、幫助說明和程序編寫人姓名。(提示:nargin, error, int2str)
圖 p6-1
圖 p6-2
編寫程序如下:
function [Y]=rzy(N)
%rzy()則畫出單位圓。
%rzy(N)中,N為大于2的自然數(shù)時,畫正N邊形,是非自然數(shù)時,報錯。
%該程序編寫人為饒梓耀
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應(yīng)為自然數(shù));
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
示例圖如下
收藏
- 資源描述:
-
“MATLAB及其應(yīng)用”課程作業(yè)
院系:
姓名:
學號:
聯(lián)系方式:
第1章
1. 請指出如下5個變量名中,哪些是合法的?
abcd-2 xyz_3 3chan a變量 ABCDefgh
答:xyz_3,ABCDefgh是合法的。
2. 在命令窗中,運行命令a=sqrt(2)。然后請回答以下問題:計算結(jié)果a是精準的嗎?該計算結(jié)果只是5位有效數(shù)字精度的近似嗎?請在命令窗中,顯示出具有最多位有效數(shù)字的近似值?再請恢復MATLAB數(shù)值結(jié)果顯示的默認設(shè)置。
答:不是精確的。該計算結(jié)果只是5位有效數(shù)字精度的近似。
3. 命令clear, clf, clc各有什么用處?
答:clear可以清除matlab工作空間中保持的變量。clf可以清除圖形窗。clc清除命令窗中顯示內(nèi)容。
4. 想要在MATLAB中產(chǎn)生二維數(shù)組,下面哪些命令能實現(xiàn)目的?
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] %整個命令在中文狀態(tài)下輸入
答:第二條S=[1 2 3;4 5 6;7 8 9]能實現(xiàn)目的。中文狀態(tài)下逗號不是有效字符。
第2章
1. 說出以下四條命令產(chǎn)生的結(jié)果各屬于哪種數(shù)據(jù)類型,是“雙精度”對象,還是“符號”對象?
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結(jié)果是雙精度。sym(3/7+0.1)結(jié)果是符號。vpa(sym(3/7+0.1),4)結(jié)果是符號。vpa(sym(3/7+0.1))結(jié)果是符號。
過程如圖:
2. 已知a1=sin(sym(pi/4)+exp(sym(0.7)+sym(pi/3)))產(chǎn)生精準符號數(shù)字,請回答:以下產(chǎn)生的各種符號數(shù)哪些是精準的?若不精準,誤差又是多少?能說出產(chǎn)生誤差的原因嗎?
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觀察誤差;注意數(shù)位的設(shè)置)。
答: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)的區(qū)別帶來的。前者以字符串的形式傳給符號運算內(nèi)核,可以保留完整的精度;而后者經(jīng)過浮點運算后再轉(zhuǎn)換為符號類型,存在精度損失。
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的維度、規(guī)模、長度分別是多少?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維;規(guī)模a是1 1,t1是1 10,T是1 1,F(xiàn)是0 0;長度分別為1,10,1,0;t1和t2是完全相等的。t1產(chǎn)生的是0到pi之前間隔為pi/9的十個數(shù)值,t2產(chǎn)生的是0到pi之前等分間隔的十個數(shù)值,是等價的。
2. 對于命令A=reshape(1:18,3,6)產(chǎn)生的數(shù)組
A =
1 4 7 10 13 16
2 5 8 11 14 17
3 6 9 12 15 18
先請你用一條命令,使A數(shù)組中取值為2、4、8、16的元素都被重新賦值為NaN。然后,再請你用一條命令,把A數(shù)組的第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)生成二維數(shù)組A,試求該數(shù)組中所有大于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. 采用數(shù)值計算方法,畫出在區(qū)間曲線,并計算。(提示: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)
故=1.6541
5. 求函數(shù)在區(qū)間中的最小值點。(提示:作圖觀察。)
答:運行程序如下:
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*)
故最小值點為(-1.285,-0.186)。
第5章
1. 已知橢圓的長、短軸,用“小紅點線”畫如下圖所示的橢圓。(提示:參量;點的大小;axis equal)
答:運行程序如下:
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三個城市上半年每個月的國民生產(chǎn)總值表p5.1。試畫出如圖p5-3所示的三城市上半年每月生產(chǎn)總值的累計直方圖。(提示:bar(x,Y,style); colormap(cool); legend。)
表p5.1 各城市生產(chǎn)總值數(shù)據(jù)(單位:億元)
城市
1月
2月
3月
4月
5月
6月
A
170
120
180
200
190
220
B
120
100
110
180
170
180
C
70
50
80
100
95
120
圖 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章
1. 請分別寫出用for 和while 循環(huán)語句計算的程序。此外,還請寫出避免循環(huán)的數(shù)值、符號計算程序。(提示:sum和“指數(shù)采用數(shù)組”配合; 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
避免循環(huán)數(shù)值程序:
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. 編寫一個函數(shù)M文件,它的功能:沒有輸入量時,畫出單位圓(見圖p6-1);輸入量是大于2的自然數(shù)N時,繪制正N邊形,圖名應(yīng)反映顯示多邊形的真實邊數(shù)(見圖p6-2);輸入量是“非自然數(shù)”時,給出“出錯提示”。此外,函數(shù)M文件應(yīng)有H1行、幫助說明和程序編寫人姓名。(提示:nargin, error, int2str)
圖 p6-1
圖 p6-2
編寫程序如下:
function [Y]=rzy(N)
%rzy()則畫出單位圓。
%rzy(N)中,N為大于2的自然數(shù)時,畫正N邊形,是非自然數(shù)時,報錯。
%該程序編寫人為饒梓耀
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應(yīng)為自然數(shù));
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
示例圖如下
展開閱讀全文