MATLAB语言及应用上机实习报告Word下载.docx
《MATLAB语言及应用上机实习报告Word下载.docx》由会员分享,可在线阅读,更多相关《MATLAB语言及应用上机实习报告Word下载.docx(48页珍藏版)》请在冰豆网上搜索。
A+B
043
569
312
A*B
779
131921
131
norm(A)
9.5758
A^(-1)
-0.83330.33330.5000
-0.33330.3333-1.0000
0.8333-0.33330.5000
例1-8显示上例中矩阵A的第2行第3列元素,并对其进行修改.
A(2,3)
6
A(2,3)=1;
1
例1-9分别画出函数
和
在区间[-6
6
]上的图形。
x=(-6)*pi:
0.01:
6*pi;
y=(x.^2).*cos(x);
z=sin(x)./x;
plot(x,y);
figure,plot(x,z);
例1-10试求方程组
的解。
a=[1,2,1;
4,2,-6;
-1,0,2];
b=[2;
3;
4];
x=a\b
-30.0000
22.5000
-13.0000
例1-11试求矩阵方程
b=[1,2,3;
1,1,1];
x=b/a
3.0000-2.0000-6.0000
2.0000-1.5000-5.0000
例1-12建立同时计算
的函数。
即任给a,b,n三个数,返回y1,y2.
functionmianfunction()
disp(num2str(y1(1,2,3)))
disp(num2str(y2(1,2,3)))
functiony=y1(a,b,n)
y=(a+b)^n;
end
functiony=y2(a,b,n)
y=(a-b)^n;
end
运行显示:
mainfuction
27
-1
例1-13设
,试画出在[0,2]上的曲线段。
%加坐标网格
x=linspace(0,2);
y=1./((x-0.3).^2+0.01)+1./((x-0.9).^2+0.04)-6;
gridon;
例如:
对于例题1-13中所定义的f(x),求其零点c.
x=solve('
1/((x-0.3)^2+0.01)+1/((x-0.9)^2+0.04)-6=0'
'
x'
)
-0.131********960646637049059278162
1.2995496825848217892317327263734
0.61603416775739233856937893320409-0.22190336322056809485939175107611i
0.61603416775739233856937893320409+0.22190336322056809485939175107611i
求一元函数最小值(fminbnd命令)
由于fminbnd只能求一个最小值,通过观察函数可知极小值点为-∞和+∞
x=fminbnd(y,0,inf)
Inf
y=@(x)1/((x-0.3)^2+0.01)+1/((x-0.9)^2+0.04)-6;
[x,y]=fminbnd(y,0,inf)
-6
[x,y]=fminbnd(y,-inf,0)
%运行该命令时会报错,因为这里的x为NAN,这可能是因为fmindnd或optimget
函数的代码有bug导致
求例题1-13中所定义f(x)在[0,1]上的定积分
.
symsx;
int(1/((x-0.3)^2+0.01)+1/((x-0.9)^2+0.04)-6,0,2)
13*pi+atan(35641981496012/67550630868559)-12
例1-14求二重积分
及三重积分
symsxy;
int(int(x*y,x,1,2),y,0,1)
3/4
symsxyz;
int(int(int(x*exp(y)+z^2,x,0,1),y,0,1),z,0,1)
exp
(1)/2-1/6
例1-15已知
,设该曲线在区间[0,x]上所围曲边梯形面积为s,试求当s分别为5,10时的x的值。
symsxt;
y=sym(t^3-5*t^2+6*t+5);
s=int(y,t,0,x);
x1=solve(s==5,x)
x1=
x2=solve(s==10,x)
x2=
例1-16利用MATLAB命令求解无理数的近似值。
(1)用函数零点命令(fzero)求无理数
的近似值;
f=@(x)x-exp
(1);
fzero(f,2)
2.7183
(2)用定积分计算命令(trapz,quad,quadl)求无理数
的近似值。
(提示:
e=2.7182818284…,
=0.6931471806…)
x=1:
0.001:
2;
y=1./x;
trapz(x,y)
0.6931
例1-17求极限
symsxh;
limit((sin(x+h)-sin(x))/h,h,0)
cos(x)
例1-18:
设
,求
symsxyn;
f=sym(x^n*y+sin(y));
diff(f,x)
diff(f,y)
diff(diff(f,x),x)
diff(diff(f,y),y)
diff(diff(f,x),y)
例1-19:
求
►symsxyz%声明符号变量,注意变量间必须用空格分开
symsxyzt;
int(x*y/(1+x^2),x)
int(x*y/(1+x^2),y,0,t)
int(int(x*y/(1+x^2),y,0,x^(1/2)),x,0,1)
int(int(int(x+y+z,z,1-x-y),y,0,1-x),x,0,1)
级数求和(symsum)
%求级数
(ans=inf即
symsk;
f=@(k)1/k;
symsum(f,k,1,inf)
Inf
(ans=1)
f=@(k)1/(k*(k+1));
1
%求级数
(ans=3/2*a)
symska;
f=@(k)a/3^k;
symsum(f,k,0,inf)
(3*a)/2
泰勒展开(taylor)
►symsx
►fy=1/(1>
taylor(f,x,'
order'
8)
-x^7+x^6-x^4+x^3-x+1+x+x^2)
求fx对自变量x(默认)在x=0点(默认)泰勒展开前6项(默认)
f=@(x)1/(1+x+x^2);
taylor(f,x)
-x^4+x^3-x+1
求fx对自变量x(默认)在x=1点泰勒展开式前8项
taylor(f,x,1,'
(2*(x-1)^2)/9-x/3-(x-1)^3/9+(x-1)^4/27-(x-1)^6/81+(x-1)^7/81+2/3
方程求根(solve)
►fx=sym('
a*x^2+b*x+c'
);
%建立符号函数
方程fx=0的符号解
symsabcx;
y=a*x^2+b*x+c==0;
solve(y,x)
-(b+(b^2-4*a*c)^(1/2))/(2*a)
-(b-(b^2-4*a*c)^(1/2))/(2*a)
求方程fx=0关于变量b的符号解
solve(y,b)
-(a*x^2+c)/x
微分方程(组)求解(dsolve)
求方程y'
=5的通解,默认自变量为t
symsy(t);
dsolve(diff(y)==5)
C1+5*t
=x的通解,指定自变量为x
symsy(x);
dsolve(diff(y,x)==x)
x^2/2+C2
'
=1+y'
满足y(0)=1,y'
(0)=0的特解
dsolve('
D2y==1+Dy'
y(0)==1,'
Dy(0)==0'
exp(t)-t
求方程组
的通解,默认自变量为t
symsy(t)x(t);
z=dsolve('
Dx==x+y'
Dy==2*x'
);
z.x
C6*exp(2*t)-(C5*exp(-t))/2
z.y
C5*exp(-t)+C6*exp(2*t)
实验2MATLAB绘制二维、三维图形
例2-1在子图形窗口中画出
上正弦、余弦曲线。
x=linspace(0,2*pi);
y1=sin(x);
y2=cos(x);
subplot(2,1,1);
plot(x,y1);
subplot(2,1,2);
plot(x,y2);
例2-2画出
上正弦、余弦曲线并对线型加粗、点型加大,重新定置坐标系以及加注相关说明和注释。
plot(x,y1,'
LineWidth'
10);
title('
y=sinx'
xlabel('
ylabel('
y'
plot(x,y2,'
o'
MarkerSize'
3);
axis([-1,8,-2,2]);
y=cosx'
例2-3分别在两个图形窗口画出填充一正方形和极坐标方程
的图形。
a=0:
2*pi;
r=2*sin(2*a).*cos(2*a);
polar(a,r);
[x,y]=pol2cart(a,r);
例2-4在[-2.5,2.5]上画出函数
的直方图和阶梯图。
x=linspace(-2.5,2.5,100);
y=exp(-x.^2);
bar(x,y);
stairs(x,y);
例2-5采用不同形式(直角坐标、参数、极坐标),画出单位圆
ezplot('
x^2+y^2-1'
[-1,1]);
axisequal;
0.001*pi:
x=sin(a);
y=cos(a);
r=ones(1,2001);
例2-6画出螺旋线:
x=sin(t),y=cos(t),z=t,
上一段曲线。
t=linspace(0,10*pi,10000);
x=sin(t);
y=cos(t);
z=t;
plot3(x,y,z);
例2-7画出矩形域[-1,1]×
[-1,1]上旋转抛物面:
x=-1:
1;
[x,y]=meshgrid(x);
z=x.^2+y.^2;
a=surf(x,y,z);
set(a,'
edgecolor'
none'
例2-8在圆形域
上绘制旋转抛物面:
[x,y]=meshgrid(-1:
0.0001:
1);
axis([-1,1-1,10,1]);
axisoff;
gridoff;
例2-9画出
在
上的图形。
[x,y]=meshgrid(-7.5:
7.5);
z=sin((x.^2+y.^2).^(1/2))./(x.^2+y.^2).^(1/2);
axis([-7.5,7.5-7.5,7.5-0.5,1]);
例2-10有一组实验数据如下表所示,试绘图表示。
时间
123456789
数据1
12.5113.5415.6015.9220.6424.5330.2450.0036.34
数据2
9.8720.5432.2140.5048.3164.5172.3285.9889.77
数据3
10.118.1414.1710.1440.5039.4560.1170.1340.90
x=1:
9;
x1=1:
0.1:
y1=[12.51,13.54,15.60,15.92,20.64,24.53,30.24,50.00,36.34];
y2=[9.87,20.54,32.21,40.50,48.31,64.51,72.32,85.98,89.77];
y3=[10.11,8.14,14.17,10.14,40.50,39.45,60.11,70.13,40.90];
yy1=spline(x,y1,x1);
yy2=spline(x,y2,x1);
yy3=spline(x,y3,x1);
x,y2,'
*'
x,y3,'
+'
x1,yy1,x1,yy2,x1,yy3);
legend('
数据1'
数据2'
数据3'
set(legend,'
Position'
[0.3994047635545330.7634920668980430.1285714269216570.126190472784496]);
实验3MATLAB编程介绍与循环结构
例3-1:
求n(n=100)个奇数的和:
s=1+3+5+…+(2n-1).
n=100;
s=0;
fori=1:
2:
(2*n-1)
s=s+i;
disp(s);
10000
例3-2:
求正整数n的阶乘:
p=1×
2×
3×
…×
n=n!
,并求出n=20时的结果。
n=20;
p=1;
n
p=p*i;
disp(p);
2.4329e+18
例3-3:
根据麦克劳林公式可以得到e≈1+1+1/2!
+1/3!
+…+1/n!
,试求e的近似值。
n=1000000;
s=1;
a=1/factorial(i);
s=s+a;
formatlong;
2.718281828459046
例3-4:
对于数列
求其前n项和不超过1000时的n的值及和.
n=1000;
a=(i)^(1/2);
2.109745588748073e+04
例3-5:
根据e≈1+1+1/2!
求e的近似值,要求精确到10-8。
a=ones(1,1000000);
1000000;
a(i)=1/factorial(i);
s=s+a(i);
if(i>
=2)&
&
(abs(a(i-1)-a(i))<
10^(-8))
break;
2.718281828446759
实验4MATLAB选择结构与应用实验
例4-1:
求任意有限数组a=[a
(1),a
(2),…,a(n)]中数值最大的元素M以及所在位置k.
a=rand(1,n);
ifa
(1)>
a
(2)
m=a
(1);
b=2;
else
m=a
(2);
fori=2:
(n-1)
ifm<
a(i+1)
m=a(i+1);
b=i+1;
disp(['
第'
num2str(b),'
个元素最大,为:
num2str(m)]);
第25个元素最大,为:
0.99979
例4-2:
编写一个函数将百分制成绩转换为优(A),良(B),中(C),差(D)四等级.
n=10;
a=randi([0,100],1,n);
ifa(i)>
=90
disp(['
num2str(i),'
个学生的成绩是A'
]);
elseifa(i)>
=80
个学生的成绩是B'
=70
个学生的成绩是C'
else
个学生的成绩是D'
第1个学生的成绩是C
第2个学生的成绩是D
第3个学生的成绩是D
第4个学生的成绩是D
第5个学生的成绩是D
第6个学生的成绩是B
第7个学生的成绩是C
第8个学生的成绩是D
第9个学生的成绩是A
第10个学生的成绩是D
例4-3:
Fibonacci数组的元素满足Fibonacci规则:
{an}:
a1=a2=1,ak+2=ak+ak+1,k=1,2,3,.
求出该数组中第一个大于10000的元素
a
(1)=1;
a
(2)=1;
10000
a(i+2)=a(i)+a(i+1);
ifa(i+2)>
10000
end
Fibonacci数组中的第'
num2str(i+2),'
个元素第一个大于10000,元素的值为:
num2str(a(i+2))])
Fibonacci数组中的第21个元素第一个大于10000,元素的值为:
10946
例4-4:
动态显示数列极限
的逼近过程。
a=ones(1,n);
a(i)=(1+1/i)^i;
plot(i,a(i),'
holdon;
x=0;
20
axis([x,x+50,2,3]);
pause(0.1);
x=x+50;
问题1:
对于数列
为常数,可以证明该数列收敛,且
显然,这个结论提供了一个求平方根的
近似方法,试编制一个函数程序,对任意给定的正实数A,求出
的近似值(精确到10-5)。
n=10000000;
A=input('
请输入需要开方的数:
a(i+1)=(a(i)+A/a(i))/2;
ifabs(a(i+1)-a(i))<
10^(-5)
disp(a(i+1));
1000
31.622776601684315
问题2:
对于任意一个正整数,都可以判断其是质数还是合数,这一点在一些有关数论问题中是经常用到的。
但当一个正的奇数比较大时,手工来判断是否为质数往往不很容易。
现在要求编制一个函数程序,对任意一个正整数,判断出它是质数还是合数,若是质数,则返回值1;
若是合数,返回值0,同时给出两个因数;
若输入非正数,则返回值-1,并提示错误。
function[s,factor1,factor2]=prime
factor1=0;
factor2=0;
a=input('
请输入需要计算大于5的正整数(如果您输入有含有小数,将向下取整):
a=floor(a);
b=num2str(a);
N=length(b);
sd=str2num(b(N));
if(a<
=0)||(a==inf)||(isnan(a))
s=-1;
disp('
这不是一个正整数'
elseif(sd==0)||(sd==2)||(sd==4)||(sd==6)||(sd==8)
s=0;
factor1=2;
factor2=a/2;
因子分别为:
num2str(factor