MATLAB简介3MATLABm-file程式与多项式函数.ppt_第1页
MATLAB简介3MATLABm-file程式与多项式函数.ppt_第2页
MATLAB简介3MATLABm-file程式与多项式函数.ppt_第3页
MATLAB简介3MATLABm-file程式与多项式函数.ppt_第4页
MATLAB简介3MATLABm-file程式与多项式函数.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Whatisanm-file?,Anm-fileisafilewithextension.mItcanbeusedtostorecommandsMatlabreadsandexecutesthecommandsinanm-fileifyoutypethenameofthefileinthecommandwindow,Useanordinarytexteditorandsavethefileasfilename.mChoosenewfileundertheFileMenu,Differentwaysofcreatingm-files,Inthefirstcasethefunctioninv(A)isusedtofindtheinverse.Thisisthenmultipliedbyb.TheMatlabcodeforthisoperationis,Inthesecondcaseleft-divisionisperformedstraightawaywiththecommand,X=9.25004.25002.7500,X=9.25004.25002.7500,Example,Examplesolvetime.mA=rand(1000,1000);%Createsarandom%matrixAb=rand(1000,1);%Createsarandom%vectorbdet(A)%CalculatesthedeterminantofAtic,%Startsthetime-watchx=inv(A)*b;%Solvesthesystemtoc%Stopsthewatchtic,y=Ab;toc%Solvesandtimesthe%systemwithleftdivision,lapsed_time=1.2820elapsed_time=0.5310,以下的tutex1.m档是一个简易绘图程式做为示范使用M-file,%M-file,tutex1.m%SimpleplotforillustrationofusingM-file.%简易绘图以做为示范使用M-filex=linspace(0,2*pi,20);y=sin(x);plot(x,y,r+)xlabel(x-value)ylabel(y-value)title(2Dplot),WhenyouwritesomethinginMatlabscommandwindow,thefollowingthingsarecheckedinturn:1.Istheresuchavariableintheworkspace?2.Isthereanm-filecalledthatthinginthecurrentdirectory?3.Isthereanm-filecalledthatsomewhereelse?WhenMatlabsearchesforthem-fileitlooksinspecificfolders,itssearchpath.IfthefolderisnotaddedtothepathMatlabcannotrunyourscript.,HowtomakesureMatlabfindsyourm-file,ChangecurrentdirectoryusingthecdcommandorbyclickingintheDirectorypanelSelecttheSetPathoptionintheFilemenuTypeoneofthefollowingcommandsinthecommandwindow:addpathC:ProgramMatlab6k5myfilespath(path,C:ProgramMatlab6k5myfiles),cdwufilemy_work%切换至目录wufilemy_workcd%如果只用cd则会显示目前的目录c:WUFILEMY_WORKdir%列出目录下的档案.tutex1.mtutex2.m.test.txtdeletetest.txt%删除test.txt,path(path,c:wufilemy_work)%将自己的目录wufilemy_work加在%MATLAB的搜寻路径之后path(c:wufilemy_work,path)%将自己的目录wufilemy_work加在%MATLAB的搜寻路径之前,WhatisafunctionAfunctionisanm-filebeginningwiththewordfunctionAfunctionhasauser-specifiedinputandoutputAfunctionhasitsownlocalworkspace.Variablesdefinedinthefunctionarenotstoredintheordinaryworkspace.Norareyourworkspacevariablesalteredifgivenanewvalueinthelocalworkspace.,myfile.mfunctionc=myfile(a,b)c=sqrt(a.2)+(b.2);,myfun.mfunctiony=myfun(t)y=t*sin(t);,Example,a=4b=3c=myfile(a,b)c=5.0000,Afunctiondoesnotassignanyvaluestoanything.Exceptiontothisruleisifyoudefineaglobalvariable.TypehelpglobalformoreinformationYoucanhaveseveralfunctionsstoredinonefile.Thesubfunctionsworkexactlyasanormalfunction,butcannotbeaccesseddirectlyfromthecommandwindow(unlikeotherlanguages).,Examplespir.mfunctionx,y=spir(t)x=cos(20*t).*exp(-t.2);y=sin(20*t).*exp(-t.2);spirplot.mfunctionx,y=spirplot(t)x=cos(20*t).*exp(-t.2);y=sin(20*t).*exp(-t.2);plot(x,y),spir3.mfunctionx,y,z=spir3(t)x=cos(20*t).*exp(-t.2);y=sin(20*t).*exp(-t.2);z=exp(-t.2);plot3(x,y,z),LoopsAfor-loopassignsanumberofdifferentvaluestoaparameter,thenstopsperformingthetask.Beginswiththewordfor,endswiththewordend.forn=1:Na(n)=1/n;end,Youcanwritetheloopsdirectlyinthecommandwindow:forn=1:N,t(n)=1/n;endforr=linspace(0,1,20),q=sin(r);endfora=A,plot(a),endCommasseparateseveralcommandsonaline.IfisamatrixtheloopvariablebecomesavectoroftheseparatecolumnsinA,clear%ClearstheworkspaceA=peaks;%Aisthetest-matrixpeaksfora=Aplot(a)%aobtainsthevalueof%eachcolumninAdrawnow%Updatesthefigurewindow%immediatelypauseend,Example,ApBloop.mA=ones(1000,1000);%CreatesmatricesAandBB=zeros(1000,1000);C=zeros(1000,1000);tic,%Startsthestop-watchforn=1:1000%Startofthefirstfor-loopform=1:1000%Startofthesecondfor-loopC(n,m)=A(n,m)+B(n,m);end%Endsthesecondloopend%Endsthesecondlooptoctic,C=A+B;toc,elapsed_time=0.1250elapsed_time=0.0150,elapsed_time=0elapsed_time=0.0310,resizeloop.mA=ones(500,500);%CreatesmatricesA,BandCB=zeros(500,500);tic,C=A+B;toctic,%Startsthestop-watchforn=1:500%Startofthefirstfor-loopform=1:500%Startofthesecondfor-loopC(n,m)=A(n,m)+B(n,m);end%Endsthefirstloopend%Endsthesecondlooptoc,Awhile-loopperformsataskuntilalogicaltestprovesfalse.Beginswiththewordwhile,endswiththewordendwhiletp=x.3+4*x.2-7*x-10为了能直接运用多项式,可以用函数polyval直接做运算,语法为polyval(p,x),其中p即是代表多项式各阶系数的阵列。因此x=linspace(-1,3,N);p=147-10;v=polyval(p,x);,我们接著说明如何对二个多项式做加减乘除运算。当二个多项式间要做加减乘除时,加减运算可以直接进行。假设有二个多项式a(x)和b(x)定义如下:,如果多项式c(x)为上述二多项式相加,即c(x)=a(x)+b(x),因此,如果是二多项式相减得到的多项式为d(x)=a(x)-b(x),则,以下就介绍相关范例,来说明二个多项式的加减运算:,a=1234;b=14916;c=a+bc=261220d=a-bd=0-2-6-12,而将两个多项式相乘可以得到一新的多项式e(x)=a(x)b(x),如果是两个多项式相除,即:,上述二个运算式不能直接运算,须要另外定义函数conv做乘法运算以及函数deconv做除法运算。当二多项式相乘,在数学上等于二个阵列做卷积(convolution)运算(因为我们是以阵列来代表一个多项式的各阶系数),因此可利用conv函数做乘法运算,其语法为conv(a,b),其中a,b代表二个多项式的阵列。而二多项式相除就相当于反卷积(de-convolution)运算,因此有deconv函数,其语法稍有不同q,r=deconv(a,b),其中q,r分别代表整除多项式及余数多项式。如果直接使用q=deconv(a,b)则只求出整除多项式。,以下就介绍相关范例,来说明二个多项式的乘除运算:a=1234;b=14916;,e=conv(a,b)e=162050758464g=e+000cg=162052819684,(c=261220),f,r=deconv(e,b)f=1234r=0000000%因为是整除所以余数多项式的各系数皆为零,h,r=deconv(g,a)h=14918r=00002612%余数多项式为2*x2+6*x+12,多项式的根,一个多项式视其阶数而定,它的根可以有一个到数个,可能为实数也可能是复数。要求一高阶多项式的根往往须借助数值方法,所幸MATLAB已将这些数值方法写成一函数roots(p),我们只要输入多项式的各阶系数(以p代表)即可求解到对应的根,p=132;r=roots(p)r=-2-1p=1-12025116;%注意二阶项系数为零须要输入,否则多项式的阶数就不对r=roots(p)%有实数根及复数根r=11.74732.7028-1.2251+1.4672i-1.2251-1.4672i,与roots相关的函数尚有poly,real,这二个函数的用途是要验算求解的根展开能求得原多项式。例如有一个二次方程式的根为-2,-1,则以下式计算原多项式p(x)=(x+2)(x+1)=x2+3x+2poly函数就是在求出多项式的各阶系数,其语法为poly(r),其中r是代表根的阵列。而real则是用来去除因计算时产生的假虚部系数,为何会有此种情形请参考以下的例子。,r=-2-1;pp=poly(r)%pp=(x+2)(x+1)=x2+3x+2pp=132p=1-46-4;r=roots(p)r=2.00001.0000+1.0000i1.0000-1.0000ipp=poly(r)%这个多项式的系数与原多项式p相同pp=1-46-4,pp=17129;%再看另一个多项式r=roots(pp)r=-4.9395-1.0303+0.8721i-1.0303-0.8721ipp=poly(r)%注意因计算的误差会有假虚部产生pp=1.00007.000012.00009.0000+0.0000ipp=real(pp)%可以real将假虚部去除,将原多项式还原pp=1.00007.000012.00009.0000,非线性方程的实根,如果求根的方程不为多项式的形式,就不能用roots函数。而这类的方程多半是非线性方程,其函数形式变化很大。对于解这类方程的根,可以用fzero函数,它其实是用来找一函数f(x)的x值代入时,会使该函数值为零(f(x)=0);而这也就是根的特性,因此我们可以用fzero求根。,要求任一方程的根有三步骤:(1)先定义方程。要注意必须将方程安排成f(x)=0的形式,例如一方程为sin(x)=3,则该方程式应表示为f(x)=sin(x)-3。可以用m-file定义方程。(2)代入适当范围的x,y(x)值,将该函数的分布图画出,藉以了解该方程的长相。,(3)由图中决定y(x)在何处附近(x0)与x轴相交,以fzero的语法fzero(function,x0)即可求出在x0附近的根,其中function是先前已定义的函数名称。如果从函数分布图看出根不只一个,则须再代入另一个在根附近的x0,再求出下一个根。以下分别介绍几数个方程式,来说明如何求解它们的根。,例一、方程为sin(x)=0我们知道上式的根有,求根方式如下:r=fzero(sin,3)%因为sin(x)是内建函数,其名称为sin,%因此无须定义它选择x=3附近求根r=3.1416r=fzero(sin,6)%选择x=6附近求根r=6.2832,例二、方程为MATLAB内建函数humps,我们不须要知道这个方程的形态为何,不过我们可以将它画出来,再找出根的位置。求根方式如下:x=linspace(-2,3);y=humps(x);plot(x,y),grid%由图中可看出在0和1附近有二个根r=fzero(humps,1.2)r=1.2995,例三、方程式为这个方程式其实是个多项式,我们说明除了用roots函

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论