1、实验2 MATLAB数值计算、符号运算功能 一、 实验目的 1、掌握建立矩阵、矩阵分析与处理的方法。 2、掌握线性方程组的求解方法。 3、掌握数据统计和分析方法、多项式的常用运算。 4、掌握求数值导数和数值积分、常微分方程数值求解、非线性代数方程数值求解的方法。 5、掌握定义符号对象的方法、符号表达式的运算法则及符号矩阵运算、符号函数极限及导数、符号函数定积分和不定积分的方法。 二、 预习要求 (1) 复习4、5、6章所讲内容; (2) 熟悉MATLAB中的数值计算和符号运算的实现方法和主要函数。 三、 实验内容 1、 已知,求A的特征值及特征向量,并分析其
2、数学意义。 >> 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为
3、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
4、 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
5、 >> 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
6、 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
7、 = 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.60
8、00 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.333
9、3 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
10、 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]
11、 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
12、 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
13、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
14、门课程总分的最高分、最低分及相应学生序号。 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); z
15、cj=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('百分
16、比是:'),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)-sq
17、rt(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
18、 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)
19、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
20、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
21、) 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(
22、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=s
23、ym('[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 = [
24、 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^
25、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
26、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) >>
27、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+
28、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、 本次实验的总结。






