天津大学matlab讲义应用基础第五章.docx
《天津大学matlab讲义应用基础第五章.docx》由会员分享,可在线阅读,更多相关《天津大学matlab讲义应用基础第五章.docx(21页珍藏版)》请在冰豆网上搜索。
天津大学matlab讲义应用基础第五章
第5章符号运算
MATLAB的工具包SymbolicMathToolbox以MAPLE为内核,实现了符号计算,如符号表达式与矩阵的操作、微积分、线性代数、方程求解、化简与展开、特殊数学函数等。
5.1符号表达式和符号矩阵的创建
1、用字符串创建符号表达式
如:
f='sin(x)^2';
%创建函数sin2(x)赋给f
q1='a*x^2+b*x+c=0';
%创建方程赋给q1
de='Dy+y^2=1';
%创建微分方程y'+y2=1并赋给de
2、创建符号矩阵的方法
1)直接使用Sym命令矩阵
如:
k=sym('[a,b;c,d]')
运行结果如下:
k=
[a,b]
[c,d]
msy=sym('[1/(a+x),sin(x),(b-x)/(a+x);2*x,1/(8+x^2),exp(x)]')
运行结果如下:
msy=
[1/(a+x),sin(x),(b-x)/(a+x)]
[2*x,1/(8+x^2),exp(x)]
1)使用Sym命令创建符号变量,再利用数组运算生成符号矩阵
如,下面的命令生成5阶符号矩阵:
t=sym('t');%创建符号变量t
[I,J]=meshgrid(1:
5)
H=1./(I+J-t)
运行结果如下:
I=
12345
12345
12345
12345
12345
J=
11111
22222
33333
44444
55555
H=
[1/(2-t),1/(3-t),1/(4-t),1/(5-t),1/(6-t)]
[1/(3-t),1/(4-t),1/(5-t),1/(6-t),1/(7-t)]
[1/(4-t),1/(5-t),1/(6-t),1/(7-t),1/(8-t)]
[1/(5-t),1/(6-t),1/(7-t),1/(8-t),1/(9-t)]
[1/(6-t),1/(7-t),1/(8-t),1/(9-t),1/(10-t)]
3)使用Sym命令把数值矩阵化成符号矩阵
设A为数值矩阵,则:
msy=Sym(A)
将A转化为符号矩阵msy。
如:
A=[123;789;456]
M=sym(A)
运行结果如下:
A=
123
789
456
M=
[1,2,3]
[7,8,9]
[4,5,6]
3、符号矩阵元素的引用和修改
Sym(S,i,j)
%引用符号矩阵元素Sij
A=[123;789;456]
M=sym(A)
disp('第3行2列的元素为:
')
sym(M,3,2)
运行结果如下:
A=
123
789
456
M=
[1,2,3]
[7,8,9]
[4,5,6]
第3行2列的元素为:
ans=
5
5.2符号表达式与矩阵的基本运算
1、加、减、乘、除
Symadd(A,B)
%A+B与sym(A)+sym(B)等价
SymSub(A,B)
%A–B与sym(A)-sym(B)等价
Symmul(A,B)
%A×B与sym(A)*sym(B)等价
Symdiv(A,B)
%A/B与sym(A)/sym(B)等价
2、幂
sympow(S,p)
%Sp与sym(S)^sym(p)等价
若S为标量符号表达式,p可为标量符号或数值表达式;
若S为符号矩阵,p必须为整数
5.3因式分解、展开和简化及微积分
设s是一个符号表达式。
1、因式分解
factor(s)
如:
f=sym('x^4-5*x^3+5*x^2+5*x-6')
factor(f)
运行结果如下:
f=
x^4-5*x^3+5*x^2+5*x-6
ans=
(-1+x)*(x-2)*(x-3)*(x+1)
2、展开
expand(s)
如:
f=sym('x^4-5*x^3+5*x^2+5*x-6')
g=factor(f)
expand(g)
运行结果如下:
f=
x^4-5*x^3+5*x^2+5*x-6
g=
(-1+x)*(x-2)*(x-3)*(x+1)
ans=
x^4-5*x^3+5*x^2+5*x-6
3、化简
simplify(s)
如:
simplify(sin(x)^2+3*x+cos(x)^2-5)
运行结果如下:
ans=
-4+3*x
4、微分
diff(S)
%对符号S关于缺省变量x求微分
diff(S,'v')
%对符号S关于变量v求微分
diff(S,'v',n)
%对符号S关于变量的n次微分
如:
f='x^4-a^3*sin(x)^3+b*x^2+c*x-d'
diff(f)
diff(f,'a')
diff(f,'a',2)
运行结果如下:
f=
x^4-a^3*sin(x)^3+b*x^2+c*x-d
ans=
4*x^3-3*a^3*sin(x)^2*cos(x)+2*b*x+c
ans=
-3*a^2*sin(x)^3
ans=
-6*a*sin(x)^3
5、积分
int(S)
求不定积分
int(S,'v')
int(S,a,b)
求定积分
int(S,'v',a,b)
如:
f='sin(x)^3+b*x-d'
int(f)
diff(f,'b')
F=sym('[a*x,b*x^2;c*x^3,d*x]')
disp('对x求微分')
diff(F)
disp('对x求积分')
int(F)
运行结果如下:
f=
sin(x)^3+b*x-d
ans=
-1/3*sin(x)^2*cos(x)-2/3*cos(x)+1/2*b*x^2-d*x
ans=
x
F=
[a*x,b*x^2]
[c*x^3,d*x]
对x求微分
ans=
[a,2*b*x]
[3*c*x^2,d]
对x求积分
ans=
[1/2*a*x^2,1/3*b*x^3]
[1/4*c*x^4,1/2*d*x^2]
6、泰勒级数展开
taylor(S)
求泰勒级数前6项
taylor(S,'v')
taylor(S,n)求泰数级数前n项
如:
f=taylor(sym('log(x+1)/(x-5)'))
disp('整理为:
')
pretty(f)
运行结果如下:
f=
-1/5*x+3/50*x^2-41/750*x^3+293/7500*x^4-1207/37500*x^5
整理为:
2413293412075
-1/5x+3/50x----x+----x------x
750750037500
7.求解常微分方程
DSOLVE('eqn1','eqn2',...)
其中:
eqn1,eqn2为单个的常微分方程。
在这些常微分方程中用字母D表示微分,D2,D3等表示二重、三重微分。
任何D后所跟的字母为因变量。
自变量缺省为t。
例如:
1)求单个常微分方程的解
dsolve('D2y-2(1-x^2)*Dy+x=0')
ans=
1/2*x*t+C1+C2*exp(2*t)
2)求带初值的单个常微分方程的解
y=dsolve('(Dy)^2+y^2=1','y(0)=0')
y=
[sin(t)]
[-sin(t)]
3)求常微分方程组的解
[f,g]=dsolve('Df=3*f+4*g',
'Dg=-4*f+3*g')
f=
exp(3*t)*(cos(4*t)*C1+sin(4*t)*C2)
g=
exp(3*t)*(-sin(4*t)*C1+cos(4*t)*C2)
4)求带初值的常微分方程组的解
[f,g]=dsolve('Df=f+g','Dg=-f+g',...
'f(0)=1','g(0)=2')
f=
exp(t)*(cos(t)+2*sin(t))
g=
exp(t)*(-sin(t)+2*cos(t))
此外,还有求解线性代数等函数。
请自学。
第6章MATLAB应用开发
在MATLAB中可将C或Fortran源程序转换为m文件。
还可以在MSVisualC++、MSVisualBASIC、MSFortranPowerStation4.0、DigitalVisualFortran5.0等开发环境中执行MATLAB命令或m文件。
也可使用其编译程序MCC将m文件转换为C或C++程序,从而生成独立于MATLAB执行环境的应用程序。
6.1将C或Fortran源程序转换为m文件
1、设置C或Fortran编译程序的目录
mex–setup
2、生成.DLL文件
mex源程序
如:
mexyprimef.foryprimefg.for
mexyprime.c
6.2在其它语言中调用MATLAB
以VisualBasic为例
DimSasobject
Dimtasstring
Dimxasstring
SetS=createobject("MATLAB.application")
t=s.execute("surf(peaks)")
x=imputbox("输入")
6.3MATLAB应用界面开发工具的使用
MATLAB的应用界面开发工具有下面五个:
属性编辑器(propedit)
菜单编辑器(menuedit)
对象排列工具(align)
回调命令编辑器(cbedit)
控制面板(guide)
在建立一图形窗口后,拍入上面的前四个命令可分别使用相应工具。
使用guide命令可启动界面开发控制面板,它包含属性编辑器,菜单编辑器,对象排列工具,回调命令编辑器的全部功能。
使用这些工具,系统会引导用户逐步完成图形用户界面的设计。
设计完成后,会自动生成一个m文件。
下面简介控制面板的使用。
1)建立一图形窗口
例如:
surf(peaks);
colormap(hot)
shadinginterp
title('hot色图函数效果')
建立一图形窗口如下:
2)启动控制面板
拍入命令:
guide
出现如下的GuideControlPanel窗口:
单击PropertyEditor按钮出现属性编辑器窗口,设置对象的属性:
单击MenuEditor按钮出现菜单编辑器窗口,设计所需要的菜单:
单击CallbackEditor按钮出现回调编辑器窗口,设置菜单和按钮被选中时的动作:
单击AlignmentTool按钮出现对齐工具窗口:
在增加菜单axis及其子菜单Boxon和Boxoff、设置XLABEL为“深度”后,图形窗口如下所示:
当退出Guide窗口、并保存变化的结果,生成了如下的m文件:
functionfig=guidemo()
%Thisisthemachine-generatedrepresentationofaHandleGraphicsobject
%anditschildren.Notethathandlevaluesmaychangewhentheseobjects
%arere-created.Thismaycauseproblemswithanycallbackswrittento
%dependonthevalueofthehandleatthetimetheobjectwassaved.
%ThisproblemissolvedbysavingtheoutputasaFIG-file.
%
%Toreopenthisobject,justtypethenameoftheM-fileattheMATLAB
%prompt.TheM-fileanditsassociatedMAT-filemustbeonyourpath.
%
%NOTE:
certainnewerfeaturesinMATLABmaynothavebeensavedinthis
%M-fileduetolimitationsofthisformat,whichhasbeensupersededby
%FIG-files.Figureswhichhavebeenannotatedusingtheploteditortools
%areincompatiblewiththeM-file/MAT-fileformat,andshouldbesavedas
%FIG-files.
loadguidemo
h0=figure('Color',[0.80.80.8],...
'Colormap',mat0,...
'FileName','D:
\matlabcai\guidemo.m',...
'PaperPosition',[18180576432],...
'PaperUnits','points',...
'Position',[469237338280],...
'Renderer','zbuffer',...
'Tag','Fig1',...
'ToolBar','none');
h1=uimenu('Parent',h0,...
'Label','axis',...
'Tag','&axisuimenu1');
h2=uimenu('Parent',h1,...
'Callback','set(gca,''Box'',''on'')''',...
'Label','Boxon',...
'Tag','Subuimenu1');
h2=uimenu('Parent',h1,...
'Callback','set(gca,''Box'',''off'')',...
'Label','Boxoff',...
'Tag','axisBoxoff');
h1=axes('Parent',h0,...
'View',[-37.530],...
'CameraUpVector',[001],...
'Color',[111],...
'ColorOrder',mat1,...
'Position',[0.13017751479289940.11071428571428570.77514792899408280.8142857142857143],...
'Tag','Axes1',...
'XColor',[000],...
'XGrid','on',...
'YColor',[000],...
'YGrid','on',...
'ZColor',[000],...
'ZGrid','on');
h2=surface('Parent',h1,...
'CData',mat2,...
'EdgeColor','none',...
'FaceColor','interp',...
'Tag','Axes1Surface1',...
'VertexNormals',mat3,...
'XData',mat4,...
'YData',mat5,...
'ZData',mat6);
h2=text('Parent',h1,...
'Color',[000],...
'HandleVisibility','off',...
'HorizontalAlignment','center',...
'Position',[-228.8782724349788-307.1119945659601101.0108740618285],...
'String','hot色图函数效果',...
'Tag','Axes1Text4',...
'VerticalAlignment','bottom');
set(get(h2,'Parent'),'Title',h2);
h2=text('Parent',h1,...
'Color',[000],...
'HandleVisibility','off',...
'Position',[-246.6029180022339-356.685057254068172.07463546117215],...
'String','深度',...
'Tag','Axes1Text3',...
'VerticalAlignment','top');
set(get(h2,'Parent'),'XLabel',h2);
h2=text('Parent',h1,...
'Color',[000],...
'HandleVisibility','off',...
'HorizontalAlignment','right',...
'Position',[-278.700848987954-331.272303985345272.43334916283318],...
'Tag','Axes1Text2',...
'VerticalAlignment','top');
set(get(h2,'Parent'),'YLabel',h2);
h2=text('Parent',h1,...
'Color',[000],...
'HandleVisibility','off',...
'HorizontalAlignment','center',...
'Position',[-284.8033645023182-294.219703779407487.26018216482238],...
'Rotation',90,...
'Tag','Axes1Text1',...
'VerticalAlignment','baseline');
set(get(h2,'Parent'),'ZLabel',h2);
ifnargout>0,fig=h0;end