实验二 数组

更新时间:2024-04-07 02:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MATLAB原理及应用

实验二 数组(矩阵)及其运算

一.实验目的

1、掌握MATLAB软件环境下进行的数值数组(矩阵)的创建和访问的基本方法。 2、掌握数值数组(矩阵)的算术运算、逻辑运算 二.实验设备

计算机、MATLAB软件 三.实验内容和程序

?2?13??121?????1、建立A??25?1?和B??31?5?

???4?11???4103??(1)求矩阵A和B的积,矩阵A左除B,以及矩阵A的2次方

(2)求数组A和B的积,数组A左除B,及数组A的2次方 程序:(1)

>> A=[1,2,1;2,-5,-1;4,10,3] A =

1 2 1 2 -5 -1 4 10 3 >> B=[2 -1 3;3 1 -5;4 -1 1] B =

2 -1 3 3 1 -5 4 -1 1 >> C1=A*B; >> C2=A\\B; >> C3=A^2; >> C1,C2,C3 C1 =

12 0 -6 -15 -6 30 50 3 -35 C2 =

0.9333 0.4000 -2.1333 -0.7333 0.4000 -1.4667 2.5333 -2.2000 8.0667 C3 =

9 2 2 -12 19 4

36 -12 3 (2)

>> D1=A.*B; >> D2=A./B; >> D3=A.^2; >> D1,D2,D3 D1 =

2 -2 3 6 5 5 16 -10 3 D2 =

0.5000 -2.0000 0.3333 0.6667 5.0000 0.2000 1.0000 -10.0000 3.0000 D3 =

1 4 1 4 25 1 16 100 9

?15253?1?4611842.建立矩阵 A???6?13125??21310684?3?? 8??5?(1)用两种方法索引出A矩阵第3行第2列的元素,并将其值改为自己的学号加20

(2)索引出A矩阵第2行至第4行、第二列至第5列的所有元素 程序:(1) >> A=[15 2 5 3 -1 4 4 6 11 8 4 3 6 -1 3 12 5 8 2 13 10 6 8 5] A =

15 2 5 3 -1 4 4 6 11 8 4 3 6 -1 3 12 5 8 2 13 10 6 8 5 >> a=A(3,2) a =

-1

>> A(7) ans = -1 >> A(3,2)=56 A =

15 2 5 3 -1 4 4 6 11 8 4 3 6 56 3 12 5 8 2 13 10 6 8 5 (2)>> B=A(2:4,2:5) B =

6 11 8 4 56 3 12 5 13 10 6 8

3、使用两种方法建立范围为[0,20]的向量,使得向量中的元素相邻元素的间隔是2

(1)改变第二个元素的值,并将其赋给一个新的变量(学号加20),并求两个向量的点积

(2)从第二个元素开始提取三个元素,并与向量[1 2 3]做叉积 程序:(1) >> A=0:2:20 A =

0 2 4 6 8 10 12 14 16 18 20 >> B=A B =

0 2 4 6 8 10 12 14 16 18 20 >> B(2)=56 B =

0 56 4 6 8 10 12 14 16 18 20

(2)>> b=B(3:5) b =

4 6 8 >> c=[1,2,3] c =

1 2 3 >> D=cross(b,c) D =

2 -4 2

?64、 复数z1?3?4i,z2?1?2i,z3?2e表达,及计算

iz?z1z2z3。

程序:

>> z1=3+4*i;z2=1+2*i;z3=2*exp(pi*i/6); >> z=z1*z2*z3 z =

-18.6603 +12.3205 5、建立随机矩阵:

(1) 在区间[10,学号加40]内均匀分布的5阶随机矩阵A。然后判断A的元素能否被3整除。

(2) 均值为(学号/10)、方差为(100*学号)的5阶正态分布随机矩阵 (3) 对(1)向右取整,对(2)向左取整数 程序:(1)>> a=10+(36+40-10)*rand(5) a =

63.7718 16.4377 20.4025 19.3645 53.2789 69.7823 28.3809 74.0591 37.8362 12.3570 18.3811 46.0942 73.1730 70.4385 66.0425 70.2828 73.1955 42.0348 62.2857 71.6436 51.7357 73.6826 62.8185 73.3265 54.7965

显然不能被3整除

(2)>> b=36/10+36*100*randn(5)

b =

1.0e+04 *

0.3728 0.3202 0.5182 -0.0364 -0.0105 0.2620 -0.4126 0.1174 -0.0866 -0.0590 -0.1089 -0.3844 -0.2714 0.1153 0.2263 0.1062 -0.2911 0.4937 0.1130 0.3939 -0.2831 -1.0596 -0.6158 -0.3110 0.3997

(3)对(1)向右取整:

>> ceil(a) ans =

