MATLAB程序设计.docx
《MATLAB程序设计.docx》由会员分享,可在线阅读,更多相关《MATLAB程序设计.docx(74页珍藏版)》请在冰豆网上搜索。
MATLAB程序设计
南通广播电视大学
2011年--2012年第一学期
教案
系(部)艺术传媒学院
教师姓名
课程名称MATLAB程序设计
授课班级09电气自动化
总时数36
授课日期
9/19
授课时数
4
授课形式
讲授
实验
授课章节名称
第一章数值计算功能
1.1矩阵及其运算
1.2微分和积分
1.3MATLAB与线性代数
教学目的
通过对本章的学习,读者可以编写简单且功能完善的MATLAB7程序,从而解决各类基本问题,用户可以通过本章逐步掌握MATLAB7的数值计算方法
教学重点、难点
1矩阵的生成和基本的数值运算
2稀疏型矩阵的生成和基本操作
3数值微分的求解方法
更新、补充、删节内容
概率统计(删节)
课外作业
打印稿或电子稿(附后)
课后体会
MATLAB是工程计算的非常实用的软件,可以用于进行数字系统仿真,建模,图像处理,simlink仿真分析,高数中的相关数学运算,因此,MATLAB的应用领域非常广泛,对学生的学习有很大帮助。
授课主要内容或提纲
使用教具、挂图或其它教学手段
时间分配
一、组织教学(教具检查,考勤)
二、新课导入:
MATLAB软件是一种功能强大,运行效率很高的数字工具软件,他几乎可以解决科学计算中的所有问题,因此,大家掌握后对学习其他课程也大有裨益。
三、新课讲授:
1.1矩阵及其运算
矩阵的生成有多种方式,通常使用的有4种方法:
1在命令窗口中直接输入矩阵
2通过语句和函数产生矩阵
3在M文件中建立矩阵
4从外部的数据文件中导入矩阵
例如:
在MATLAB7命令窗口输入矩阵
>>matrix=[1,1,1,1;2,2,2,2;3,3,3,3;4,4,4,4]
matrix=
1111
2222
3333
4444
矩阵与常数的四则运算
矩阵之间的四则运算
>>A=[21-1;210;1-11]
A=
21-1
210
1-11
>>B=[1-13;432];
>>X=B/A
X=
-2.00002.00001.0000
-2.66675.0000-0.6667
零矩阵和全1矩阵的生成(zeros、ones)
对角矩阵的生成(diag)
随机矩阵的生成(rand、randn)
范德蒙德矩阵的生成(vander)
魔术矩阵的生成(magic)
Hilbert矩阵和反Hilbert矩阵的生成(hilb、invhilb)
>>rand(5)
ans=
0.95010.76210.61540.40570.0579
0.23110.45650.79190.93550.3529
0.60680.01850.92180.91690.8132
0.48600.82140.73820.41030.0099
0.89130.44470.17630.89360.1389
>>
1.2微分和积分
1数值微分
2使用diff函数求数值微分
3使用gradient函数求近似梯度
4jacobian函数求多元函数的导数
5函数的数值积分
6矩形求积
7trapz函数(梯形求积)
8自适应法(Simpson法)
9高阶自适应法(Newton-Cotes法)
(1)数值微分
>>symsxyz
>>jacobian([x*y*z;y;x+z],[xyz])
ans=
[y*z,x*z,x*y]
[0,1,0]
[1,0,1]
>>symsuv
>>jacobian(u*exp(v),[u;v])
ans=
[exp(v),u*exp(v)]
(2)函数的数值积分
一元函数的数值积分
●对于向量x,cumsum(x)命令返回一个向量,该向量的第N个元素是x的前N个元素的和。
●对于矩阵x,cumsum(x)命令返回一个和x同型的矩阵,该矩阵的列即为对x的每一列的累加和。
此程序实现累加和积分
>>x=0:
0.1:
10;
>>y=sin(x);
>>z=cumsum(y)*0.1;
>>plot(x,y,'r-',x,z,'k*')
自适应法(Simpson法)
Q=quad(fun,a,b)命令使用Simpson法则的自适应法求函数f从a到b的相对误差为1.e-6的积分近似值。
Q=quad(fun,a,b,tol)命令使用一个绝对误差容限tol代替默认的1.e-6,当tol值比较大时,可以使计算速度加快,但精度降低。
[q,fcnt]=quad(…)命令用于返回函数计算的步数。
1.3MATLAB与线性代数
functiony=myfun3(x)
y
(1)=3*x
(1)^2-x
(2)^2;
y
(2)=3*x
(1)*x
(2)^2-x
(1)^2-1;
课后作业:
1创建符号表达式f(x)=sin(x)+cos(x)-tan(x)
2计算题1中符号表达式在x=0,x=1,x=2pi处的值
3设x为符号变量,f(x)=x^4+2x^2+1;g(x)=x^3+6x^2+3x+5,试计算如下表达式
(1)f(x)+g(x)
(2)f(x)*g(x)
(3)对f(x)进行因式分解
(4)求g(x)的反函数
4求tan(x)/x当x->0时的极限
5求sin(x)/(x-pi)当x->pi时的极限
6求sin(x)+x在x=[0,8]上的定积分
7求解线性方程组3x+4y=1
4x+3y=-1
8求解非线性方程组
y
(1)=3*x
(1)^2-x
(2)^2;
y
(2)=3*x
(1)*x
(2)^2-x
(1)^2-1;
参考答案:
1>>symsx
>>f=sin(x)+cos(x)-tan(x)
f=
sin(x)+cos(x)-tan(x)
2>>subs(f,x,0)
ans=
1
>>subs(f,x,1)
ans=
-0.1756
>>>>subs(f,x,2*pi)
ans=
1
3
>>symsx
>>f=x^4+2*x^2+1
f=
x^4+2*x^2+1
>>g=x^3+6*x^2+3*x+5
g=
x^3+6*x^2+3*x+5
>>f+g
ans=
x^4+8*x^2+6+x^3+3*x
>>f*g
ans=
(x^4+2*x^2+1)*(x^3+6*x^2+3*x+5)
>>horner(f)
ans=
1+(2+x^2)*x^2
>>finverse(g)
Warning:
finverse(x^3+6*x^2+3*x+5)isnotunique.
>InD:
\MATLAB6p5dd\toolbox\symbolic\@sym\finverse.matline43
ans=
1/2*(-60+4*x+4*(117-30*x+x^2)^(1/2))^(1/3)+6/(-60+4*x+4*(117-30*x+x^2)^(1/2))^(1/3)-2
>>
7>>[x,y]=solve('3*x+4*y=1','4*x+3*y=-1')
x=
-1
y=
1
>>
8
functiony=myfun3(x)
y
(1)=3*x
(1)^2-x
(2)^2;
y
(2)=3*x
(1)*x
(2)^2-x
(1)^2-1;
多媒体教学
5分钟
10分钟
30分钟
25分钟
20分钟
授课日期
9/26
授课时数
4
授课形式
讲授
实验
授课章节名称
第二章MATLAB7符号运算
2.1符号变量
2.2符号变量的基本操作
2.3符号表达式
教学目的
通过对本章的学习,读者应该掌握符号表达式和符号矩阵的操作、符号微积分、符号线性方程和符号微分方程等的运算。
教学重点、难点
符号表达式和符号矩阵的操作
符号微积分
符号线性方程
符号微分方程
更新、补充、删节内容
课外作业
补充
课后体会
MATLAB是工程计算的非常实用的软件,可以用于进行数字系统仿真,建模,图像处理,simlink仿真分析,高数中的相关数学运算,因此,MATLAB的应用领域非常广泛,对学生的学习有很大帮助。
授课主要内容或提纲
使用教具、挂图或其它教学手段
时间分配
一、组织教学(教具检查,考勤)
二、新课导入:
MATLAB提供了功能强大的符号运算功能,他专门提供了符号工具相SymbolimathToolbox,完全可以替代其他符号专用的计算机语言。
三、新课讲授:
2.1符号变量、符号表达式和符号方程的生成
使用sym函数定义符号变量和符号表达式
使用syms函数定义符号变量和符号表达式
符号方程的生成
(1)使用sym函数定义符号变量和符号表达式
>>sqrt
(2)
ans=
1.4142
>>a=sqrt(sym
(2))
a=
2^(1/2)
>>sym
(2)/sym(5)
ans=
2/5
>>2/5+1/3
ans=
0.7333
(2)使用syms函数定义符号变量和符号表达式
>>symsabcx
>>f=sym('a*x^2+b*x+c')
f=
a*x^2+b*x+c
>>g=f^2+4*f-2
g=
(a*x^2+b*x+c)^2+4*a*x^2+4*b*x+4*c-2
(3)符号方程的生成
>>%符号方程的生成
>>%使用sym函数生成符号方程
>>equation1=sym('sin(x)+cos(x)=1')
equation1=sin(x)+cos(x)=1
2.2符号变量的基本操作
findsym函数用于寻找符号变量
任意精确度的符号表达式
数值型变量与符号型变量的转换形式
(1)findsym函数用于寻找符号变量
>>symsaalphabx1y
>>findsym(alpha+a+b)
ans=
a,alpha,b
>>findsym(cos(alpha)*b*x1+14*y,2)
ans=
x1,y
>>findsym(y*(4+3*i)+6*j)
ans=
y
(2)任意精确度的符号表达式
>>r=vpa(pi)
r=
3.1415926535897932384626433832795
>>
>>q=vpa(hilb
(2))
q=
[1.,.50000000000000000000000000000000]
[.50000000000000000000000000000000,.33333333333333333333333333333333]
>>
(3)数值型变量与符号型变量的转换形式
>>t=0.1
t=
0.1000
>>sym(t)%有理数形式
ans=
1/10
>>sym(t,'r')%有理数形式
ans=
1/10
>>sym(t,'f')%浮点数形式
ans=
'1.999999999999a'*2^(-4)
2.3.符号表达式(符号函数)的操作
(1)符号表达式的四则运算
(2)合并符号表达式的同类项
(3)符号多项式的因式分解
(4)符号表达式的简化
(5)subs函数用于替换求值
(6)反函数的运算
(7)复合函数的运算
(1)符号表达式的四则运算
>>symsxyab
>>fun1=sin(x)+cos(y)
fun1=
sin(x)+cos(y)
>>fun2=a+b
fun2=
a+b
>>fun1+fun2
ans=
sin(x)+cos(y)+a+b
>>fun1*fun2
ans=
(sin(x)+cos(y))*(a+b)
(2)合并符号表达式的同类项
Collect(S,v)命令将用于符号矩阵S中所有同类项合并,并以v为变量输出。
Collect(S)命令使用findsym函数规定的默认变量代替上式中的v
>>symsxy
>>collect(x^2*y+y*x-x^2-2*x)
ans=
(y-1)*x^2+(y-2)*x
>>f=-1/4*x*exp(-2*x)+3/16*exp(-2*x);
>>collect(f)
ans=
-1/4*x*exp(-2*x)+3/16*exp(-2*x)
>>
(3)符号多项式的因式分解(horner)
在MATLAB7语言中,使用horner函数进行符号多项式的因式分解。
>>symsx
>>fun1=2*x^3+2*x^2-32*x+40
fun1=
2*x^3+2*x^2-32*x+40
>>horner(fun1)
ans=
40+(-32+(2+2*x)*x)*x
>>fun2=x^3-6*x^2+11*x-6
fun2=
x^3-6*x^2+11*x-6
>>horner(fun2)
ans=
-6+(11+(-6+x)*x)*x
(4)符号表达式的简化(simplify)
Simplify(S)命令将符号表达式S中的每一个元素进行化解,但不一定能得到最简表达式。
>>symsx
>>fun1=(1/x+7/x^2+12/x+8)^(1/3)
fun1=
(13/x+7/x^2+8)^(1/3)
>>sfy1=simplify(fun1)
sfy1=
((13*x+7+8*x^2)/x^2)^(1/3)
>>sfy2=simplify(sfy1)
sfy2=
((13*x+7+8*x^2)/x^2)^(1/3)
(5)subs函数用于替换求值
Subs(S)命令用于将符号表达式S中的所有符号变量用调用函数中的值或是MATLAB7工作区间的值代替。
Subs(S,new)命令将符号表达式S中的自由符号变量用数值型变量或表达式new替换,如用户想求表达式f=2x^2-3x+1当x=2时的值,可以使用subs(f,2)
Subs(S,old,new)命令将符号表达式S中的符号变量old用数值型变量或表达式new替换。
>>symsxy
f=x^2*y+5*x*sqrt(y)
f=
x^2*y+5*x*y^(1/2)
>>subs(f,x,3)
ans=
9*y+15*y^(1/2)
>>subs(f,y,3)
ans=
3*x^2+5*x*3^(1/2)
>>
(6)反函数的运算(finverse)
G=finverse(f)命令用于求解f的反函数,其中f为一符号表达式,x为单变量,函数g也是一个符号函数,且满足g(f(x))=x.
G=finverse(f,v)命令所返回的符号函数表达式的自变量是v,这里v是一个符号变量,且是表达式的向量变量,而g的表达式要求满足g(f(x))=v。
当f包括不止一个变量时最好使用该指令。
>>symsxy
>>f=x^2+y
f=
x^2+y
>>finverse(f,y)
ans=
-x^2+y
(7)复合函数的运算(compose)
>>symsxyztu
>>f=1/(1+x^2)
>>g=sin(y)
>>h=x^t
>>p=exp(-y/u)
>>compose(f,g)
ans=
1/(1+sin(y)^2)
>>compose(f,g,t)
ans=
1/(1+sin(t)^2)
多媒体教学
5分钟
10分钟
30分钟
25分钟
20分钟
授课日期
10/10
授课时数
4
授课形式
讲授
实验
授课章节名称
第二章MATLAB7符号运算
2.4符号矩阵的生成与运算
2.5符号微积分
教学目的
知道矩阵的生成和符号的微积分
教学重点、难点
符号微积分
符号线性方程
符号微分方程
更新、补充、删节内容
课外作业
补充
课后体会
MATLAB是工程计算的非常实用的软件,可以用于进行数字系统仿真,建模,图像处理,simlink仿真分析,高数中的相关数学运算,因此,MATLAB的应用领域非常广泛,对学生的学习有很大帮助。
通过对本章的学习,读者应该掌握符号表达式和符号矩阵的操作、符号微积分、符号线性方程和符号微分方程等的运算。
授课主要内容或提纲
使用教具、挂图或其它教学手段
时间分配
一、组织教学(教具检查,考勤)
二、新课导入:
MATLAB提供了功能强大的符号运算功能,他专门提供了符号工具相SymbolimathToolbox,完全可以替代其他符号专用的计算机语言。
三、新课讲授:
2.4符号矩阵的生成和运算
(1)符号矩阵的生成
(2)使用sym函数直接生成符号矩阵
(3)用生成子矩阵的方法生成符号矩阵
(4)由数值矩阵转换为符号矩阵
(1)sym函数直接生成符号矩阵
>>a1=sym('[1/32/35/7;9/1111/1313/17;17/1919/2323/29]')
a1=
[1/3,2/3,5/7]
[9/11,11/13,13/17]
[17/19,19/23,23/29]
>>
(2)用生成子矩阵的方法生成符号矩阵
>>a=['[100,cos(x)]';'[1/s,x]']
a=
[100,cos(x)]
[1/s,x]
>>
(3)由数值矩阵转换为符号矩阵
>>M=[30111;6159;98254;3245620]
M=
30111
6159
98254
3245620
>>S=sym(M)
S=
[30,1,1,1]
[6,1,5,9]
[9,8,25,4]
[32,45,62,0]
此时,虽然矩阵形式没有发生改变,但是在MATLAB7的工作区间内,系统已经生成了一个新的矩阵,其数据类型为符号型。
2.5.符号微积分
符号极限(limit)
Limit(F,x,a)命令用于计算符号表达式当x->a时F=F(x)的极限值。
Limit(F,a)命令首先用findsym(x)确定F中的自变量,设为变量x,然后计算当x->a时F的极限值。
Limit(F)命令使用findsym(x)确定F中的自变量,设为变量x,然后计算x->0时F的极限值。
Limit(F,x,a,’right’)或Limit(F,x,’left’)命令用来计算符号函数F的单侧极限:
左极限x->a-或右极限x->a+。
(1)符号极限(limit)
>>symsxath;
limit(sin(x)/x)
ans=
1
>>limit((x-2)/(x^2-4),2)
ans=
1/4
>>limit((1+2*t/x)^(3*x),x,inf)
ans=
exp(6*t)
2.6符号微分和求导
diff函数的使用
Diff(x)命令根据由findsym(x)命令返回自变量v,求表达式x的一阶导数。
Diff(x,n)命令根据由findsym(x)命令返回的自变量v,求表达式x的n阶导数,n必须是自然数。
Diff(x,’v’)或diff(S,sym(‘v’))命令根据findsym(x)命令返回的自变量v,计算x的一阶导数。
Diff(S,’v’,n)命令根据由findsym(x)命令返回的自变量v,计算x的n阶导数。
使用Dff函数进行符号微分和求导
>symsx
>>diff(x^3+3*x^2+4*x+6)
ans=
3*x^2+6*x+4
>>diff(sin(x^3),4)
ans=
81*sin(x^3)*x^8-324*cos(x^3)*x^5-180*sin(x^3)*x^2
对多个变量中的某个自变量求导。
>>symsxy
>>diff(x*y+y^2+sin(x)+cos(y),y)
ans=
x+2*y-sin(y)
>>diff(x*y+y^2+sin(x)+cos(y),y,3)(把x看成常数,进行三次对Y求导)
ans=
sin(y)
符号积分(int)
Int(S)命令根据由findsym(S)命令返回自变量v,求S的不定积分,其中S为符号矩阵或符号常量。
Int(S,v)命令对符号表达式S中指定的符号变量V计算不定积分。
需要注意的是,表达式R只是S的一个原函数。
Int(S,a,b)命令由findsym(S)命令返回的自变量V,对符号表达式S中的符号变量计算从a到b的定积分。
例7-29用int函数求符号积分。
解:
在命令窗口中输入如下命令,并按Enter键确认。
>>symsxx1alphaut;
>>A=[cos(x*t),sin(x*t);-sin(x*t),cos(x*t)]
A=
[cos(x*t),sin(x*t)]
[-sin(x*t),cos(x*t)]
>>int(1/(1+x^2))
ans=
atan(x)
>>int(sin(alpha*u),alpha)
ans=
-1/u*cos(alpha*u)
>>int(besselj(1,x),x)
ans=
-besselj(0,x)
>>int(x1*log(1+x1),0,1)
ans=
1/4
>>int(4*x*t,x,2,sin(t))
ans=
2*t*(sin(t)^2-4)对F(X)从2到sin(t)进行积分
>>int([exp(t),exp(alpha*t)])
ans=
[exp(t),1/alpha*exp(alpha*t)]
>>int(A,t)
ans=
[1/x*sin(x*t),-cos(x*t)/x]
[cos(x*t)/x,1/x*sin(x*t)]
6.符号积分变换
Fourier变换及其逆变换
Fourie