江 苏 大 学
《电气工程工具软件培训》课程设计报告
设计题目: MATLAB工具软件
专业班级: 电气1201
学生姓名: 蔡婷
学生学号: 3120501004
指导老师: 黄永红
完成日期: 2013.7.3
江苏大学·电气信息工程学院
(a组指导老师:黄永红; b组指导老师: 刘辉; c组指导老师:王博)
一 MATLAB课程设计的目的和要求
1. MATLAB软件功能简介
MATLAB的名称源自Matrix Laboratory,1984年由美国Mathworks公司推向市场。它是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛的应用于科学计算、控制系统和信息处理等领域的分析、仿真和设计工作。 MATLAB软件包括五大通用功能,数值计算功能(Nemeric)、符号运算功能(Symbolic)、数据可视化功能(Graphic)、数字图形文字统一处理功能(Notebook)和建模仿真可视化功能(Simulink)。其中,符号运算功能的实现是通过请求MAPLE内核计算并将结果返回到MATLAB命令窗口。该软件有三大特点,一是功能强大;二是界面友善、语言自然;三是开放性强。目前,Mathworks公司已推出30多个应用工具箱。MATLAB在线性代数、矩阵分析、数值及优化、数值统计和随机信号分析、电路与系统、系统动力学、次那好和图像处理、控制理论分析和系统设计、过程控制、建模和仿真、通信系统以及财政金融等众多领域的理论研究和工程设计中得到了广泛应用。
2. MATLAB课程设计的目的
本次课程设计主要是为了使学生了解MATLAB软件的基本知识,熟悉MATLAB的上机环境,掌握MATLAB数值运算、程序设计、二维/三维绘图、符号运算、Simulink仿真等相关知识,并初步具备将一般数学问题转化为对应的计算机进行处理的能力,以便为今后进一步的学习打下坚定基础。
二 MATLAB课程内容
1 MATLAB语言基础
实验目的:基本掌握 MATLAB 向量、 矩阵、 数组的生成及其基本运算(区分数组运算和矩阵运算)、常用的数学函数。了解字符串的操作。
实验内容:
① 创建以下矩阵:A为初值为1,终值为12,元素数目为6的行向量;;C为B的三次方矩阵;D由B和C横向拼接并去除第一列、最后一列和第一行元素而成;E由B和C纵向拼接而成;F抽取E的3~5行和第2~3列元素生成;G由F经变形为3×4的矩阵而得;H由B和C数组相乘运算而成,同时将 H(1,1)和H(2,1)分别变为π的平方和立方,H(2,2)=arccos(2),H(3,3)= H(1,1)+ H(2,1)。
源程序:
>> A=[1,3,2,5,6,12]
>> B=[2,4,3,6;1,5,3,2;2,7,7,9;1,2,3,5]
>> C=B*B*B
>> M=[B C]
>> D=M(2:4,2:7)
>> E=[B;C]
>> F=E(3:5,2:3)
>> G=repmat(F,1,2)
>> H=B*C
>> H(1,1)=pi^2
>> H(2,1)=pi^3
>> H(2,2)=acos(2)
>> H(3,3)=H(1,1)+H(2,1)
运行结果:
A =
1 3 2 5 6 12
B =
2 4 3 6
1 5 3 2
2 7 7 9
1 2 3 5
C =
292 938 873 1140
227 751 681 868
518 1675 1555 2021
227 724 681 895
M =
Columns 1 through 6
2 4 3 6 292 938
1 5 3 2 227 751
2 7 7 9 518 1675
1 2 3 5 227 724
Columns 7 through 8
873 1140
681 868
1555 2021
681 895
D =
5 3 2 227 751 681
7 7 9 518 1675 1555
2 3 5 227 724 681
E =
2 4 3 6
1 5 3 2
2 7 7 9
1 2 3 5
292 938 873 1140
227 751 681 868
518 1675 1555 2021
227 724 681 895
F =
7 7
2 3
938 873
G =
7 7 7 7
2 3 2 3
938 873 938 873
H =
4408 14249 13221 17185
3435 11166 10305 13333
7842 25374 23527 30558
3435 11085 10305 13414
H =
1.0e+004 *
0.0010 1.4249 1.3221 1.7185
0.3435 1.1166 1.0305 1.3333
0.7842 2.5374 2.3527 3.0558
0.3435 1.1085 1.0305 1.3414
H =
1.0e+004 *
0.0010 1.4249 1.3221 1.7185
0.0031 1.1166 1.0305 1.3333
0.7842 2.5374 2.3527 3.0558
0.3435 1.1085 1.0305 1.3414
H =
1.0e+004 *
0.0010 1.4249 1.3221 1.7185
0.0031 0 + 0.0001i 1.0305 1.3333
0.7842 2.5374 0.0041 3.0558
0.3435 1.1085 1.0305 1.3414
H =
1.0e+004 *
0.0010 1.4249 1.3221 1.7185
0.0031 0 + 0.0001i 1.0305 1.3333
0.7842 2.5374 0.0041 3.0558
0.3435 1.1085 1.0305 1.3414
② (1)用矩阵除法求下列方程组的解 x=[x1;x2;x3];
(2) 求矩阵的秩(rank函数);
(3) 求矩阵的特征值与特征向量(eig函数);
(4) 系数矩阵的3次幂与开方;
(5) 系数矩阵的指数运算和数组对数运算;
(6) 系数矩阵a(1,2)、a(1,3)、a(2,2)、a(2,3)的元素不变,其余元素变为零。
(7) 提取系数矩阵主对角线上的元素,并依次相加赋予b。
源程序:
>> a=[6,3,4;-2,5,7;8,-1,-7]
>> b=[3;-4;-7]
>> x=a\b
>> c=rank(x)
>> lambda=eig(a)
>> d=a^3
>> e=sqrtm(a)
>> f=expm(a)
>> g=log(a)
>> a(1,1)=0;
>> a(2,1)=0;
>> a(3,1)=0;
>> a(3,2)=0;
>> a(3,3)=0
>> a=[6,3,4;-2,5,7;8,-1,-7]
>> b=a(1,1)+a(2,2)+a(3,3)
运行结果:
a =
6 3 4
-2 5 7
8 -1 -7
b =
3
-4
-7
x =
0.8196
-3.9794
2.5052
c =
1
lambda =
-7.7487
8.9519
2.7968
d =
450 314 332
4 184 374
504 38 -360
e =
2.4495 1.7321 2.0000
0 + 1.4142i 2.2361 2.6458
2.8284 0 + 1.0000i 0 + 2.6458i
e =
2.4144 + 0.2615i 0.6223 - 0.0987i 0.7573 - 0.4741i
-0.2367 + 0.9088i 2.0722 - 0.3431i 1.1524 - 1.6476i
1.3810 - 1.5804i -0.0883 + 0.5966i 0.1778 + 2.8652i
f =
1.0e+003 *
5.2654 3.2882 2.7621
1.8010 1.1495 0.9590
2.5293 1.5744 1.3238
g =
1609/898 713/649 2731/1970
1588/2291 + 355/113i 1603/996 1475/758
4319/2077 0 + 355/113i 1475/758 + 355/113i
a =
0 3 4
0 5 7
0 0 0
a =
6 3 4
-2 5 7
8 -1 -7
b =
4
2 MATLAB数值运算
实验目的:掌握 MATLAB 的数值运算及其运算中所用到的函数,掌握结构数组的操作。
实验内容:
① 已知多项式a(x)=x2+2x+3;b(x)=4x2+5x+6
(1) 求多项式a(x)和多项式b(x)的乘法运算结果,并在命令窗口中显示该多项式c;
(2) 求多项式c的根及其微分;
源程序:
>> p1=[1,2,3];
>> p2=[4,5,6];
>> c=conv(p1,p2)
>> c=poly2sym(c)
>> r=roots(c)
>> q=polyder(c)
运行结果:
c =
4 13 28 27 18
c =
4*x^4+13*x^3+28*x^2+27*x+18
r =
-1.0000 + 1.4142i
-1.0000 - 1.4142i
-0.6250 + 1.0533i
-0.6250 - 1.0533i
q =
16 39 56 27
②求的“商”及“余”多项式并在命令窗口中显示该多项式。
源程序:
>> format rat
p1=conv([1,0,1],conv([1,3],[1,1]));
p2=[1,0,2,1];
>> format rat
>> p1=conv([1,0,1],conv([1,3],[1,1]));
>> p2=[1,0,2,1];
>> [q,r]=deconv(p1,p2);
>> cq='商多项式为';cr='余多项式为';
>> disp([cq,poly2str(q,'s')]),disp([cr,poly2str(r,'s')])
运行结果:
商多项式为 s + 4
余多项式为 2 s^2 - 5 s - 1
③(1)计算当x=2,x=3时,的值;
(2)计算的值
(3) ,B=A2+3,C= A-2B,,求: C
源程序:
(1)>> syms x
>> f=x^3+(x-0.98)^2/(x+1.25)^3-5*(x+1/x)
>> f1=subs(f,'2')
>> answ=vpa(f1,6)
>> f2=subs(f,'3')
>> answ=vpa(f2,6)
(3)>> A=[2,4,3,6;1,5,3,2;2,7,7,9;1,2,3,5]
>> B=A^2+3
>> c=A-2*B
运行结果:
(1)f =
x^3+(x-49/50)^2/(x+5/4)^3-5*x-5/x
f1 =
(2)^3+((2)-49/50)^2/((2)+5/4)^3-5*(2)-5/(2)
answ =
-4.46969
f2 =
(3)^3+((3)-49/50)^2/((3)+5/4)^3-5*(3)-5/(3)
answ =
10.3865
(3)A =
2 4 3 6
1 5 3 2
2 7 7 9
1 2 3 5
B =
23 64 60 80
18 57 48 56
37 113 106 137
18 48 48 65
c =
-44 -124 -117 -154
-35 -109 -93 -110
-72 -219 -205 -265
-35 -94 -93 -125
3 MATLAB符号运算
实验目的:掌握符号变量和符号表达式的创建, 掌握MATLAB的symbol工具箱的一些基本应用。
实验内容:
①已知 ,按照自变量x和自变量a,对表达式f分别进行降幂排列(同幂合并)。
源程序:
>> syms x a b c %定义符号变量
>> f=(a*x^2+b*x+c*3)^3-a*(c*x^2+4*b*x-1)
>> fx=collect(f)%对f按x的降幂排列
>> fa=collect(f,a)%对f按a的降幂排列
运行结果:
f =
(a*x^2+b*x+3*c)^3-a*(c*x^2+4*b*x-1)
fx =
a^3*x^6+3*b*a^2*x^5+(3*c*a^2+2*b^2*a+a*(6*c*a+b^2))*x^4+(12*c*b*a+b*(6*c*a+b^2))*x^3+(3*c*(6*c*a+b^2)+6*b^2*c+9*a*c^2-c*a)*x^2+(27*c^2*b-4*b*a)*x+27*c^3+a
fa =
a^3*x^6+3*(b*x+3*c)*x^4*a^2+(3*(b*x+3*c)^2*x^2-c*x^2-4*b*x+1)*a+(b*x+3*c)^3
②已知f1=1/(a-b),f2=2a/(a+b),f3=(a+1)(b-1)(a-b),分别求f1和f2的符号和、f1和f3的符号积、f1和f3的符号商。
源程序:
>> syms a b;
>> f1=1/(a-b)
>> f2=2*a/(a+b)
>> f3=(a+1)*(b-1)*(a-b)
>> h1=f1+f2
>> h2=f1*f3
>> h3=f1/f3
运行结果:
f1 =
1/(a-b)
f2 =
2*a/(a+b)
f3 =
(a+1)*(b-1)*(a-b)
h1 =
1/(a-b)+2*a/(a+b)
h2 =
(a+1)*(b-1)
h3 =
1/(a-b)^2/(a+1)/(b-1)
③对下列表达式进行符号运算
(1) 已知数学表达式y(x)= (ex+x)(x+2),将其展开。
(2) 已知数学表达式y(x)=a3-1,对其进行因式分解。
(3) 已知数学表达式,对其进行通分。
(4) 已知数学表达式y(x)=2cos2x-sin2x,对其进行化简。
源程序:
(1)>> syms x;
>> y=(exp(x)+x)*(x+2);
>> y=expand(y)
(2)>> syms a;
>> y=a^3-1;
>> y=factor(y)
(3)>> y=sym('(x+3)/x*(x+1)+(x-1)/x^2(x+2)')
>> [n,d]=numden(y)
(4)>> syms x;
>> y=2*cos(x)^2-sin(x)^2;
>> simple(y)
运行结果:
(1)y =
exp(x)*x+2*exp(x)+x^2+2*x
(2)y=
(a-1)*(a^2+a-1)
(3)
y =
(x+3)/x*(x+1)+(x-1)/x^2(x+2)
n =
4*x^2+x^3+4*x-1
d =
x^2
(4)simplify:
3*cos(x)^2-1
radsimp:
2*cos(x)^2-sin(x)^2
combine(trig):
3/2*cos(2*x)+1/2
factor:
2*cos(x)^2-sin(x)^2
expand:
2*cos(x)^2-sin(x)^2
combine:
3/2*cos(2*x)+1/2
convert(exp):
2*(1/2*exp(i*x)+1/2/exp(i*x))^2+1/4*(exp(i*x)-1/exp(i*x))^2
convert(sincos):
2*cos(x)^2-sin(x)^2
convert(tan):
2*(1-tan(1/2*x)^2)^2/(1+tan(1/2*x)^2)^2-4*tan(1/2*x)^2/(1+tan(1/2*x)^2)^2
collect(x):
2*cos(x)^2-sin(x)^2
ans =
3*cos(x)^2-1
④ 已知数学表达式f(x)=axn+bt+c,对其进行如下的符号替换:
1) a=sint,b=lnz,c=de2t的符号变量替换。
2) n=3,c=л的符号常量替换。
3) c=1:2:5替换。
4) 的数组矩阵替换。
源程序:
(1)>> a=sym('sint')
>> b=sym('lnz')
>> c=sym('de2t')
(2)>> syms a b x t;
>> f=a*x^n+b*t+c;
>> n=sym('3')
>> c=sym('pi')
(3)>> syms a b c x t n;
>> f=a*x^n+b*t+c;
>> c=sym('1:2:5')
(4)c=sym('[1,2;3,4]')
运行结果:
(1)a =
sint
b =
lnz
c =
de2t
(2)
n =
3
c =
pi
(3)c =
1:2:5
(4)c =
[ 1, 2]
[ 3, 4]
⑤已知符号表达式,,计算x=0.5时,f的值;计算复合函数f(g(x))。
源程序:
>> syms x;
>> f=1-sin(x)^2
>> g=2*x+1;
>> f1=subs(f,'0.5')
>> fg=compose(f,g)
运行结果:
f =
1-sin(x)^2
f1 =
1-sin((0.5))^2
fg =
1-sin(2*x+1)^2
⑥求 。
源程序:
>> syms x;
>> ans=limit((x^2-1)/(x^2-3*x+1),x,2)
运行结果:
ans =
-3
⑦求函数 f(x)= cos 2x -sin 2x的积分;求函数的导数。
源程序:
(1)>> syms x y z a b
>> S=cos(2*x)-sin(2*x);
>> int(S)
(2)>> syms x y t u v z a b
>> S=sqrt(exp(x)+x*sin(x));
>> diff(S)
运行结果:
(1)ans =
1/2*sin(2*x)+1/2*cos(2*x)
(2)
ans =
1/2/(exp(x)+x*sin(x))^(1/2)*(exp(x)+sin(x)+x*cos(x))
⑧计算定积分
源程序:
>> syms x y z a b
>> S=sin(x)+2;
>> int(S,0,pi/6)
运行结果:
ans =
-1/2*3^(1/2)+1/3*pi+1
⑨求下列线性代数方程组的解。
源程序:
>> [x,y,z]=solve('x+y+z-10','3*x+2*y+z-14','2*x+3*y-z-1')
运行结果:
x =
1
y =
2
z =
7
⑩求解当y(0)=2,z(0)=7时,微分方程组的解。
源程序:
>> [y,z]=dsolve('Dy-z=sin(x)','Dz+y=1+x','y(0)=2,x(0)=7','x');
Warning: Explicit solution could not be found.
> In C:\MATLAB6p5\toolbox\symbolic\dsolve.m at line 326
>> [y,z]=dsolve('Dy-z=sin(x)','Dz+y=1+x','y(0)=2,z(0)=7','x');
>> pretty(y)
>> pretty(z)
运行结果:
cos(x) + 6 sin(x) + 1/2 x sin(x) + 1 + x
- 3/2 sin(x) + 6 cos(x) + 1 + 1/2 cos(x) x
4 MATLAB程序设计
实验目的:掌握MATLAB程序设计的主要方法,熟练编写MATLAB函数。
实验内容:
① 用π /4≈1-1/3+1/5-1/7+…公式求π的近似值,直到最后一项的绝对值小于10-6
为止,试编写其M脚本文件。
源程序:
>> t=1;
pi=0;
n=1;
s=1;
>> while abs(t)>1e-7
pi=pi+t;
n=n+2;
s=-s;
t=s/n;
end
>>
>> pi=pi*4;
>> fprintf('pi=%f/n',pi)
运行结果:
pi=3.141592/n
②分别用for和while结构计算1+22+33+…+100100的运行程序。
源程序:
>> clear
sum=0;
for i=1:100
sum=sum+i^i;
end
>> sum
>> clear all;
sum=0;
i=1;
while i<=100
sum=sum+i^i;
i=i+1;
end
>> sum
执行:
sum =
1.0037e+200
sum =
1.0037e+200
5 MATLAB绘图
实验目的:掌握MATLAB二维图形绘制,掌握图形属性的设置和图形修饰;掌握图像文件的读取和显示。
实验内容:①绘制图形
图1
其中x初值为0,终值为12.5,步长为0.1,第一个曲线y1为,第二个曲线y2为。写出图1的绘制源程序。按照以下的步骤进行(1)产生曲线的数据(共有3组数据:x,y1,y2);(2)选择合适的线形、标记、颜色(正弦曲线为红色,余弦曲线为紫色);(3)添加图例及文字说明信息;(4)添加坐标轴说明与图标题。
源程序:
>> x=0:0.1:12.5;
>> y1=sin(pi*x/6);
>> y2=cos(pi*x/6);
>> plot(x,y1,'r--',x,y2,'p-');
>> x=0:0.1:12.5;
>> y1=sin(pi*x/6);
>> y2=cos(pi*x/6);
>> plot(x,y1,'r--',x,y2,'m-');
>> legend('sinx','cosx');
>> title('两曲线比较图');
>> xlabel('时间t');
>> ylabel('幅值');
>> gtext('\leftarrow sinx');
>> gtext('cosx \rightarrow');
运行结果:
②在同一窗口不同坐标系里分别绘出y1=sinx,y2=cosx,y3=cinh(x),y4=cosh(x)4个图形,其中x为以0为初值,2为终值,元素数目为30的行向量。
源程序:
>> x=linspace(0,2*pi,30);
>> subplot(2,2,1);plot(x,sin(x));
>> subplot(2,2,2);plot(x,cos(x));
>> subplot(2,2,3);plot(x,sinh(x));
>> subplot(2,2,4);plot(x,cosh(x));
运行结果:
③绘制一个三维曲线其中x=cosp,y=sinp,z=p,p为以0为初值,20为终值,步长 0.1的行向量。
源程序:
>> p=0:pi/10:20*pi;
>> x=cos(p);y=sin(p);z=p;
>> plot3(x,y,z)
运行结果: