MATLAB实习报告.docx
《MATLAB实习报告.docx》由会员分享,可在线阅读,更多相关《MATLAB实习报告.docx(27页珍藏版)》请在冰豆网上搜索。
MATLAB实习报告
1.求f(x)=4x6-x+x3-95在(0,100)上最大值、最小值,根。
(使用函数fminbnd、roots)。
程序:
symsx
f='4*x.^6+x.^3-x-95';
x1=fminbnd(f,0,100)
x2=fminbnd('-4*x.^6-x.^3+x+95',0,100)
x=x1;minf=eval(f)
x=x2;maxf=eval(f)
p=[40010-1-95];
x=roots(p)
结果:
x1=
0.4432
x2=
99.9999
minf=
-95.3258
maxf=
4.0000e+012
x=
1.6860
0.8525+1.4852i
0.8525-1.4852i
-1.7050
-0.8431+1.4514i
-0.8431-1.4514i
2.求解常微分方程x’’=-x’+x+1,x’(0)=1,x(0)=0(使用函数dsolve)。
程序:
y=dsolve('D2x=-Dx+x+1','Dx(0)=0,x(0)=0')
结果:
y=
exp(1/2*(5^(1/2)-1)*t)*(1/10*5^(1/2)+1/2)+exp(-1/2*(5^(1/2)+1)*t)*(-1/10*5^(1/2)+1/2)-1
3.已知t=an2+bn,测得对应数据如下:
(多项式插值interp1)
t=[0,20,40,60,80,100,120,140,160,183.5];
n=[0,1153,2045,2800,3466,4068,4621,5135,5619,6152];
试求a和b的值。
程序:
n=[0,1153,2045,2800,3466,4068,4621,5135,5619,6152];
t=[0,20,40,60,80,100,120,140,160,183.5];
A=polyfit(n,t,2);
a=A
(1),b=A
(2)
结果:
a=
2.5083e-006
b=
0.0144
4.请用梯形法、辛普森法分别计算积分值
(trapz、quad)
程序:
F=@(x)sqrt(x.^2+x+1);
Q=quad(F,0,1)
x=0:
0.01:
1;
y=sqrt(x.^2+x+1);
q=trapz(x,y)
结果:
Q=
1.3369
q=
1.3369
5.计算二重积分
(使用函数dblquad)
程序:
F=@(x,y)x.^2+y.^2+x*y+2*x+y+1;
Q=dblquad(F,0,2,0,1)
结果:
Q=
11.3333
6.矩阵M=[1,2,6;4,2,7;8,9,3],求M的LU分解,QR分解,对角阵,特征值分解。
(使用函数lu、qr、shol、eig)
程序:
A=[123;456;789];
[LU]=lu(a)
[QR]=qr(a)
[XD]=eig(a)
结果:
L=
1
U=
2.5083e-006
Q=
1
R=
2.5083e-006
X=
1
D=
2.5083e-006
7.a=3,A=4,b=a2,B=b2-1,c=a+A-2B,C=a+B+2c,求C。
(使用函数solve)
程序:
D=solve('a=3,A=4','b=a^2','B=b^2-1','c=a+A-2*B','C=a+B+2*c');
C=D.C
结果:
C=
-223
8.用两种方法求解Ax=b的解。
(A为四阶随机矩阵,b为四阶向量,自己创建)。
程序:
A=fix(50*rand(4))
B=fix(50*rand(4,1))
ifdet(A)~=0
x=A\B
X=inv(A)*B
else
C=B;
D=[AC]
rref(B)
end
结果:
A=
47444146
11382236
3022308
2403920
B=
46
45
20
44
x=
-0.8583
0.0430
1.3169
0.6621
X=
-0.8583
0.0430
1.3169
0.6621
9.
,用两种方法求函数的根,并求其极值与零点。
程序:
y1='x.^3+(x-0.8).^2/(x+1.25).^3-5*(x+1/x)';
ezplot(y1,[-100,100])
[xmin,ymin]=fminbnd(y1,0,60);
ymin
y2='-x.^3-(x-0.8).^2/(x+1.25).^3+5*(x+1/x)';
[xmax,y]=fminbnd(y2,-50,-20);
ymax=-y
结果:
ymin=
-1.1489e+005
ymax=
-7.8999e+003
10、f(x)的定义如下:
,写一个matlab函数func1实现该函数。
程序:
functiony=hs(x)
x=input('请输入x值:
x=');
ifx<0&x~=-4
y=x.^2+x-6;
elseifx>=0&x<10&x~=2&x~=3
y=x.^2-5*x+6;
else
y=x.^2-x+1;
end
结果:
请输入x值:
x=5.6
ans=
9.3600
11、写一个MATLAB小程序,求出最小的n值,使得n!
>realmax。
程序:
n=1;
whileprod(1:
n)<=realmax
n=n+1;
end
n
结果:
n=
171
12、写一个MATLAB函式myfun.m来计算下列方程式:
y=0.5*exp(x/3)-x*x*sin(x)
其中x是函式的输入,y是函式的输出。
你的函式必须能够处理当x是纯量或是向量的两种情况。
程序:
functiony=myfun(x)
y=0.5*exp(x./3)-x.*x.*sin(x);
end
结果:
myfun([2,3])
ans=
-2.66330.0891
13、写一个MATLAB函式pifun.m来计算下列级数:
f(n)=4*(1-1/3+1/5-1/7+1/9-1/11+...)
其中n为函式的输入,级数和f(n)则是函式的输出。
此外,你必须进行下列事项:
(1)使用tic和toc指令来测量pifun(100000)的计算时间。
如果你不知道如何使用这两个指令,请使用helptic及helptoc来查出它们的用法。
我的计算机是Pentium-450,所得的计算时间约为2秒。
请说明你的计算机规格以及其计算时间。
程序:
functionf=pifun(n)
tic
y=0;
fori=0:
n
y=y+(-1)^(i)*1/(2*i+1);
end
f=4*y;
toc
t=toc
end
结果:
pifun(100000)
Elapsedtimeis0.006173seconds.
t=
0.0062
ans=
3.1416
14、写一个MATLAB的递归函式fibo.m来计算Fibonacci数列,其定义如下:
fibo(n+2)=fibo(n+1)+fibo(n)
此数列的启始条件如下:
fibo
(1)=0,fibo
(2)=1.
程序:
functiona=fibo(n)
ifn==1
a=0;
elseifn==2
a=[01];
elseb=fibo(n-1);
a=[b,b(end-1)+b(end)];
end
end
结果:
fibo(6)
ans=
011235
15.求下列函数的极小点:
1)
;
2)
;
3)
.
第1),2)题的初始点可任意选取,
第3)题的初始点取为
.
程序:
f='x
(1)^2+4*x
(2)^2+9*x(3)^2-2*x
(1)+18*x
(2)';
[x,fm]=fminsearch(f,[0,0,0])
f='x
(1)^2+3/2*x
(2)^2-2*x
(1)*x
(2)+x
(1)-2*x
(2)';
[x,fm]=fminsearch(f,[0,0])
f='(x
(1)-1)^4+x
(2)^2';
[x,fm]=fminsearch(f,[0,1])
结果:
x=
1.0000-2.25000.0000
fm=
-21.2500
x=
0.50001.0000
fm=
-0.7500
x=
1.0000-0.0000
fm=
4.2415e-017
16. 解线性方程组
并求系数矩阵的行列式。
程序:
A=[51-10;103-1;-1-105;0024];
b=[123-1];
x=A\b'
det(A)
结果:
x=
1.4000
-5.9000
0.1000
-0.3000
ans=
70
17.设f(x,y)=4sin(x3y),求
。
程序:
symsxy
f=4*sin(x.^3*y);
y1=diff(f,x);
y2=diff(y1,y);
x=2;y=3;eval(y2)
结果:
ans=
1.0636e+003
18.求方程3x4+4x3-20x+5=0的所有解。
程序:
symsx;
p=sym2poly(3*(x.^4)+4*(x.^3)-20*x+5);
x=roots(p)
结果:
x=
-1.5003+1.5470i
-1.5003-1.5470i
1.4134
0.2539
19.对于迭代模型
取初值x0=0,y0=0,进行3000次迭代,对于k>1000,在(xk,yk)处亮一点(注意不要连线)可得所谓Henon引力线图。
程序:
x
(1)=0;y
(1)=0;
fork=1:
3000
x(k+1)=1+y(k)-1.4*x(k)^2;y(k+1)=0.3*x(k);
end
plot(x(1001:
3001),y(1001:
3001),'.');
结果:
20.某公司投资2000万元建成一条生产线。
投产后,在时刻t的追加成本和追加收益分别为G(t)=
(百万元/年),H(t)=
(百万元/年)。
试确定该生产线在合适何时停产可获最大利润?
最大利润是多少?
要求:
写出数学模型、M函数(如果需要的话)、运算命令和计算结果。
程序:
fplot('18-t^(2/3)',[0,20]);gridon;holdon;
fplot('5+t+2*t^(2/3)',[0,20],'r');holdoff;
[t,f,h]=fsolve('18-x^(2/3)-5-x-2*x^(2/3)',4)
t=linspace(0,t,100);y=18-t.^(2/3)-5-t-2*t.^(2/3);
trapz(t,y)-20
结果:
t=
4.6465
f=
1.1458e-013
h=
1
ans=
6.3232
21.一幢楼房的后面是一个很大的花园。
在花园中紧靠着楼房建有一个温室,温室高10英尺,延伸进花园7尺。
清洁工要打扫温室上方的楼房的窗户。
他只有借助于梯子,一头放在花园中,一头靠在楼房的墙上,攀援上去进行工作。
他只有一架20米长的梯子,你认为他能否成功?
能满足要求的梯子的最小长度是多少?
步骤:
1.先进行问题分析,明确问题;
2.建立模型,并运用Matlab函数求解;
3.对结果进行分析说明;
4.设计程序画出图形,对问题进行直观的分析和了解(主要用画线函数plot,line)
程序:
symsx
a=7;
b=10;
L=a/cos(x)+b/sin(x);
L1=diff(L,'x')
s=solve([char(L1),'=0'],'x')
vpa(s)
x=0.8447,Lmin=eval(L)
结果:
L1=
7/cos(x)^2*sin(x)-10/sin(x)^2*cos(x)
s=
atan(1/7*490^(1/3))
-atan(1/14*490^(1/3)-1/14*i*3^(1/2)*490^(1/3))
-atan(1/14*490^(1/3)+1/14*i*3^(1/2)*490^(1/3))
ans=
.84470443358940930629493489660082
-.90238739799754865449124885587521+.64655814062687830403656227355832*i
-.90238739799754865449124885587521-.64655814062687830403656227355832*i
x=
0.8447
Lmin=
23.9159
22.某大学青年教师从31岁开始建立自己的养老基金,他把已有的积蓄10000元也一次性地存入,已知月利率为0.001(以复利计),每月存入700元,试问当他60岁退休时,他的退休基金有多少?
又若,他退休后每月要从银行提取1000元,试问多少年后他的基金将用完?
程序:
functiony=tsum(interest,principal,time,acknowl,basicmoney)
tsum=0;
fori=1:
time
sum=(1+interest)^i;
tsum=tsum+sum;
end
tsum=principal*tsum+basicmoney*(1+interest)^time
i=1;
tsum1=(tsum-acknowl)*(1+interest);
while(tsum1>=1000)
tsum1=(tsum1-acknowl)*(1+interest);
i=i+1;
end
y=i/12;
end
结果:
tsum=
3.1778e+005
ans=
31.8333
29.请设计一个程序,程序完成下列功能:
(1)让用户输入一个矩阵A;
(2)在A中找出小于0的矩阵元素的位置;
(3)在A中统计出等于0的元素的个数;
(4)显示A的行数和列数;
(5)找出矩阵A各元素中的最大值(显示值,不显示元素位置)。
程序:
A=input('¾ØÕóA:
A=');
n=0;MAX=A(1,1);
[pq]=size(A);
fori=1:
p
forj=1:
q
k=A(i,j);
ifk<0
k=A(i,j),disp(i),disp(j)
end
ifk==0
n=n+1;
end
ifMAXMAX=k;
end
end
end
n
[pq]=size(A)
MAX
结果:
矩阵A:
A=[1,0;-6,5]
k=
-6
2
1
n=
1
p=
2
q=
2
MAX=
5
30.请设计一个程序,程序完成下列功能:
(1)让用户依次输入两个字符串s1和s2;
(2)比较两个字符串的长度并显示比较结果;
(3)判断s1与s2有没有长度在3个字符以上的相同子串,显示判断结果。
程序:
s1=input('字符1','s');
s2=input('字符2','s');
l1=length(s1);
l2=length(s2);
ifl1==l2
disp('长度相等')
elseifl1>l2
disp('s1>s2')
else
disp('s1end
e=strncmp(s1,s2,3);
ife==0
disp('没有')
else
disp('有')
end
结果:
字符1:
asdfgedf
字符2:
asdfwedsfger
s1有
31.首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。
根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“Youwon”,同时退出游戏。
用户最多可以猜7次
程序:
N=fix(100*rand
(1))
j=0;
x=input('猜想一个数')
whilex~=N
ifx>N
disp('High')
end
ifxdisp('Low')
end
j=j+1
ifj==7
break
end
x=input('猜想一个数')
end
结果:
N=
5
请猜一个数:
15
x=
15
High
j=
1
请猜一个数:
356
x=
356
High
j=
2
请猜一个数:
1
x=
1
Low
j=
3
请猜一个数:
5
x=
5
32.编写程序模拟杨氏双缝干涉
两相干光源到接收屏上P点距离r1=(D2+(y-a/2)2)1/2,r2=(D2+(y+a/2)2)1/2,相位差
Φ=2π(r2-r1)/λ,光强I=4I0cos2(Φ/2)编写程序
程序:
lam=500e-9
a=2e-3;D=1;
ym=5*lam*D/a;xs=ym;
n=101;ys=linspace(-ym,ym,n);
fori=1:
n
r1=sqrt((ys(i)-a/2).^2+D^2);
r2=sqrt((ys(i)+a/2).^2+D^2);
phi=2*pi*(r2-r1)./lam;
B(i,:
)=sum(4*cos(phi/2).^2);
end
N=255;
Br=(B/4.0)*N
subplot(1,2,1)
image(xs,ys,Br);
colormap(gray(N));
subplot(1,2,2)
plot(B,ys)
结果:
33.编写程序模拟光栅衍射
公式:
I=I0(sinα/α)2(sin(λβ)/sinβ)2
α=(πa/λ)sinΦ
β=(πd/λ)sinΦ
程序:
lam=500e-9;N=2;
a=2e-4;D=5;d=5*a;
ym=2*lam*D/a;xs=ym;
n=1001;
ys=linspace(-ym,ym,n);
fori=1:
n
sinphi=ys(i)/D;
alpha=pi*a*sinphi/lam;
beta=pi*d*sinphi/lam;
B(i,:
)=(sin(alpha)./alpha).^2.*(sin(N*beta)./sin(beta)).^2;
B1=B/max(B);
end
NC=255;
Br=(B/max(B))*NC;
subplot(1,2,1)
image(xs,ys,Br);
colormap(gray(NC));
subplot(1,2,2)
plot(B1,ys);
结果:
34假设汽车系在下列各年度的人口统计如表所示
类别
大一新生
学士毕业生
年份
2004
98
94
2005
105
97
2006
121
110
试用一个二维矩阵A表示上述数据。
由上题矩阵A来算出下列各数值:
(1)汽车系在2004、2005、2006年之间的每年平均新生、毕业生人数。
(2)3年来汽车系共有多少毕业生?
(3)在哪几年,新生数目比毕业生多?
(4)三年来每年的毕业生对新生的比例平均值为何?
程序:
A=[20049894;200510597;2006121110];
m=0;n=0;k=0;
fori=1:
3
m=m+A(i,2);
n=n+A(i,3);
ifA(i,2)>A(i,3)
A(i,1)
end
k=k+A(i,3)/A(i,2);
end
average1=m/3
average2=n/3
n
k/3
结果:
ans=
2004
ans=
2005
ans=
2006
average1=
108
average2=
100.3333
n=
301
ans=
0.9307
35.使用randn产生一个10x10的矩阵A
(1)计算B=(A+A’)/2。
请注意,B一定是一个对称矩阵
(2)计算矩阵B的特征向量e1e2…e10(使用函数eig)
(3)验证在i不等于j的情况下,ei和ej的内积必定为0
程序:
A=rand(10,10)
B=(A+A')/2
[sf]=eig(A);
S
fori=1:
10
forj=1:
10
ifi~=j
dot(f(i),f(j))
end
end
end
结果:
A=
Columns1through7
0.58280.20910.41540.21400.68330.45140.6085
0.42350.37980.30500.64350.21260.04390.0158
0.51550.78330.87440.32000.83920.02720.0164
0.33400.68080.01500.96010.62880.31270.1901
0.43290.46110.76800.72660.13380.01290.5869
0.22590.56780.97080.41200.20710.38400.0576
0.57980.79420.99010.74460.60720.68310.3676
0.76040.05920.78890.26790.62990.09280.6315
0.52980.60290.43870.43990.37050.03530.7176
0.64050.05030.49830.93340.57510.61240.6927
Columns8through10
0.08410.12100.2319
0.45440.450