64 17 21 20 70 29 75 38 19 47 74 71 71 74 43 63 52 74 63 74 对(2)向左取整:

>> floor(b) ans =

3728 3201 2620 -4126 -1089 -3845 1061 -2911 -2831 -10596

54 13 67 72 55

5181 1174 -2715 4936 -6158 -365 -105 -866 -590 1152 2263 1129 3939 -3110 3996

实验三 MATLAB的符号运算

2221.提取符号表达式ar?u?z?m的自由变量

(当符号表达式中含有多余一个符号变量时,只有一个变量是独立变量,其余的符号当作常量。如果不指定那一个变量当作是自由变量,matlab将基于一定原则选择一个自由变量。) 提示:findsym(s,n) 程序:>> syms a r u z m

>> h=sym('a+r^2+u^2+z+m^2'); >> findsym(h) ans = a,m,r,u,z

x3?x2?12x?5? 2.在MATLAB中计算多项式的父母和分子

x2?23x?2 (提示:使用[n,d]=numden(A))

程序:>> A=sym('(x^3+x^2+1)/(x^2+2)+(2*x+5)/(3*x-2)');

>> [n,d]=numden(A) n =

3*x^4 + 3*x^3 + 3*x^2 + 7*x + 8 d =

(3*x - 2)*(x^2 + 2)

33223x?x?x 2.1、建立符号函数235

(1)提取该表达式的分子和分母,并分别付给两个变量 (2)对这两个变量分别进行代数运算(加减乘除及乘方) 程序:(1)>> A=sym('3/2*x^3+2/3*x^2+3/5*x');

>> [n,d]=numden(A) n =

45*x^3 + 20*x^2 + 18*x d = 30

(2)>> a1=n-d;

>> a2=n+d; >> a3=n*d; >> a4=n/d; >> a5=n^d;

>> a=[a1;a2;a3;a4;a5] a =

45*x^3 + 20*x^2 + 18*x - 30 45*x^3 + 20*x^2 + 18*x + 30 1350*x^3 + 600*x^2 + 540*x (3*x^3)/2 + (2*x^2)/3 + (3*x)/5 (45*x^3 + 20*x^2 + 18*x)^30

3.在MATLAB中,按照不同的方式合并表达式(x项。

程序:>> syms x y

3?e?yx2?y)?(xy?e3yx)的参数类

>> f=sym('(x^3+exp(-y)*x^2-y)*(sqrt(x)*y+exp(3*y)*x)'); >> R1=collect(f,x); >> R2=collect(f,y);

>> R3=collect(f,exp(y)); >> R2=collect(f,exp(y)); >> R=[R1;R2;R3] R =

x^4*exp(3*y) - x^(1/2)*y^2 + x^3*(exp(2*y) + x^(1/2)*y) - x*y*exp(3*y) + x^(5/2)*y*exp(-y)

(x*exp(3*y) + x^(1/2)*y)*(x^3 + exp(-y)*x^2 - y)

(x*exp(3*y) + x^(1/2)*y)*(x^3 + exp(-y)*x^2 - y)

2?t?t?t(x?xe?1)(x?e)的同类项。 e3.1.按来合并表达式

程序:>> syms x t

>> f=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))'); >> collect(f,exp(-t)) ans =

x*exp(-2*t) + (2*x^2 + 1)*exp(-t) + x*(x^2 + 1) 4、使用simple和simplify两个指令分别化简f?3个结果有什么不同

程序:>> f=sym((1/(3*x^3)+6/(4*x^2)-5/x+8)^(1/3));

165???8,比较两3x34x2x>> simplify(f) ans =

((48*x^3 - 30*x^2 + 9*x + 2)/(6*x^3))^(1/3) >> simple(f) simplify:

(6^(2/3)*((48*x^3 - 30*x^2 + 9*x + 2)/x^3)^(1/3))/6 radsimp:

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) simplify(100):

((48*x^3 - 30*x^2 + 9*x + 2)/(6*x^3))^(1/3) combine(sincos):

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) combine(sinhcosh):

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) combine(ln):

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) factor:

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) expand:

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) combine:

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) rewrite(exp):

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) rewrite(sincos):

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) rewrite(sinhcosh):

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) rewrite(tan):

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) mwcos2sin:

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) collect(x):

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3) ans =

(3/(2*x^2) - 5/x + 1/(3*x^3) + 8)^(1/3)

xx2x3???的和。5.求级数1+x+x+…+x+…和1??(使用symsum函数)

11?21?2?32

k

程序:>> symsum(x^k,k,0,inf) ans =

piecewise([1 <= x, Inf], [abs(x) < 1, -1/(x - 1)]) >> symsum(x^k/sym('k!'),k,0,inf) ans = exp(x)

6.分别求下例积分

b4111dxdx(1)? (2) (3)?a1?x2?01?x2dx 1?x2 程序:(1)>> f=sym('1/(1+x^2)'); >> int(f) ans = atan(x)

