资源描述
实验2 MATLAB数值计算、符号运算功能
一、 实验目的
1、掌握建立矩阵、矩阵分析与处理的方法。
2、掌握线性方程组的求解方法。
3、掌握数据统计和分析方法、多项式的常用运算。
4、掌握求数值导数和数值积分、常微分方程数值求解、非线性代数方程数值求解的方法。
5、掌握定义符号对象的方法、符号表达式的运算法则及符号矩阵运算、符号函数极限及导数、符号函数定积分和不定积分的方法。
二、 预习要求
(1) 复习4、5、6章所讲内容;
(2) 熟悉MATLAB中的数值计算和符号运算的实现方法和主要函数。
三、 实验内容
1、 已知,求A的特征值及特征向量,并分析其数学意义。
>> 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
V为A的特征向量,D为A的特征值,3个特征值是-25.3169、10.5182和16.8351。
>> A*V
ans =
-18.0503 -2.9487 4.6007
15.4017 8.2743 14.6886
-8.8273 -5.7857 6.8190
>> V*D
ans =
-18.0503 -2.9487 4.6007
15.4017 8.2743 14.6886
-8.8273 -5.7857 6.8190
经过计算,A*V=V*D。
2、 不用rot90函数,实现方阵左旋90°或右旋90°的功能。例如,原矩阵为A,A左旋后得到B,右旋后得到C。
,,
提示:先将A转置,再作上下翻转,则完成左旋90°;如将A转置后作左右翻转,则完成右旋转90°,可用flipud、fliplr函数。
>> a=[1 4 7 10;2 5 8 11;3 6 9 12]
a=
1 4 7 10
2 5 8 11
3 6 9 12
>> B=rot90(a)
B =
10 11 12
7 8 9
4 5 6
1 2 3
>>C= rot90(s,3)
C=
3 2 1
6 5 4
9 8 7
12 11 10
3建立一个5*5矩阵,求它的行列式值、秩。A=fix(10*rand(5))
H=det(A)
Trace=trace(A)
Rank=rank(A)
Norm=norm(A)
A =
2 9 4 0 7
5 9 9 8 3
9 4 7 9 6
9 8 9 6 1
1 1 6 7 7
H =
-12583
Trace =
31
Rank =
5
Norm =
30.1601
4下面是一个线性方程组,
(1)求方程的解。
A=[1/2,1/3,1/4;1/3,1/4,1/5;1/4,1/5,1/6];
b=[0.95,0.67,0.52]';
x=inv(A)*b
%(2):
B=[0.95,0.67,0.53]';
x=inv(A)*B
%(3):
cond(A)
x =
1.2000
0.6000
0.6000
x =
3.0000
-6.6000
6.6000
ans =
1.3533e+003
(2)将方程右边向量元素b3=0.52改为0.53再求解,并比较b3的变化和解的相对变化。
A=hilb(4)
A(:,1)=[]
A(4,:)=[]
B=[0.95,0.67,0.52]';
X=inv(A)*B
B1=[0.95,0.67,0.53]';
X1=inv(A)*B1
N=cond(B)
N1=cond(B1)
Na=cond(A) %矩阵A为病态矩阵
A =
1.0000 0.5000 0.3333 0.2500
0.5000 0.3333 0.2500 0.2000
0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429
A =
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
0.2500 0.2000 0.1667
0.2000 0.1667 0.1429
A =
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
0.2500 0.2000 0.1667
X =
1.2000
0.6000
0.6000
X1 =
3.0000
-6.6000
6.6000
N =
1
N1 =
1
Na =
1.3533e+003
(3) 计算系数矩阵的条件数并分析结论。
无
5建立矩阵A,试比较sqrtm(A)和sqrt(A),分析它们的区别。
A=[1,4,9;16,25,36;49,64,81]
B=sqrtm(A)
C=sqrt(A) %sqrtm函数是以矩阵为单位进行计算,sqrt函数是以矩阵中的元素进行计算
A =
1 4 9
16 25 36
49 64 81
B =
0.6344 + 1.3620i 0.3688 + 0.7235i 0.7983 - 0.4388i
1.4489 + 1.1717i 2.7697 + 0.6224i 3.2141 - 0.3775i
4.3578 - 1.6237i 5.7110 - 0.8625i 7.7767 + 0.5231i
C =
1 2 3
4 5 6
7 8 9
6将100个学生5门功课的成绩存入矩阵P中,进行如下处理:
(1)分别求每门课的最高分、最低分及相应学生序号。
A=45+(95-45)*rand(100,5);
[Y,U]=max(A)
[X,U]=min(A)
运行结果:
Y =
94.9721 93.9250 94.5146 94.3265 94.5999
U =
94 80 45 14 87
X =
45.3517 45.6929 45.3851 45.0906 45.2279
U =
48 23 27 23 60
(2)分别求每门课的平均分和标准方差。
A=45+(95-45)*rand(100,5);
aver=mean(A)
s1=std(A)
运行结果:
aver =
67.1876 70.1262 69.0017 71.0174 70.3569
s1 =
13.2273 14.1307 13.8053 15.1191 14.7097
(3)5门课程总分的最高分、最低分及相应学生序号。
A=45+(95-45)*rand(100,5);
B=sum(A,2)
disp('最高分及学号:'),[Y,U]=max(B)
disp('最低分及学号:'),[X,U]=min(B)
运行结果:
最高分及学号:
Y =
432.6472
U =
84
最低分及学号:
X =
287.6246
U =
50
(4)将5门课总分按从大到小顺序存入zcj中,相应学生序号存入xsxh。
A=45+(95-45)*rand(100,5);
B=sum(A,2);
[X,I]=sort(B);
zcj=flipud(X)
xsxh=flipud(I)
提示:编程时,为避免输入学生成绩的麻烦,可用取值范围在[45,95]之间的随机矩阵来表示学生成绩。
7利用MATLAB提供的rand函数生成30000个符合均匀分布的随机数,然后检验随机数的性质:
(1)均值和标准方差;
(2)最大元素和最小元素;
(3)大于0.5的随机数个数占总数的百分比。
A=rand(1,30000);
aver=mean(A)
s1=std(A)
max=max(max(A))
min=min(min(A))
k=find(A>0.5);
a=length(k);
disp('百分比是:'),per=a/30000
运行结果:
均值是:
aver =
0.4982
s1 =
0.2889
max =
1.0000
min =
4.8158e-005
百分比是:
per =
0.4988
8分别用3种不同的数值方法求解线性方程组。(提示:LU函数、inv函数)
9求函数在(0,1)内的最小值。
10已知x=6,y=5,利用符号表达式:。(提示:定义符号常数,)
x=sym('6'),y=sym('5')
x =
6
y =
5
>> z=(x+1)/(sqrt(3+x)-sqrt(y))
z =
7/(3-5^(1/2))
11已知:,,求:
(1)。
(2)B的逆矩阵并验证结果。
(3)包括B矩阵主对角线元素的下三角阵。
(4)B的行列式值。
提示:用于数值矩阵分析的有关函数同样适用于符号矩阵。验证结果时须将结果化简。
(1) B=P1 P2A
P1=[0 1 0;1 0 0;0 0 1]
P1 =
0 1 0
1 0 0
0 0 1
>> P2=[1 0 0;0 1 0;1 0 1]
P2 =
1 0 0
0 1 0
1 0 1
>> a=sym('a');b=sym('b');c=sym('c');d=sym('d');e=sym('e');f=sym('f');g=sym('g');h=sym('h');i=sym('i');
>> A=[a b c;d e f;g h i]
A =
[ a, b, c]
[ d, e, f]
[ g, h, i]
B=P1*P2*A
B =
[ d, e, f]
[ a, b, c]
[ a+g, b+h, c+i]
(2) B的逆矩阵并验证结果
C=inv(B)
C =
[ (i*b-c*h)/(i*d*b-d*c*h-i*a*e+a*f*h+g*e*c-g*f*b), (-e*c-i*e+f*b+f*h)/(i*d*b-d*c*h-i*a*e+a*f*h+g*e*c-g*f*b), -(-e*c+f*b)/(i*d*b-d*c*h-i*a*e+a*f*h+g*e*c-g*f*b)]
[ -(i*a-c*g)/(i*d*b-d*c*h-i*a*e+a*f*h+g*e*c-g*f*b), -(-d*c-i*d+f*a+f*g)/(i*d*b-d*c*h-i*a*e+a*f*h+g*e*c-g*f*b), (-d*c+f*a)/(i*d*b-d*c*h-i*a*e+a*f*h+g*e*c-g*f*b)]
[ (a*h-b*g)/(i*d*b-d*c*h-i*a*e+a*f*h+g*e*c-g*f*b), (-d*b-d*h+e*a+e*g)/(i*d*b-d*c*h-i*a*e+a*f*h+g*e*c-g*f*b), -(-d*b+e*a)/(i*d*b-d*c*h-i*a*e+a*f*h+g*e*c-g*f*b)]
(3)包括B矩阵主对角线元素的下三角阵
tril(B)
ans =
[ d, 0, 0]
[ a, b, 0]
[ a+g, b+h, c+l]
(4)B的行列式值
det(B)
ans =
i*d*b-d*c*h-i*a*e+a*f*h+g*e*c-g*f*b
12 用符号方法求下列极限或导数。
(1);
(2)已知,分别求、、。
(1)x=sym('x')
x =
x
>> f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/sin(x).^3
f =
(x*(exp(sin(x))+1)-2*exp(tan(x))+2)/sin(x)^3
>> limit(f)
ans =
-1/2
(4)x=sym('x')
x =
x
>> y=(1-cos(2*x))/x
y =
(1-cos(2*x))/x
>> diff(y,x,1)
ans =
2*sin(2*x)/x-(1-cos(2*x))/x^2
>> diff(y,x,2)
ans =
4*cos(2*x)/x-4*sin(2*x)/x^2+2*(1-cos(2*x))/x^3
>> syms a t x;
>> f=sym('[a^x,t^3;t*cos(x),log(x)]')
f =
[ a^x, t^3]
[ t*cos(x), log(x)]
>> diff(f,x,1);
>> diff(f,x,1)
ans =
[ a^x*log(a), 0]
[ -t*sin(x), 1/x]
>> diff(f,t,2)
ans =
[ 0, 6*t]
[ 0, 0]
>> diff(f,x)/diff(f,t)
ans =
[ 0, 1/cos(x)*a^x*log(a)]
[ 1/3/t^2/x, -1/cos(x)*t*sin(x)]
13用符号方法求下列积分:
(1);
(2)。
(1)sym('x')
ans =
x
>> f=1/(1+x^4+x^8)
f =
1/(1+x^4+x^8)
>> int(f,x)
ans =
1/6*3^(1/2)*atan(1/3*(2*x-1)*3^(1/2))+1/6*3^(1/2)*atan(1/3*(1+2*x)*3^(1/2))-1/12*3^(1/2)*log(-x^2+3^(1/2)*x-1)+1/12*3^(1/2)*log(x^2+3^(1/2)*x+1)
(3)syms x
>> f=(x.^2+1)/(x.^4+1)
f =
(x^2+1)/(1+x^4)
>> int(f,x,0,inf)
ans =
1/2*pi*2^(1/2)
14化简表达式。
(1);
byte1=sym('byte1')
byte1 =
byte1
>> byte2=sym('byte2')
byte2 =
byte2
>> S=sin(byte1)*cos(byte2)-cos(byte1)*sin(byte2)
S =
sin(byte1)*cos(byte2)-cos(byte1)*sin(byte2)
>> simplify(S)
ans =
sin(byte1)*cos(byte2)-cos(byte1)*sin(byte2)
(2)。
x=sym('x')
x =
x
>> S=(4*x^2+8*x+3)/(2*x+1)
S =
(4*x^2+8*x+3)/(2*x+1)
>> simple(s)
>> simple(S)
simplify:
2*x+3
radsimp:
2*x+3
combine(trig):
2*x+3
factor:
2*x+3
expand:
4/(2*x+1)*x^2+8/(2*x+1)*x+3/(2*x+1)
combine:
(4*x^2+8*x+3)/(2*x+1)
convert(exp):
(4*x^2+8*x+3)/(2*x+1)
convert(sincos):
(4*x^2+8*x+3)/(2*x+1)
convert(tan):
(4*x^2+8*x+3)/(2*x+1)
collect(x):
(4*x^2+8*x+3)/(2*x+1)
ans =
2*x+3
15分解因式。
(1);
x=sym('x')
x =
x
>> y=sym('y')
y =
y
>> A=x^4-y^4
A =
x^4-y^4
>> factor(A)
ans =
(x-y)*(x+y)*(x^2+y^2)
(2)5135。
factor(sym('5135'))
ans =
(5)*(13)*(79)
四、 实验报告
1、 实验内容中的代码与运行结果的截图;
2、 本次实验的总结。
展开阅读全文