MATLAB实验程序
实验一
要求: 查看matlab 的版本
代码:version
结果:ans =
7.1.0.246 (R14) Service Pack 3
1.先求下列表达式的值,然后显示MATLAB 工作空间的使用情况并保存全部变量。
(1)z 1=2185sin 2e
+
z1=(2*sin(85*pi/180))/(1+exp(2))
z =
0.2375
(2)z 2=⎥⎦⎤⎢⎣⎡+=++545
.0-i 212其中),1ln(212x x x x=[2,1+2*i;-0.45,5]
x =
2.0000 1.0000 + 2.0000i
-0.4500 5.0000
>> z2=1/2*log(x+sqrt(1+x*x))
z2 =
0.7114 - 0.0253i 0.8968 + 0.3658i
0.2139 + 0.9343i 1.1541 - 0.0044i
(3)z 3=2
3.0ln )3.0sin(23.03.0a a e e a
a +++--,a=-3.0,-2.9,-2.8, …3.0 提示:用冒号表达式生成a 向量,求各点的函数值时用点乘计算。
a=[-3.0:0.1:3.0]
z3=1/2.*((exp(0.3.*a)-exp(-0.3.*a))).*sin(a+0.3)+log((0.3+a).*1/2)
(4)z 4=⎪⎩⎪⎨⎧<≤+-<≤-<≤32,12
,21,110,222t t t t t t t 其中t=0:0.5:2.5
提示:用逻辑表达式求分段函数值。
t=0:0.5:2.5
t =
0 0.5000 1.0000 1.5000 2.0000 2.5000
>> z4=t.^2.*(t>=0&t<1)+(t.^2-1).*(t>=1&t<2)+(t.^2-2*t+1).*(t>=2&t<3) z4 =
0 0.2500 0 1.2500 1.0000 2.2500
2.已知:A=
⎥
⎥
⎥
⎦
⎤
⎢
⎢
⎢
⎣
⎡
7
65
3
87
7
34
4
-
34
12
,B=
⎥
⎥
⎥
⎦
⎤
⎢
⎢
⎢
⎣
⎡
7
2
-
3
3
2
1
-
3
1
求下列表达式的值:
(1)A+6*B和A-B+I(其中I为单位矩阵) A=[12,34,-4;34,7,87;3,65,7]
A =
12 34 -4
34 7 87
3 65 7
>> B=[1,3,-1;2,0,3;3,-2,7]
B =
1 3 -1
2 0 3
3 -2 7
>> A+6*B
ans =
18 52 -10
46 7 105
21 53 49
>> I=eye(size(A))
I =
1 0 0
0 1 0
0 0 1
>> A-B+I
ans =
12 31 -3
32 8 84
0 67 1
(2)A*B和A.*B
A*B
ans =
68 44 62
309 -72 596
154 -5 241
>> A.*B
ans =
12 102 4
68 0 261
9 -130 49
(3)A^3和A.^3
A^3
ans =
37226 233824 48604
247370 149188 600766
78688 454142 118820
>> A.^3
ans =
1728 39304 -64
39304 343 658503
27 274625 343
(4)A/B和B\A
A/B
ans =
16.4000 -13.6000 7.6000
35.8000 -76.2000 50.2000
67.0000 -134.0000 68.0000
>> B/A
ans =
0.1027 -0.0062 -0.0069
0.0617 0.0403 -0.0366
0.0205 0.0855 -0.0507
(5)[A,B]和[A([1,3],:);B^2]
[A,B]
ans =
12 34 -4 1 3 -1
34 7 87 2 0 3
3 65 7 3 -2 7
>> [A([1,3],:);B^2]
ans =
12 34 -4
3 65 7
4 5 1
11 0 19
20 -5 40
3.设有矩阵A和B
A=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡2524
2322212019181716151413121110987654321,B=⎥⎥⎥⎥⎥
⎥⎦
⎤⎢⎢⎢⎢⎢⎢⎣⎡111340794-23096-171603 (1) 求它们的乘积C 。
A=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20;21 22 23 24 25]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
>> B=[3 0 6;17 -6 9;0 23 -4;9 7 0; 4 13 11]
B =
3 0 6
17 -6 9
0 23 -4
9 7 0
4 13 11
C=A*B
C =
93 150 67
258 335 177
423 520 287
588 705 397
753 890 507
(2) 将矩阵C 的左下角3×2子矩阵赋给D 。
(2)D=C([3,4,5],2:end)
D =
520 287
705 397
890 507
(3) 查看MATLAB 工作空间的使用情况。
4.完成下列操作:
(1)求[100,999]之间能被21整除的数的个数。
提示:先利用冒号表达式,再利用find 和length 函数。
A=100:999
P=rem(A,21)==0
Q=find(P)
>> length(Q)
ans =
43
(2)建立一个字符串向量,删除其中的大写字母。
提示:利用find 函数和空矩阵 。
ch='MmAaTtLlAaBb'
ch =
MmAaTtLlAaBb
>> k=find(ch>='A'&ch<='Z')
k =
1 3 5 7 9 11
ch(k)=[]
ch =
matlab
实验二、
1. 设有分块矩阵A=⎥⎦
⎤⎢⎣⎡⨯⨯⨯⨯23322333E S O R ,其中E 、R 、O 、S 分别为单位矩阵、随机矩阵、零矩阵和对角矩阵,试通过数值计算验证A=⎥⎦
⎤⎢⎣⎡+2E S O RS R 。
E=eye(3), R=rand([3,2]),O=zeros(2,3),S=diag([1,1]);A=[E,R;O,S]
E =
1 0 0
0 1 0
0 0 1
R =
0.9218 0.4057
0.7382 0.9355
0.1763 0.9169
O =
0 0 0
0 0 0
A =
1.0000 0 0 0.9218 0.4057
0 1.0000 0 0.7382 0.9355
0 0 1.0000 0.1763 0.9169
0 0 0 1.0000 0
0 0 0 0 1.0000
2.产生5阶希尔伯特矩阵H和5阶帕斯卡矩阵P,且求其行列式的值Hh
和Hp以及它们的条件数Th和Tp,判断哪个矩阵的性能更好。为什么?H=hilb(5),P=pascal(5)
H =
1.0000 0.5000 0.3333 0.2500 0.2000
0.5000 0.3333 0.2500 0.2000 0.1667
0.3333 0.2500 0.2000 0.1667 0.1429
0.2500 0.2000 0.1667 0.1429 0.1250
0.2000 0.1667 0.1429 0.1250 0.1111
P =
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
>> Hh=det(H),Pp=det(P)
Hh =
3.7493e-012
Pp =
1
>> Th=cond(H),Tp=cond(P)
Th =
4.7661e+005
Tp =
8.5175e+003
矩阵T 条件数比矩阵H 的条件数更接近1,因此,矩阵T 的性能要好于矩阵H 。
3. 建立一个5×5矩阵,求它的行列式值、迹、秩和范数。
A=[1 4 7 10 10;2 5 8 11 7;3 6 9 4 8;11 12 3 2 1;5 6 9 8 7]
A =
1 4 7 10 10
2 5 8 11 7
3 6 9
4 8
11 12 3 2 1
5 6 9 8 7
>> a1=det(A),a2=trace(A),a3=rank(A),a4=norm(A)
a1 =
5376
a2 =
24
a3 =
5
a4 =
32.3947
4. 已知A=⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡588-1252018629-
求A 的特征值及特征向量,并分析其数学意义。
A=[-29 6 18;20 5 12;-8 8 5]
A =
-29 6 18
20 5 12
-8 8 5
>> [V,D]=eig(A)
V =
0.7130 0.2803 0.2733
-0.6084 -0.7867 0.8725
0.3487 0.5501 0.4050
D =
-25.3169 0 0
0 -10.5182 0
0 0 16.8351
数学意义:求得的3个特征值是-25.3169、-10.5182、16.8351,各特征值对应的特征向量为V 的各列构成的向量。
5.
下面是一个线性方程组:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡52.067.095.06/15/14/15/14/13/14/13/12/1321x x x (1) 求方程的解。
A=[1/2 1/3 1/4;1/3 1/4 1/5;1/4 1/5 1/6]
A =
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
0.2500 0.2000 0.1667
B=[0.95;0.67;0.52]
B =
0.9500
0.6700
0.5200
x=inv(A)*B
x =
1.2000
0.6000
0.6000
(2)
将方程右边向量元素b 3改为0.53,再求解,并比较b 3的变化和解的相对
变化。
B=[0.95;0.67;0.53]
B =
0.9500
0.6700
0.5300
>> x=inv(A)*B
x =
3.0000
-6.6000
6.6000
(4) 计算系数矩阵A 的条件数并分析结论。
cond(A)
ans =
1.3533e+003
6.建立A 矩阵,试比较sqrtm(A)和sqrt(A),并分析它们的区别。 A=rand(3)
A =
0.4103 0.3529 0.1389
0.8936 0.8132 0.2028
0.0579 0.0099 0.1987
>> sqrtm(A)
ans =
0.4248 0.2963 0.1314
0.7418 0.7709 0.0873
0.0764 -0.0106 0.4354
>> sqrt(A)
ans =
0.6405 0.5940 0.3727
0.9453 0.9018 0.4503
0.2406 0.0993 0.4458
实验三、
1. 求分段函数的值。
其他503且0,1,65,6222<≤-≠<⎪⎩
⎪⎨⎧--+--+=x x x x x x x x x y
用if 语句实现,分别输出x=-5.0,-3.0,1.0,2.0,2.5,3.0,5.0时的y 值。
2. 输入一个百分制成绩,要求输出成绩等级A 、B 、C 、D 、E 。其中90分~100分为A ,80分~89分为B ,70分~79分为C ,60分~69分为D ,60分以下为E 。
要求:
(1) 分别用if 语句和switch 语句实现。
(2) 输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出
错信息。
用IF 语句:x=input('请输入X 的值:')
if x<=100&x>=90
disp('A');
elseif x>=80&x<=89
disp('B');
elseif x>=70&x<=79
disp('C');
elseif x>=60&x<=69
disp('D');
elseif x>=0&x<=59
disp('E');
else x<0&x>100
disp('输入有误');
end
运行结果:请输入X 的值:97
x =
97
A
请输入X的值:132
x =
132
ans =
输入有误:
用swich语句:x=input('请输入x的值:');
swich floor(x/10)
case(9)
disp('A');
case(8)
disp('B');
case(7)
disp('C');
case(6)
disp('D');
case num2cell(0:5)
disp('E');
otherwise
disp('输入有误:');
end
3.硅谷公司员工的工资计算方法方法如下:
(1)工作时数超过120小时者,超过部分加发15%。
(2)工作时数低于60小时者,扣发700元。
(3)其余按每小时84小时计发。
试编程按输入的工号和该号员工的工时数,计算应付工资。
n=input('请输入工号:')
x=input('请输入该员工的工时数:')
if x>=120
y=84.*x+(x-120)*84*0.15;
elseif x<120&x>=60
y=84*x;
else x<60
y=84*x-700;
end
disp([n,'请输入该员工的工资:',x]);
y
请输入工号:001
n =
1
请输入该员工的工时数:100
x =
100
请输入员工的工资:d
y =
8400
请输入工号:002
n =
2
请输入该员工的工时数:59
x =
59
请输入员工的工资:;
y =
4256
请输入工号:003
n =
3
请输入该员工的工时数:122
x =
122
请输入员工的工资:z
y =
1.0273e+004
4.设计程序,完成两位数的加、减、乘、除四则运算,即产生两个两位随机整
数,再输入一个运算符号,做相应的运算,并显示相应的结果。
程序如下:
clear all
close all
clc
a=input('请输入第一个数¸öÊý');
b=input('请输入第二数¸öÊý');
c=input('请输入第运算符,'s');
if c=='+'
s=a+b;
else
if c=='-'
s=a-b;
else
if c=='*'
s=a*b;
else
if c=='/'
s=a/b;
else
disp('error');
end
end
end
end
disp(s);
请输入第一个数68
请输入第二5
请输入运算符/
1.0462
请输入第一个数2
请输入第二个数3
请输入运算符-
-1
>>
请输入第一个数2
请输入第二个数3
请输入运算符*
6
请输入第一个数2
请输入第二个数3
请输入运算符+
5
5.建立5×6矩阵,要求输出矩阵第n行元素。当n值超过矩阵的行数时,自
动转为输出矩阵最后一行元素,并给出出错信息。
程序如下:
clear all
close all
clc
A=1:30;
B=reshape(A,5,6);
n=input('input');
try
disp(B(n,:))
catch
disp(B(5,:))
end
lasterr
结果:
input4
4 9 14 19 24 29
input8
5 10 15 20 25 30
Attempted to access B(8,:); index out of bounds because size(B)=[5,6].
实验四、
例题
例题4.7
程序如下:
for m=100:999
m1=fix(m/100);
m2=rem(fix(m/10),10);
m3=rem(m,10);
if m==m1*m1*m1+m2*m2*m2+m3*m3*m3
disp(m)
end
end
输出结果为:
153
370
371
407
例4.8
程序如下:
y=0;n=100;
for i=1:n
y=y+1/i/i;
end
y
输出结果为:
y =
1.6350
例4.9
程序如下:
a=0;b=3*pi;
n=1000;h=(b-a)/n;
x=a;s=0;
f0=exp(-0.5*x)*sin(x+pi/6);
for i=1:n
x=x+h;
f1=exp(-0.5*x)*sin(x+pi/6);
s=s+(f0+f1)*h/2;
f0=f1;
end
s
运行结果:
0.9008
方法二:
a=0;b=3*pi;
n=1000;h=(b-a)/n;
x=a:h:b;
f=exp(-0.5*x)*sin(x+pi/6);
for i=1:n
s(i)=(f(i)+f(i+1))*h/2;
end
s=sum(s)
例4.10
程序如下:
s=0;
a=[12,13,14;15,16,17;18,19,20;21,22,23]; for k=a
s=s+k;
end
disp(s);
运行结果:
39
48
57
66
例4.11
程序如下:
sum=0;
n=0;
x=input('Enter a number(end in 0):'); while x~=0
sum=sum+x;
n=n+1;
x=input('Enter a number(end in 0):'); end
if(n>0)
sum
mean=sum/n
end
运行结果:
Enter a number(end in 0):67
Enter a number(end in 0):89
Enter a number(end in 0):93
Enter a number(end in 0):70
Enter a number(end in 0):0
319
mean =
79.7500
例4.12
程序如下:
X=input('Enter X:');
E=zeros(size(X));
F=eye(size(X));
n=1;
while norm(F,1)>0
E=E+F;
F=F*X/n;
n=n+1;
end
E
expm(X)
结果如下:
Enter X:[0.5,2,0;1,-1,-0.5;0.9,1,0.75]
E =
2.6126 2.0579 -0.6376
0.7420 0.7504 -0.5942
2.5678 2.3359 1.5549
ans =
2.6126 2.0579 -0.6376
0.7420 0.7504 -0.5942
2.5678 2.3359 1.5549
例4.13
程序如下:
for n=100:200
if rem(n,21)~=0
continue
end
break
end
n
运行结果:
n =
105
例4.14
程序如下:
for m=1:500
s=0;
for k=1:m/2
if rem(m,k)==0
s=s+k;
end
end
if m==s
disp(m);
end
end
运行结果:
n =
105
6
28
496
例4.15
程序如下:
m=input('m=');
p=1:m;
p(1)=0;
for i=2:sqrt(m)
for j=2*i:i:m
p(j)=0;
end
end
n=find(p~=0);
p(n)
运行结果:
m=20
ans =
2 3 5 7 11 13 17 19
1.根据+=22
1
16π2221...3121n +++ ,求π的近似值。当n 分别取100、1000、10000时,结果是多少?
要求:分别用循环结构和向量运算(使用sum 函数)来实现。
1. 程序如下:
n=input('Enter n:');
sum=0;
i=1;
while (i d=1/(i^2); sum=sum+d; i=i+1; end p=sqrt(6*sum); disp(p) disp(abs(p-pi)) 0.0096 Enter n:1000 3.1406 9.5555e-004 运行结果: Enter n:100 3.1320 0.0096 Enter n:1000 3.1406 9.5555e-004 Enter n:10000 3.1415 9.5499e-005 2.根据y=1+1 21...715131+++++n ,求: (1)y<3时的最大值。 (2)与(1)的n 值对应的y 值。 程序如下: clear all n=1; y=0; while (y<3) x=1/(2*n-1); n=1+n; y=y+x; end disp(['y<3时的最大n 值是:',num2str(n-2)]) disp(['相应的y 值是:',num2str(y-x)]) 运行结果: y<3时的最大n 值是:56 相应的y 值是:2.9944 3.考虑以下迭代公式: n n x b a x += +1 其中a 、b 为正的常数。 (1) 编写程序求迭代的结果,迭代的终止条件是5110-+≤-n n x x ,迭代初值 0x =1.0,迭代次数不超过500次。 clear all close all clc x=1; a=1; b=1; n=1; while (abs(a/(b+x)-x)>10e-5&n<=500) 运行结果:0.6180 10 (2) 如果迭代过程收敛于r ,那么r 的准确值是2 4-2a b b +±,当(a,b )的值取(1,1)、(8,3)、(10,0.1)时,分别对迭代结果和准确值进行比较。 clear all close all clc x=1; a=1; b=1; n=1; while(abs(a/(b+x)-x)>10e-5&n<=500) x=a/(b+x); n=n+1; end x r1=(-b+sqrt(b^2+4*a))/2; r2=(-b-sqrt(b^2+4*a))/2; r1 r2 结果:x = 0.6180 r1 = 0.6180 r2 = -1.6180 4.已知 ⎪⎪⎩⎪⎪⎨⎧+-====---,2,1,0,13214321n n n f f f f f f f 3321>===n n n n 求1f ~100f 中: (1) 最大值、最小值、各数之和。 (2) 正数、零、负数的个数。 5.若两个连续自然数的乘积减1是素数,则称这两个连续自然数是亲密数对,该素数是亲密素数。例如,2×3-1=5,由于5是素数,所以2和3是亲密数对,5是亲密素数。求[2,50]区间内: (1) 亲密数对的对数。 (2) 与上述亲密数对对应的所有亲密素数之和。 clear all close all clc p=0; l=0; H=[]; for m=2:50 a=m; b=m-1; c=a*b-1; for k=1:c if rem(c,k)==0 l=l+1; end end if l==2 disp(['亲密对数是',num2str(a),',',num2str(b)]) p=p+1; H=[H,c]; end l=0; end sum=sum(H); disp(['亲密对数个数是:',num2str(p)]) disp(['亲密对数和是:',num2str(sum)]) 运行结果是: 亲密数对是3,2 亲密数对是4,3 亲密数对是5,4 亲密数对是6,5 亲密数对是7,6 亲密数对是9,8 亲密数对是10,9 亲密数对是11,10 亲密数对是12,11 亲密数对是14,13 亲密数对是16,15 亲密数对是17,16 亲密数对是20,19 亲密数对是21,20 亲密数对是22,21 亲密数对是25,24 亲密数对是27,26 亲密数对是29,28 亲密数对是31,30 亲密数对是32,31 亲密数对是36,35 亲密数对是39,38 亲密数对是40,39 亲密数对是42,41 亲密数对是45,44 亲密数对是46,45 亲密数对是47,46 亲密数对是49,48 亲密数对的个数是:28 亲密数对的和是:21066 >> 实验五、 例4.18 程序如下: function f=factor(n) if n<=1 f=1; else f=n*factor(n-1) end 运行结果:>> factor(5) ans = 120 求s=1!+2!+3!+4!+5! 程序如下: s=0; 实验一 MATLAB 运算基础 1. 先求以下表达式的值,尔后显示 MATLAB 工作空间的使用情况并保存全部变量。 (1) 2sin 85 z 1 2 1 e (2) 1 2 z ln( x 1 x ) ,其中 2 2 x 2 1 2i 5 (3) a e e a z sin( a 0.3) ln , a 3.0, 2.9, L , 2.9, 3 2 2 2 t 0 t 1 (4) 2 z t 1 1 t 2 4 2 t 2t 1 2 t 3 ,其中 解: M 文件: z1=2*sin(85*pi/180)/(1+exp(2)) x=[2 1+2*i;-.45 5]; z2=1/2*log(x+sqrt(1+x^2)) a=-3.0:0.1:3.0; z3=(exp(0.3.*a)-exp(-0.3.*a))./2.*sin(a+0.3)+log((0.3+a)./2) t=0:0.5:2.5; z4=(t>=0&t<1).*(t.^2)+(t>=1&t<2).*(t.^2-1)+(t>=2&t<3) .*(t.^2-2*t+1) 4. 完成以下操作: (1) 求[100,999] 之间能被 21 整除的数的个数。 (2) 建立一个字符串向量,删除其中的大写字母。 解:(1) 结果: m=100:999; n=find(mod(m,21)==0); length(n) ans = 43 (2). 建立一个字符串向量比方: ch='ABC123d4e56Fg9'; 那么要求结果是: ch='ABC123d4e56Fg9'; k=find(ch>='A'&ch<='Z'); ch(k)=[] ch = 实验一 要求: 查看matlab 的版本 代码:version 结果:ans = 7.1.0.246 (R14) Service Pack 3 1.先求下列表达式的值,然后显示MATLAB 工作空间的使用情况并保存全部变量。 (1)z 1=2185sin 2e + z1=(2*sin(85*pi/180))/(1+exp(2)) z = 0.2375 (2)z 2=⎥⎦⎤⎢⎣⎡+=++545 .0-i 212其中),1ln(212x x x x=[2,1+2*i;-0.45,5] x = 2.0000 1.0000 + 2.0000i -0.4500 5.0000 >> z2=1/2*log(x+sqrt(1+x*x)) z2 = 0.7114 - 0.0253i 0.8968 + 0.3658i 0.2139 + 0.9343i 1.1541 - 0.0044i (3)z 3=2 3.0ln )3.0sin(23.03.0a a e e a a +++--,a=-3.0,-2.9,-2.8, …3.0 提示:用冒号表达式生成a 向量,求各点的函数值时用点乘计算。 a=[-3.0:0.1:3.0] z3=1/2.*((exp(0.3.*a)-exp(-0.3.*a))).*sin(a+0.3)+log((0.3+a).*1/2) (4)z 4=⎪⎩⎪⎨⎧<≤+-<≤-<≤32,12 ,21,110,222t t t t t t t 其中t=0:0.5:2.5 提示:用逻辑表达式求分段函数值。 t=0:0.5:2.5 t = 0 0.5000 1.0000 1.5000 2.0000 2.5000 >> z4=t.^2.*(t>=0&t<1)+(t.^2-1).*(t>=1&t<2)+(t.^2-2*t+1).*(t>=2&t<3) z4 = 实验一 1.实现单位采样序列,单位阶跃序列,矩形序列,并用图形显示。写出程序及输出图形。代码: (1)单位采样序列 x=-10:10; y=[zeros(1,10),1,zeros(1,10)]; figure(3); stem(x,y); axis([ -10, 10,0,2]); (2)单位阶跃序列 x=-10:10; y=[zeros(1,10),1,ones(1,10)]; figure(4); stem(x,y); axis([ -10, 10,0,2]); (3)矩形序列 x=-10:10; y=[zeros(1,10),1,ones(1,5),zeros(1,5)]; figure(4); stem(x,y); axis([ -10, 10,0,2]); 图: Figure 8.5.1. 1 单位采样序列Figure 8.5.1. 2 单位阶跃序列 Figure 8.5.1. 3 矩形序列 实验心得: 实验二 1.模拟信号x(t)=2sin(4*pi*t)+5cos(8*pi*t),以t=0.01n(n=0:N-1)进行采样,求:(1)N=40点FFT的幅度频谱,从图中能否观察出信号的2个频谱分量? (2)提高采样点数,如N=128,再求该信号的频谱幅度,此时幅度频谱发生了什么变化?代码: N=40;n=0:N-1; t=0.01*n; x=2*sin(4*pi*t)+5*cos(8*pi*t); k=0:N/2;w=2*pi/N*k; X=fft(x,N); magX=abs(X(1:N/2+1)); subplot(2,1,1);stem(n,x,'.');title('signal x(n)'); subplot(2,1,2);plot(w/pi,magX);title('FFT N=40'); xlabel('f (unit :pi)');ylabel('|X|');grid N=128;n=0:N-1; t=0.01*n; x=2*sin(4*pi*t)+5*cos(8*pi*t); k=0:N/2;w=2*pi/N*k; X=fft(x,N); magX=abs(X(1:N/2+1)); subplot(2,1,1);stem(n,x,'.');title('signal x(n)'); subplot(2,1,2);plot(w/pi,magX);title('FFT N=128'); xlabel('f (unit :pi)');ylabel('|X|');grid 图: 实验一 MATLAB基本操作 一、实验目的 1、了解MATLAB应用程序环境 2、掌握MATLAB语言程序的书写格式和MATLAB语言程序的结构。 3、掌握在MATLAB应用环境下编写程序 4、掌握MATALB调试过程,帮助文件 5、掌握MATLAB语言上机步骤,了解运行一个MATLAB程序的方法。 6、本实验可在学习完教材第一章后进行。 二、主要仪器及耗材 PC电脑,MATLAB6.5软件 三、实验内容和步骤 1、MATLAB语言上机步骤: (1)、进入系统 在C盘或其他盘上找到MATLAB或MATLAB6.5,然后双击其图标打开文件夹。 然后进行编辑源程序->编译->连接->执行程序->显示结果 (2)、常用命令 编辑切换(F6),编译(F9),运行(CTRL+F9),显示结果(ALT+F5)其它常用命令见“附录一”。 2、有下面的MATLAB程序。 (1)数值计算功能:如,求方程 3x4+7x3 +9x2-23=0的全部根 p=[3,7,9,0,-23]; %建立多项式系数向量 x=roots(p) %求根 (2)绘图功能:如,绘制正弦曲线和余弦曲线 x=[0:0.5:360]*pi/180; plot(x,sin(x),x,cos(x)); (3)仿真功能:如, 请调试上述程序。 3、熟悉MATLAB环境下的编辑命令,具体见附录一。 三、实验步骤 1、静态地检查上述程序,改正程序中的错误。 2、在编辑状态下照原样键入上述程序。 3、编译并运行上述程序,记下所给出的出错信息。 4、按照事先静态检查后所改正的情况,进行纠错。 5、再编译执行纠错后的程序。如还有错误,再编辑改正,直到不出现语法错误为止。 MATLAB实验一:MATLAB语言基本概念实验 实验目的: 1. 熟悉MATLAB语言及使用环境; 2.掌握MATLAB的常用命令; 3.掌握MATLAB的工作空间的使用; 4.掌握MATLAB的获得帮助的途径。 5.掌握科学计算的有关方法,熟悉MATLAB语言及其在科学计算中的运用; 6.掌握MATLAB的命令运行方式和M文件运行方式; 7.掌握矩阵在MATLAB中的运用。 实验方案分析及设计: 本次实验主要目的是了解MATLAB的使用环境,以及常用的一些命令的使用;了解矩阵在MATLAB实验中的具体运用,以及相关的一些符号命令的使用。 实验器材: 电脑一台,MATLAB软件 实验步骤: 打开MATLAB程序,将实验内容中的题目依次输入MATLAB中,运行得到并记录结果,最后再对所得结果进行验证。 实验内容及要求: 1.熟悉MATLAB的菜单和快捷键的功能 2.熟悉MATLAB的命令窗口的使用 3.熟悉常用指令的使用 format clc clear help lookfor who whos 4.熟悉命令历史窗口的使用 5. 熟悉MATLAB工作空间的功能 将工作空间中的变量保存为M文件,并提取该文件中的变量 6.熟悉MATLAB获取帮助的途径 将所有plot开头的函数列出来,并详细给出plotfis函数的使用方法 1. 输入 A=[7 1 5;2 5 6;3 1 5],B=[1 1 1; 2 2 2;3 3 3], 在命令窗口中执行下列表达式,掌握其含义: A(2, 3) A(:,2) A(3,:) A(:,1:2:3) A(:,3).*B(:,2) A(:,3)*B(2,:) A*B A.*B A^2 A.^2 B/A B./A A=[7 1 5;2 5 6;3 1 5] Matlab实验指导书(含参考程序) 1 实验一:matlab操作环境熟悉 一、实验目的 1.初步了解matlab操作环境。 2.自学采用图形函数计算器命令funtool及其环境。 二、实验内容 熟识matlab操作方式环境,重新认识命令窗口、内存工作区窗口、历史命令窗口;学会采用format命令调整命令窗口的数据表明格式;学会采用变量和矩阵的输出,并展开直观的排序;学会采用who和whos命令查阅内存变量信息;学会采用图形函数计算器funtool,并展开以下排序: funtool(回车),出现三个窗口: figureno.1、figureno.2为函数曲线视窗,figureno.3为运算控制器。1.单函数运算操作方式。 求下列函数的符号导数 (1)y=sin(x); (2)y=(1+x)^3*(2-x);?求下列函数的符号积分 (1)y=cos(x);(2)y=1/(1+x^2);(3)y=1/sqrt(1-x^2);(4)y=(x-1)/(x+1)/(x+2);?谋反函数 (1)y=(x-1)/(2*x+3);(2)y=exp(x); (3)y=log(x+sqrt(1+x^2));?代数式的化简 (1)(x+1)*(x-1)*(x-2)/(x-3)/(x-4);(2)sin(x)^2+cos(x)^2; (3)x+sin(x)+2*x-3*cos(x)+4*x*sin(x); 在3号窗口的第一排按键是单函数运算操作键df/dx------求函数f对x的符号导数intf------求函数对x的符号积分simplef------对函数作尽可能的化简numf------取函数的分子表达式denf------取函数的分母表达式1/f------求函数的倒数1/f finv------f-1求函数的反函数,即g(f(x))=x2.函数与参数的运算操作方式。 实验二 MATLAB 程序设计 一、 实验目的 1.掌握利用if 语句实现选择结构的方法。 2.掌握利用switch 语句实现多分支选择结构的方法。 3.掌握利用for 语句实现循环结构的方法。 4.掌握利用while 语句实现循环结构的方法。 5.掌握MATLAB 函数的编写及调试方法。 二、 实验的设备及条件 计算机一台(带有MATLAB7.0以上的软件环境)。 M 文件的编写: 启动MATLAB 后,点击File|New|M-File ,启动MATLAB 的程序编辑及调试器(Editor/Debugger ),编辑以下程序,点击File|Save 保存程序,注意文件名最好用英文字符。点击Debug|Run 运行程序,在命令窗口查看运行结果,程序如有错误则改正 三、 实验内容 1.编写求解方程02=++c bx ax 的根的函数(这个方程不一定为一元二次方程,因 c b a 、、的不同取值而定) ,这里应根据c b a 、、的不同取值分别处理,有输入参数提示,当0~,0,0===c b a 时应提示“为恒不等式!”。并输入几组典型值加以检验。 (提示:提示输入使用input 函数) 2.输入一个百分制成绩,要求输出成绩等级A+、A 、B 、C 、D 、E 。其中100分为A+,90分~99分为A ,80分~89分为B ,70分~79分为C ,60分~69分为D ,60分以下为E 。 要求:(1)用switch 语句实现。 (2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 (提示:注意单元矩阵的用法) 3.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 2?1 3?10?5?16?8?4?2?1 6?3?10?5?16?8?4?2?1 运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。 请为关键的Matlab 语句填写上相关注释,说明其含义或功能。 4. 编写一个函数,计算下面函数的值,给出标量x 的值,调用该函数后,返回y 的值。 function [y]=myfun1(x) 选择一些数据测试你编写的函数。 5. 编写一个函数求向量x 中元素的平均值、最大值、最小值、均方根值。 function [m_x,max_x,min_x,rms_x]=myfun2(x)方均根值(Root Mean Square)的计算公式为: 用下面数据测试你写的函数: (1)x=sin(0:0.01:6*pi) (2)x=rand(1,200),得到的x 为200个(0,1)之间均匀分布的随机数。 6.根据22222 1......3121116n ++++=π,求π的近似值。当n 分别取100、1000、10000时,结果是多少? 思考题: 有一分数序列: 编写一段程序,求前16项的和。 四、实验报告要求(包含预习报告要求和最终报告要求) %classic "3n+1" problem from number theory. while 1 n=input('Enter n,negative quits:'); if n<=0 break end a=n; while n>1 if rem(n,2)==0 n=n/2; else n=3*n+1; end a=[a,n]; end a end MATLAB程序与数值实验 一、插值法(课本第二章) 1、拉格朗日插值方法 function s=lag(x,y,t) %拉格朗日插值方法,可以同时对多点插值,t可以为向量syms p; n=length(x);%读取x向量的维数 s=0; for(k=1:n) la=y(k); %构造基函数 for(j=1:k-1) la=la*(p-x(j))/(x(k)-x(j)); end; for(j=k+1:n) la=la*(p-x(j))/(x(k)-x(j)); end; s=s+la; simplify(s); end if(nargin==2) s=subs(s,'p','x'); s=collect(s);%展开多项式 s=vpa(s,6); else m=length(t); for i=1:m temp(i)=subs(s,'p',t(i)); end s=temp; End %for example % x=[pi/4 pi/6 pi/3 pi/2]; %y=[cos(pi/4) cos(pi/6) cos(pi/3) cos(pi/2)]; %t=[-40*pi/180 40*pi/180 50*pi/180 70*pi/180 170*pi/180]; %yt=lag(x,y,t) 2、牛顿插值法 function s=niudun(x,y,t) %,可以同时对多点插值,即t可以为向量 syms p; s=y(1); xishu=0; dxs=1; n=length(x);%读取x向量的维数 %构造牛顿插值方法 for (i=1:n-1) for(j=i+1:n) xishu(j)=(y(j)-y(i))/(x(j)-x(i)); end temp1(i)=xishu(i+1); dxs=dxs*(p-x(i)); s=s+temp1(i)*dxs; y=xishu; end simplify(s) if (nargin==2) s=subs(s,'p','x'); s=collect(s); s=vpa(s,4); else %读取要插值点的向量长度 %可以直接对多点插值机算 m=length(t); for i=1:m temp(i)=subs(s,'p',t(i)); end %得到的是系列插值点的插值结果,即得到的是向量,赋值给s s=temp; end %for example %1、已知零阶Bessel函数f(x)在若干点处的函数值为:计算x在1.5处的近似值%x=[1.0 1.3 1.6 1.9 2.2]; %y=[0.7651977 0.6200860 0.4554022 0.2818186 0.1103623]; %yt=niudun(x,y,1.5) 3、插值中的Runge现象 syms x f=1/(1+x^2); x=-5:5; y=subs(f,x); chazhi=niudun(x,y); 主函数:MAIN clc; clear all; close all; echo on t0=3;%信号时长3 dt=0.02; % 系统时域采样间隔 fs=1/dt;%系统采样频率 df=0.2; %所需的频率分辨率 t=0:dt:t0; Lt=length(t);%仿真过程中,信号长度 % 产生模拟信号 m=[ones(1,t0/(3*dt)),-2*ones(1,t0/(3*dt )),zeros(1,t0/(3*dt)+1)]; pause figure(1); subplot(211); plot(t,m(1:length(t)));% 画出信号波形axis([0 3 -2.5 1.5]); xlabel('t'); ylabel('模拟信号'); subplot(212); [M,m,df1,f]=T2F(m,dt,df,fs);%求出信号频谱 plot(f,fftshift(abs(M)))% 画出信号频谱axis([-15 15 0 3]); xlabel('f');ylabel('模拟信号频谱'); pause %..............抽样模块............. fs=50; sdt=1/fs; t1=0:sdt:t0; sm=[ones(1,t0/(3*sdt)),-2*ones(1,t0/(3* sdt)),zeros(1,t0/(3*sdt)+1)]; figure(2); subplot(211); stem(t1,sm(1:length(t1))); title('抽样信号'); axis([0 t0 -2.1 1.1]); subplot(212); [SM,sm,df1,f]=T2F(sm,sdt,df,fs); plot(f,10*log10(abs(fftshift(SM).^2/len gth(f))))% 画出抽样信号功率 xlabel('f');ylabel('抽样信号PDF');% ··········模拟信号数字化·············guiyihua=2/2048; pcm_bianma=pcm_encode(m/guiyihua); figure(3); huitu(pcm_bianma); %***************加密************** q=length(pcm_bianma); out=reshape(pcm_bianma',8,q/8)'; for i=1:q/8 out(i,:)=jiami(out(i,:)); end out=reshape(out',1,q); pause %``````````信道编码调制解调译码``````` r=3 n=2^r-1 k=n-r if rem(length(out),k)==0 %判断A的长度是否能被k整除 BL=reshape(out,k,length(out)/k); BL=BL'; for i=1:length(out)/k hammc_out(i,:)=hamming_code(n,k,r,BL(i, :)) ;%将A进行(n,k)汉明编码 end hamming_bianma=reshape(hammc_out',1,(le ngth(out)/k)*n )%串行输出编码结果 figure(4); pause huitu(hamming_bianma); [jietiao_out,numoferr]=bpsk(hamming_bia nma) %调制,解调,串行输出hammd_out1=zeros(length(jietiao_out)/n, k); out1=reshape(jietiao_out,n,length(jieti ao_out)/n)' ; %将串转换成n列矩阵for i=1:length(jietiao_out)/n hammd_out1(i,:)=hamming_decode(n,k,r,ou t1(i,:));%汉明译码 end (1)数组的加、减、乘、除和乘方运算。输入A=[1 2 3 4],B=[3 4 5 6],求C=A+B,D=A-B,E=A.*B,F=A./B,G=A.^B并用stem语句画出A、B、C、D、E、F、G。 clear all; a=[1 2 3 4]; b=[3 4 5 6]; c=a+b; d=a-b; e=a.*b; f=a./b; g=a.^b; n=1:4; subplot(4,2,1);stem(n,a); xlabel('n');xlim([0 5]);ylabel('A'); subplot(4,2,2);stem(n,b); xlabel('n');xlim([0 5]);ylabel('B'); subplot(4,2,3);stem(n,c); xlabel('n');xlim([0 5]);ylabel('C'); subplot(4,2,4);stem(n,d); xlabel('n');xlim([0 5]);ylabel('D'); subplot(4,2,5);stem(n,e); xlabel('n');xlim([0 5]);ylabel('E'); subplot(4,2,6);stem(n,f); xlabel('n');xlim([0 5]);ylabel('F'); subplot(4,2,7);stem(n,g); xlabel('n');xlim([0 5]);ylabel('G'); (2)用MATLAB实现下列序列: a) x(n)=0.8n 0≤n≤15 b) x(n)=e(0.2+3j)n 0≤n≤15 c) x(n)=3cos(0.125πn+0.2π)+2sin(0.25πn+0.1π) 0≤n≤15 d) 将c)中的x(n)扩展为以16为周期的函数x16(n)=x(n+16),绘出四个周期。 e) 将c)中的x(n)扩展为以10为周期的函数x10(n)=x(n+10),绘出四个周期。 clear all; N=0:15; xa=0.8.^N; figure;subplot(2,1,1);stem(N,xa); xlabel('n');xlim([0 16]);ylabel('xa'); xb=exp((0.2+3*j)*N); MATLAB简单程序大全求特征值特征向量 a=[234;159;852]det(a)a' rank(a)inv(a)rref(a) eig(a)%求特征值和特征向量 卫星运转问题 h=200,h=51000,r=6378;a=(h+h+2*r)/2;c=(h-h)/2; b=(a^2-c^2)^(1/2);e=c/a; f=sqrt(1-exp(2).*cos(t)^2);l=int(f,t,0,pi/2)l=4*a.*l 动态玫瑰线 n=3;n=10000; 二重积分 symsxyf=x^2*sin(y); int(int(f,x,0,1),y,0,pi)ezmesh(f,[0,1,0,pi])函数画图 symsx;f=exp(-0.2*x)*sin(0.5*x);ezplot(f,[0,8*pi])玫瑰线 theta=0:0.01:2*pi;r=cos(3*theta);polar(theta,r,'r')求x^2+y^2=1和x^2+z^2=1所围成的体积 symsxyzrr=1; z=sqrt(1-x^2);y0=z; v=8*int(int(z,y,0,y0),x,0,1) 求导数及图像 f='1/(5+4*cos(x))';subplot(1,2,1);ezplot(f)f1=diff(f) subplot(1,2,2);ezplot(f1) 拖x轴转动 t=(0:20)*pi/10; r=exp(-.2*t).*sin(.5*t);theta=t; x=t'*ones(size(t));y=r'*cos(theta);z=r'*sin(theta);mesh(x,y,z) colormap([000]) 某年是否闰年 year=input('inputyear:=');n1=year/4;n2=year/100;n3=year/400; ifn1==fix(n1)&n2~=fix(n2)disp('是闰年') elseifn1==fix(n1)&n3==fix(n3)disp('就是闰年')else disp('不是闰年')end 玫瑰线的绘制 相遇问题 functionk=moto(a,b) ifnargin==0,a=0;b=100;endva=10;vb=8;vc=60;f=1;k=0; while(b-a)>0.2iff==1 tk=(b-a)/(vb+vc);else tk=(b-a)/(vc+va);end a=a+va*tk;b=b-vb*tk;f=-f;k=k+1;end 数学实验 symsx;x=1:100; f(x)=exp(-0.2*x).*sin(0.5*x);symsx;x=1:100; f(x)=exp(-0.2*x).*sin(0.5*x);plot(x,f(x)) symsx;x=0:0.1:2*pi; f(x)=exp(-0.2*x)*sin(0.5*x);plot(x,f(x)) 实验4M A T L A B 基本编程 一、实验目的 1. 熟悉MATLAB 的脚本编写 2. 熟悉MATLAB 的函数编写 3. 熟悉MATLAB 的变量使用 4. 熟悉MATLAB 的程序控制结构 二、实验内容 1. 分别选用if 或switch 结构实现下述函数表示; -1x ≤-a fx=x/a-a 实验1-1 基本信号产生及matlab 使用练习 训练1 常见离散信号的MATLAB 产生和图形显示 1.单位抽样序列 ⎩⎨⎧=0 1)(n δ ≠=n n n=-50:50; x=[zeros(1,50),1,zeros(1,50)]; stem(n,x,'fill');grid on ; 图1-1 单位抽样序列 2. 单位阶越序列 ⎩ ⎨⎧01 )(n u 00<≥n n n=-50:50; x=[zeros(1,50),ones(1,51)]; stem(n,x,'fill');grid on ; 图1-2 单位阶跃序列 3.正弦序列 )/2sin()(ϕπ+=Fs fn A n x A=2; phi=pi/6; n=-10:10; f=0.1; fs=1; x=A*sin(2*pi*n*f/fs+phi); stem(n,x,'fill'); grid on ; 图1-3 正弦序列 4.复正弦序列 n j = ( ) e n xϖ n=0:50; f=0.1; fs=1; x=exp(j*2*pi*f*n/fs); stem(n,x,'fill'); grid on; 图1-4 复正弦序列5.指数序列 n ) ( x= n a n=0:10; a=2; x=a.^n; stem(n,x,'fill'); grid on; 图1-5 指数序列 训练2 常见离散信号的MATLAB 产生和图形显示 1 令()sin()()x n A n u n ω=+,其中16 π ω=,u(n)是白噪声。 (1)使用matlab 中的有关文件产生均值为0,功率为0.1的均匀分布白u(n),求其自相关函数并画出其波形。 (2)欲使x(n)的信噪比为10dB ,试决定A 的数值并画出x(n)及其自相关函数的图形。 解:(1) 产生均值为0,功率为0.1的均匀分布的白u(n)的程序如下: clear; p=0.1; N=5000; u=rand(1,N); u=u-mean(u); a=sqrt(12*p); u1=u*a; power_u1=dot(u1,u1)/N; subplot(211) plot(u1(1:200)); grid on ; ylabel('u(n)') xlabel('n') 求u(n)自相关函数的程序如下: fs=1000; [cory,lag]=xcorr(u1,'unbiased'); plot(lag/fs,cory); 实验一:Matlab程序设计及绘图 一、实验目的 1、掌握 Matlab 软件使用的基本方法; 2、熟悉 Matlab 的编程方法; 3、熟悉 Matlab 绘图命令及基本绘图控制。 二、实验内容 1.基本绘图命令 (1)绘制余弦曲线 y=cos(t),t∈[0,2π] (2)在同一坐标系中绘制余弦曲线 y=cos(t-0.25)和正弦曲线 y=sin(t-0.5), t∈[0,2π] 2.基本绘图控制 绘制[0,4π]区间上的 x1=10sint 曲线,并要求: (1)线形为点划线、颜色为红色、数据点标记为加号; (2)坐标轴控制:显示范围、刻度线、比例、网络线 (3)标注控制:坐标轴名称、标题、相应文本; 3.程序设计:找出从2开始的前100个素数,并依次排列显示。 三、实验原理 MATLAB环境是一种为数值计算、数据分析和图形显示服务的交互式的环境。MATLAB有3种窗口,即:命令窗口(The Command Window)、m-文件编辑窗口(The Edit Window)和图形窗口(The Figure Window),而Simulink另外又有Simulink模型编辑窗口。 1.命令窗口(The Command Window) 当MATLAB启动后,出现的最大的窗口就是命令窗口。用户可以在提示符“>>”后面输入交互的命令,这些命令就立即被执行。 在MATLAB中,一连串命令可以放置在一个文件中,不必把它们直接在命令窗口内输入。在命令窗口中输入该文件名,这一连串命令就被执行了。因为这样的文件都是以“.m”为后缀,所以称为m-文件。 2.m-文件编辑窗口(The Edit Window) 我们可以用m-文件编辑窗口来产生新的m-文件,或者编辑已经存在的m-文件。在MATLAB主界面上选择菜单“File/New/M-file”就打开了一个新的m-文件编辑窗口;选择菜单“File/Open”就可以打开一个已经存在的m-文件,并且可以在这个窗口中编辑这个m-文件。 四、实验要求 利用所学知识,完成上述各项实验内容,并将实验过程和实验步骤和结果写在报告中。 实验一MATLAB 运算基础 1. 先求下列表达式的值,然后显示MATLAB 工作空间的使用情况 并保存全部变量。 (1) 012 2sin851z e =+ (2)21 ln(2z x =,其中2120.45 5i x +⎡⎤=⎢⎥-⎣⎦ (3) 0.30.330.3sin(0.3)ln , 3.0, 2.9,,2.9,3.022 a a e e a z a a --+=++=-- (4) 2242011 122123t t z t t t t t ⎧≤<⎪=-≤<⎨⎪-+≤<⎩ ,其中t =0:0.5:2.5 2. 已知: 求下列表达式的值: (1) A+6*B和A-B+I(其中I为单位矩阵) (2) A*B和A.*B (3) A^3和A.^3 (4) A/B及B\A (5) [A,B]和[A([1,3],:);B^2] 解: 运算结果: 3. 设有矩阵A和B (1) 求它们的乘积C。 (2) 将矩阵C的右下角3×2子矩阵赋给D。 (3) 查看MATLAB工作空间的使用情况。解:. 运算结果: 4. 完成下列操作: (1) 求[100,999]之间能被21整除的数的个数。 (2) 建立一个字符串向量,删除其中的大写字母。 解:(1) 结果: (2). 建立一个字符串向量 例如: ch='ABC123d4e56Fg9';则要求结果是: 实验二 MATLAB 矩阵分析与处理 1. 设有分块矩阵33 322322E R A O S ⨯⨯⨯⨯⎡⎤=⎢⎥⎣⎦ ,其中E 、R 、O 、S 分别为单位矩阵、随机矩阵、零矩阵和对角阵,试通过数值计算验证22E R RS A O S +⎡⎤=⎢ ⎥⎣⎦ 。 解: M 文件如下; 输出结果: 实验三MATLAB程序设计 一、实验目的 掌握几种基本流程控制语句进行设计的方法;了解程序优化和调试方法;熟悉利用向量运算来代替循环操作的方法,具备对较复杂问题的编程求解能力。 二、实验内容 1、使用脚本文件,画出下列分段函数所表示的曲线。 y={x+1,⋯⋯x<0 1⋯⋯⋯0≤x≤1 x3⋯⋯⋯1≤x 计算上述分段函数的值,要求能够根据用户对x值的不同输入,程序给出相对应的结果。 2、编写一个程序,能够接收用户从键盘输入的多个数值,只有当接收到输入的数值为-1时方可结束输入过程,然后求解并输出前面输入的所有数值之和以及它们的平均值。 3、求解鸡兔同笼问题:鸡和兔子关在一个笼子里,已知共有头36个,脚100个,求笼内关了多少只兔子和多少只鸡? 4、求2~999中同时满足下列条件的自然数: (1)该数各位数字之和为奇数 (2)该数是素数 5、编写程序求解如下问题并尝试调试运行:我国人口按2000年第五次全国人口普查的结果为12.9533亿,如果假定年增长率1.07%保持不变,请问多少年后我国总人口能够达到30亿? 6、编写阶乘函数,并调用该函数来生成一个1!,2!,…,10!的阶乘表,如下所示: 1 1 2 2 3 6 4 24 5 120 6 720 7 5040 8 40320 9 362880 10 3628800 7、编写一个求解指数函数e x的函数文件 提示:指数函数的幂级数展开为:e x≈1+x1 1!+x2 2! +x3 3! +⋯ 8、输入一个百分制成绩,要求输出成绩等级A、B、C、D、E。其中90~100分为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。 要求:(1)分别用if和switch语句实现。 (2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息 MATLAB程序设计与应用(第二版)实验参考答案%实验一MATLAB运算基础 %第一题 %(1) z1=2*sin(85*pi/180)/(1+exp(2)) %(2) x=[2,1+2i;-0.45,5]; z2=0.5*log(x+sqrt(1+x.^2)) %(3) a=-3.0:0.1:3.0; z3=(exp(0.3*a)-exp(-0.3*a))/2.*sin(a+0.3)+log((0.3+a)/2) %(4) t=0:0.5:2.5; z4=t.^2.*(t>=0&t<1)+(t.^2-1).*(t>=1&t<2)+(t.^2-2*t+1).*(t>=2&t<3) %第二题 A=[12 34 -4;34 7 87;3 65 7]; B=[1 3 -1;2 0 3;3 -2 7]; A+6*B A-B+eye(size(A)) A*B A.*B A^3 A.^3 A/B B\A [A,B] [A([1,3],:);B^2] %第三题 A=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20;21 22 23 24 25] B=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11] C=A*B F=size(C) D=C(F(1)-2:F(1),F(2)-1:F(2)) whos %第四题 %(1): A=100:999; B=rem(A,21); C=length(find(B==0)) %(2): A='lsdhKSDLKklsdkl'; k=find(A>='A'&A<='Z'); A(k)=[] %实验二MATLAB矩阵分析与处理 %第一题 E=eye(3); R=rand(3,2); O=zeros(2,3); S=diag([2,3]); A=[E,R;O,S]; A^2 B=[E,(R+R*S);O,S^2] %第二题 H=hilb(5) P=pascal(5) Hh=det(H) Hp=det(P) Th=cond(H) Tp=cond(P) 实验报告 课程名称:可视化计算机语言实验项目名称:matlab程序设计学院:信息工程学院 专业:电子信息工程 指导教师: 报告人:学号:班级: 实验时间: 实验报告提交时间: 教务部制 一、实验目的与要求: 1、熟练掌握matlab的程序流程控制结构.. 2、熟悉掌握M文件的结构和函数调用.. 3、掌握内联函数和函数句柄的使用.. 4、了解程序性能剖析窗口.. 二、内容和步骤: MATLAB的语法规则简洁;编程效率高;作为一个完整的程序语言;MATLAB也有各种程序流程控制;文件格式和函数调用的规则;通过对函数的调用就能够组成庞大的程序;完成复杂的功能.. 1.使用程序流程控制 Fibonacci数列的各元素为:1、1、2、3、5、8、...满足一下关系 F1=1 F2=1 F n=F n-1+F n-2 用M函数文件实现;数列的元素个数为输入变量.. (1)按M函数文件格式创建文件开头.. function f=shiyan0501n %SHIYAN0501 %Fibonacci数列 %n 元素个数 %f 构成Fibonacci数列向量 % %copyright 2015-11-25 (2)用while循环实现程序功能 f1=1; f2=1; i=2; while i<=n fi+1=fi-1+fi; i=i+1; End 运行后;输入参数10;运行结果如下所示: (3)使用for循环实验 for i=2:n fi+1=fi-1+fi; end 运行结果如下所示: (4)当某个元素大于50时;退出循环结构;程序修改如下: for i=2:n if fi>10 break else fi+1=fi-1+fi; end end 当某个元素大于50;程序便退出循环结构 当n=10;最后一个元素刚好是大于50的;正好退出循环结构 当n=12时;第十个元素对应的fi大于50;于是退出循环结构;不再运行f11;f12了.. (5)将该.m文件生成P码文件 >> pcode shiyan0501 将shiyan0501.m删除;重新运行该文件夹;结果如下所示: 练习: 将该M文件函数改为M脚本文件;将数列元素个数通过键盘输入;程序应该如何修改 ①将M文件函数另存为M脚本文件; ②在函数前加 n=input'please input a num:' 便可通过键盘键入文件(完整版)MATLAB)课后实验[1]
MATLAB实验程序
MATLAB实验教程
matlab实验
MATLAB实验
Matlab实验指导书(含参考程序)
实验二MATLAB程序设计含实验报告
matlab程序与数值实验
matlab实验8综合程序
数字信号处理实验(吴镇扬版)matlab程序
MATLAB简单程序大全
matlab实验MATLAB基本编程
matlab实验
实验1-----Matlab程序设计及绘图
MATLAB程序设计与应用课后实验答案
实验三 MATLAB程序设计
MATLAB程序实验参考答案
matlab程序设计实验报告