(2) >> syms a b >> int(f,a,b) ans =

atan(b) - atan(a) (3) >> int(f,0,4) ans = atan(4)

>> eval(ans) ans =

1.3258

7.

y?sin(x?2) 求y' 、y'' 、y'''

2 程序:>> y=sym('sin(x^2+2)');

>> diff(y) ans =

2*x*cos(x^2 + 2) >> diff(y,2)

ans =

2*cos(x^2 + 2) - 4*x^2*sin(x^2 + 2) >> diff(y,3) ans =

- 12*x*sin(x^2 + 2) - 8*x^3*cos(x^2 + 2)

?x2?2x?1?0?2?4?x?3z8. 求三元非线性方程组 ?2y?z2??1的解 ?程序:>> A=sym('x^2+2*x+1=0');

>> B=sym('x^2+3*z'); >> C=sym('2*y+z^2'); >> [x,y,z]=solve(A,B,C) x = -1 y = -1/18 z = -1/3

实验四 MATLAB程序设计

?x2?1x?1?1.为 y??x?2x?1?x2?1x?1?编写赋值程序。

建立M文本程序: x=input('x='); if x>1

y=x^2+1; else if x==1 y=x+2; else x<1

y=x^2-1; end end

保存为”ex2.m”文件 运行程序如下

>> ex2 x=1 >> y y = 3

2.使用for ... end循环的array向量编程求出 1+4+7...+200 的值 程序: >> s=0;

>> for k=1:3:200 s=s+k; end >> s s =

6700

3.计算1+4+7...+200 的值,当和大于2000时终止计算。 程序:>> s=0; >> for k=1:3:200; if s>2000

break; else s=s+k; end end >> s s =

2035 >> k k = 112

3.计算从1开始多少个自然数之和超过200。 >> s=0;

>> for k=1:1:200; if s>200 break; else s=s+k; end end >> k k = 21 >> s s = 210

4.求1!+3!+5!+……+11!的值。 程序: >> s=0; >> m=1;

>> for n=1:2:11; m=m*n; s=s+m; end

>> s s =

11464

5.写程序,判断一年是否为闰年,符合下面两条件之一:(1994~2014) A、能被4整除,不能被100整除 B、能被4整除,不能被400整除

程序:

>> k=0;

>> for y=1994:2014;

if((rem(y,4)==0&rem(y,100)~=0)|(rem(y,4)==0&rem(y,400)~=0)); k=k+1; end end >> k k = 4

实验五 MATLAB计算机可视化与GUI

1、编写程序绘制如下图形(时间间隔自己设定)

图中曲线标注:sin(t)标注在(1.7*pi,-0.3),cos(t)标注在(1.6*pi,0.8) 程序:

>> t=0:0.01:4*pi; >> y=sin(t); >> y1=cos(t);

>> plot(t,y,'r',t,y1,'--b') >> text(1.7*pi,-0.3,'sint') >> text(1.6*pi,0.8,'cost')

2.使用subplot指令在不同区域画出下列曲线

y=sinAx;y=cosAx;y=Aex,y=x^2。x的取值范围是[0,15],A为自己的学号。 程序:

>> x=0:0.1:15; >> y1=sin(36*x); >> subplot(2,2,1); >> plot(x,y1); >> y2=cos(36*x); >> subplot(2,2,2); >> plot(x,y2); >> y3=(36*exp(x)); >> subplot(2,2,3); >> plot(x,y3);

>>y4=x.^3; >>subplot(2,2,4); >>plot(x,y4);

3.画出衰减振荡曲线y?esin3t及其它的包络线y0?e。t的取值范围是[0,4?],图的标题字体大小(fontsize)为10号,字体(fontname)宋体,字体风格为斜体1(it)字体,并选择合适的位置在图上标注自己的学号,姓名,以及作图日期,字体大小、字体风格自己指定。 程序:

>> t=0:0.01:4*pi; >> y0=exp(-t/3); >> y1=-exp(-t/3);

>> y=exp(-t/3).*sin(3*t);

>> plot(t,y0,'--b',t,y,'r',t,y1,'--b'); >> title('y=e^(-t/3)sin(3t)及它的包络线

','fontsize',10','fontweigh','bold','fontangle','italic'); >> text(8.5,-0.6,['姓名:谢述春

'],'fontsize',10','fontweigh','bold','fontangle','italic'); >> text(8.5,-0.7,['学号:1201064236

' ],'fontsize',10','fontweigh','bold','fontangle','italic');

?t3?t3>> text(8.5,-0.8,[' 作图时间:2014.5.18

'],'fontsize',10','fontweigh','bold','fontangle','italic');

本文来源:https://www.bwwdw.com/article/tsar.html

Top