matlab在科学计算中的应用2.ppt

上传人:wj 文档编号:18701345 上传时间:2023-10-04 格式:PPT 页数:81 大小:1.24MB
下载 相关 举报
matlab在科学计算中的应用2.ppt_第1页
第1页 / 共81页
matlab在科学计算中的应用2.ppt_第2页
第2页 / 共81页
matlab在科学计算中的应用2.ppt_第3页
第3页 / 共81页
matlab在科学计算中的应用2.ppt_第4页
第4页 / 共81页
matlab在科学计算中的应用2.ppt_第5页
第5页 / 共81页
matlab在科学计算中的应用2.ppt_第6页
第6页 / 共81页
matlab在科学计算中的应用2.ppt_第7页
第7页 / 共81页
matlab在科学计算中的应用2.ppt_第8页
第8页 / 共81页
matlab在科学计算中的应用2.ppt_第9页
第9页 / 共81页
matlab在科学计算中的应用2.ppt_第10页
第10页 / 共81页
matlab在科学计算中的应用2.ppt_第11页
第11页 / 共81页
matlab在科学计算中的应用2.ppt_第12页
第12页 / 共81页
matlab在科学计算中的应用2.ppt_第13页
第13页 / 共81页
matlab在科学计算中的应用2.ppt_第14页
第14页 / 共81页
matlab在科学计算中的应用2.ppt_第15页
第15页 / 共81页
matlab在科学计算中的应用2.ppt_第16页
第16页 / 共81页
matlab在科学计算中的应用2.ppt_第17页
第17页 / 共81页
matlab在科学计算中的应用2.ppt_第18页
第18页 / 共81页
matlab在科学计算中的应用2.ppt_第19页
第19页 / 共81页
matlab在科学计算中的应用2.ppt_第20页
第20页 / 共81页
亲,该文档总共81页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

matlab在科学计算中的应用2.ppt

《matlab在科学计算中的应用2.ppt》由会员分享,可在线阅读,更多相关《matlab在科学计算中的应用2.ppt(81页珍藏版)》请在冰点文库上搜索。

matlab在科学计算中的应用2.ppt

第二章MATLAB语言程序设计基础,MATLAB语言的简洁高效性MATLAB语言的科学运算功能MATLAB语言的绘图功能MATLAB庞大的工具箱与模块集MATLAB强大的动态系统仿真功能,MATLAB语言是当前国际上自动控制领域的首选计算机语言,也是很多理工科专业最适合的计算机数学语言。

通过学习可更深入理解和掌握数学问题的求解思想,提高求解数学问题的能力,为今后其他专业课程的学习提供帮助。

MATLAB语言的优势:

本章主要内容,MATLAB基本命令简介MATLAB程序设计语言基础基本数学运算MATLAB语言流程控制MATLAB函数的编写二维图形绘制三维图形绘制,2.1MATLAB基本命令简介,MATLAB通用命令,Matlab常用的窗口帮助命令,help命令直接输入help,MATLAB将列出所有的帮助主题,每个帮助主题对应于MATLAB搜索路径中的一个目录;help后加帮助主题,可获得指定帮助主题的帮助信息;help后加函数名;help后加命令名,将得到指定命令的用法;,demo命令,helpwin命令用于打开MATLAB的帮助文件窗,lookfor命令允许用户通过完整的或部分关键字来搜索要查找的内容who和whos的作用是列出在MATLAB工作内存中驻留的变量名exist命令用来查找或检查变量和函数的存在性,2.2MATLAB程序设计语言基础,MATLAB语言的变量命名规则是:

(1)变量名必须是不含空格的单个词;

(2)变量名区分大小写;(3)变量名最多不超过19个字符;(4)变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号,MATLAB的保留常量,数学运算符号及标点符号,

(1)MATLAB的每条命令后,若为逗号或无标点符号,则显示命令的结果;若命令后为分号,则禁止显示结果.

(2)“%”后面所有文字为注释.(3)“.”表示续行.,数学运算符号及标点符号,双精度数值变量IEEE标准,64位(占8字节),11指数位,53数值位和一个符号位double()函数的转换其他数据类型uint8(),无符号8位整形数据类型,值域为0至255,常用于图像表示和处理。

(节省存储空间,提高处理速度)int8(),int16(),int32(),uint16(),uint32(),数值型数据结构,符号型,sym(A),常用于公式推导、解析解解法符号变量声明symsvar_listvar_props例:

symsabrealsymscpositive,符号型变量数据类型,符号型数值可采用变精度函数求值vpa(A),或vap(A,n)vpa(pi)ans=3.1415926535897932384626433832795vpa(pi,60)ans=3.14159265358979323846264338327950288419716939937510582097494,字符串型数据:

用单引号括起来。

多维数组:

是矩阵的直接扩展,多个下标。

单元数组:

将不同类型数据集成到一个变量名下面,用表示;例:

用Ai,j可表示单元数组A的第i行,第j列的内容。

类与对象:

允许用户自己编写包含各种复杂详细的变量,可以定义传递函数。

MATLAB支持的其它数据结构,直接赋值语句赋值变量赋值表达式例:

a=pi2a=9.8696例:

表示矩阵B=1+9i,2+8i,3+7j;4+6j5+5i,6+4i;7+3i,8+2j1iB=1.0000+9.0000i2.0000+8.0000i3.0000+7.0000i4.0000+6.0000i5.0000+5.0000i6.0000+4.0000i7.0000+3.0000i8.0000+2.0000i0+1.0000i,MATLAB的基本语句结构,函数调用语句返回变量列表函数名(输入变量列表)例:

a,b,c=my_fun(d,e,f,c)冒号表达式v=s1:

s2:

s3该函数生成一个行向量v,其中s1是起始值,s2是步长(若省略步长为1),s3是最大值。

例:

用不同的步距生成(0,p)间向量。

v1=0:

0.2:

piv1=Columns1through900.20000.40000.60000.80001.00001.20001.40001.6000Columns10through161.80002.00002.20002.40002.60002.80003.0000,v2=0:

-0.1:

pi%步距为负,不能生成向量,得出空矩阵v2=Emptymatrix:

1-by-0v3=0:

piv3=0123v4=pi:

-1:

0逆序排列构成新向量v4=3.14162.14161.14160.1416v5=0:

0.4:

pi,piv5=00.40000.80001.20001.60002.00002.40002.80003.1416,基本语句格式B=A(v1,v2)v1、v2分别表示提取行(列)号构成的向量。

例:

A=1,2,3,4;3,4,5,6;5,6,7,8;7,8,9,0A=1234345656787890B1=A(1:

2:

end,:

)提取全部奇数行、所有列。

B1=12345678,子矩阵提取,B2=A(3,2,1,2,3,4)提取3,2,1行、2,3,4列构成子矩阵。

A=B2=1234678345645656782347890B3=A(:

end:

-1:

1)将A矩阵左右翻转,即最后一列排在最前面。

B3=4321654387650987,矩阵表示矩阵转置数学表示(若A有复数元素,先转置再取各元素共轭复数值,Hermit转置)MATLAB求解BA.C=A,2.3基本数学运算,矩阵的代数运算,矩阵加减法C=A+BD=A-B注意维数是否相等注意其一为标量的情形矩阵乘法数学表示MATLAB表示C=A*B注意两个矩阵相容性,矩阵除法矩阵左除:

AX=B,求XMATLAB求解:

X=AB若A为非奇异方阵,则X=A-1B最小二乘解(若A不是方阵)矩阵右除:

XA=B,求XMATLAB求解:

X=B/A若A为非奇异方阵,则X=BA-1最小二乘解(若A不是方阵),矩阵翻转左右翻转B=fliplr(A)上下翻转C=flipud(A)旋转90o(逆时针)D=rot90(A)如何旋转180o?

D=rot180(A)?

Undefinedfunctionorvariablerot180.D=rot90(rot90(A)矩阵乘方A为方阵,求MATLAB实现:

F=Ax,点运算-矩阵对应元素的直接运算数学表示:

MATLAB实现:

C=A.*B例:

A=1,2,3;4,5,6;7,8,0;B=A.AB=1427256312546656823543167772161C=A.*AC=14916253649640,逻辑变量:

当前版本有逻辑变量对double变量来说,非0表示逻辑1逻辑运算(相应元素间的运算)与运算A&C或运算A|C非运算A异或运算xor(A,C),矩阵的逻辑运算,各种允许的比较关系,=,AA=123456780find(A=5),大于或等于5元素的下标ans=3568,矩阵的比较运算,i,j=find(A=5);i,j显示行标,列标ans=A=31123224563278023all(A=5)某列元素全大于或等于5时,相应元素为1,否则为0。

ans=000any(A=5)某列元素中含有大于或等于5时,相应元素为1,否则为0。

ans=111,解析结果的化简与变换,MATLAB实现:

s1=simple(s)从各种方法中自动选择最简格式s1,how=simple(s)化简并返回实际采用的化简方法其中,s为原始表达式,s1为化简后表达式,how为采用的化简方法。

其他常用化简函数(信息与格式可用help命令得出)collect()合并同类项expand()展开多项式factor()因式分解numden()提取多项式的分子和分母sincos()三角函数的化简,例:

symss;P=(s+3)2*(s2+3*s+2)*(s3+12*s2+48*s+64)P=(s+3)2*(s2+3*s+2)*(s3+12*s2+48*s+64)simple(P)%一系列化简尝试,得出计算机认为的最简形式ans=(s+3)2*(s+2)*(s+1)*(s+4)3,a,m=simple(P)%返回化简方法为因式分解方法,用factor()函数将得同样结果a=(s+3)2*(s+2)*(s+1)*(s+4)3m=factorexpand(P)ans=s7+21*s6+185*s5+883*s4+2454*s3+3944*s2+3360*s+1152,变量替换其中,f为原表达式,用x*替换x得出新的。

例:

求其Taylor幂级数展开symsabcdt;%假设这些变量均为符号变量f=cos(a*t+b)+sin(c*t)*sin(d*t);%定义给定函数f(t)f1=subs(f,a,b,c,d,t,0.5*pi,pi,0.25*pi,0.125*pi,4)f1=-1.0000,基本数论运算下取整、上取整、四舍五入、离0近方向取整、最简有理数、求模的余数、最大公约数、最小公倍数、质因数分解、判定是否为质数,例:

对下面的数据进行取整运算-0.2765,0.5772,1.4597,2.1091,1.191,-1.6187A=-0.2765,0.5772,1.4597,2.1091,1.191,-1.6187;floor(A)%向-inf方向取整ans=-10121-2ceil(A)%向+inf方向取整ans=01232-1round(A)%取最近的整数ans=01121-2fix(A)%向0的方向取整ans=00121-1,例:

3x3Hilbert矩阵,试用rat()函数变换A=hilb(3);n,d=rat(A)将元素变换成最小有理数,n,d分别为分子、分母矩阵。

n=111111111d=123234345,例:

1856120,1483720,最大公约数、最小公倍数,质因数分解。

formatlongm=1856120;n=1483720;gcd(m,n),lcm(m,n)求m,n的最大公约数、最小公倍数。

ans=1.0e+009*0.000001960000001.40508284000000factor(lcm(n,m)对lcm(n,m)进行质因数分解。

ans=222577757947,例:

1-100间质数A=1:

10;isprime(A)若向量A中某个整数值为质数,则相应位置为1,其他为零。

ans=0110101000A=1:

100;B=A(isprime(A)B=Columns1through162357111317192329313741434753Columns17through25596167717379838997rem(A,C)%A中元素对C中元素求模得出的余数。

2.4.1循环结构for结构while结构,2.4MATLAB语言流程控制,例:

用循环求解s=0;fori=1:

100s=s+i;ends=0;i=1;while(isum(1:

100)ans=5050例:

用循环求解求最小的ms=0;m=0;while(s=10000),m=m+1;s=s+m;end,s,m%求出的m即是所求ans=10011141,例:

求tic,s=0;fori=1:

100000,s=s+1/2i+1/3i;end;tocelapsed_time=1.1820tic,i=1:

100000;s=sum(1./2.i+1./3.i);toc向量化所需时间少elapsed_time=0.3010i=1:

10;s=1./2.i+1./3.i,ss=sum(1./2.i+1./3.i)s=0.83330.36110.16200.07480.03540.01700.00830.00410.00200.0010ss=1.4990,2.4.2转移结构,例:

用循环求解求最大的ms=0;fori=1:

10000s=s+i;ifs10000,break;endendii=141,2.4.3开关结构,和C语言的区别当开关表达式的值等于某表达式,执行该语句后结束该结构,不用break当需要在开关表达式满足若干个表达式之一时执行某一程序段,则用单元形式(用大括号把这些表达式括起来,用逗号分隔)otherwise语句,不是C语言中的default(但与之等价)程序的执行结果和各个case顺序无关case语句中条件不能重复,否则列在后面的条件将不能执行,全新结构(首先试探性执行语句1,若执行过程中有错,将错误信息赋给保留的lasterr变量,并终止这段语句的执行,转而执行语句2。

)应将不保险但快的算法放在语句1,保险的放在语句2;或语句2说明语句1失效原因。

2.4.4试探结构,函数是MATLAB编程的主流方法除了函数外,还可以采用M-script(M脚本文件)文件M-script适合于小规模运算例:

若最大值不为10000,需修改程序对m和10000值的设置,不适合于M-script,2.5MATLAB函数的编写,2.5.1MATLAB语言的函数的基本结构,nargin,nargout分别表示输入和返回变量的实际个数,此为MATLAB保留变量,只要进入该函数,MATLAB就将自动生成这两个变量。

varargin,varargout输入、输出变量列表(可变输入输出个数)。

例:

前面的要求,m,10000functionm,s=findsum(k)s=0;m=0;while(sm1,s1=findsum(145323)m1=539s1=145530无需修改程序,例:

若只给出一个输入参数,则会自动生成一个方阵在函数中给出合适的帮助信息检测输入和返回变量的个数editmyhilb,functionA=myhilb(n,m)%产生A=MYHILB(N,M)或A=MYHILB(N);ifnargout1,error(Toomanyoutputarguments.);endifnargin=1,m=n;elseifnargin=0|nargin2error(Wrongnumberofinputarguments.);endA1=zeros(n,m);fori=1:

nforj=1:

mA1(i,j)=1/(i+j-1);end,endifnargout=1,A=A1;elseifnargout=0,disp(A1);end,helpmyhilb产生A=MYHILB(N,M)或A=MYHILB(N);A=myhilb(3,4)A=1.00000.50000.33330.25000.50000.33330.25000.20000.33330.25000.20000.1667A=myhilb(4)A=1.00000.50000.33330.25000.50000.33330.25000.20000.33330.25000.20000.16670.25000.20000.16670.1429A=myhilb(3,4,5)?

Errorusing=myhilbToomanyinputarguments.,例:

函数的递归调用:

阶乘functionk=my_fact(n)ifnargin=1,error(输入变量个数错误,只能有一个输入变量);endifnargout1,error(输出变量个数过多);endifabs(n-floor(n)eps|n1%如果n1,进行递归调用k=n*my_fact(n-1);elseifany(01=n)%0!

=1!

=1k=1;end,my_fact(11)ans=39916800其实MATLAB提供了求取阶乘的函数factorial(),其核心算法为prod(1:

n),从结构上更简单、直观,速度也更快。

prod(1:

11)ans=39916800prod(1:

3:

11)ans=280,例:

conv()可以计算两个多项式的积用varargin实现任意多个多项式的积functiona=convs(varargin)a=1;fori=1:

length(varargin),a=conv(a,varargini);endP=12405;Q=12;F=123;D=convs(P,Q,F)D=16193645443530poly2sym(D)ans=x7+6*x6+19*x5+36*x4+45*x3+44*x2+35*x+30,2.5.2可变输入输出个数,E=conv(conv(P,Q),F)%若采用conv()函数,则需要嵌套调用E=16193645443530poly2sym(E)ans=x7+6*x6+19*x5+36*x4+45*x3+44*x2+35*x+30G=convs(P,Q,F,1,1,1,3,1,1)G=1115617637657867864852731590,2.5.3inline函数和匿名函数,inline函数,可以免去文件f=inline(sin(x.2+y.2),x,y)MATLAB7.0,2.6二维图形绘制,2.6.1二维图形绘制基本语句,构造向量:

例:

选项为红色点划线且每个转折点用五角星表示r-.pentagram,例:

x=-pi:

0.05:

pi;%以0.05为步距构造自变量向量y=sin(tan(x)-tan(sin(x);%求出各个点上的函数值plot(x,y)plot(x,y,r-.pentagram),x=-pi:

0.05:

-1.8,-1.801:

.001:

-1.2,-1.2:

0.05:

1.2,.1.201:

0.001:

1.8,1.81:

0.05:

pi;%以变步距方式构造自变量向量y=sin(tan(x)-tan(sin(x);%求出各个点上的函数值plot(x,y)%绘制曲线,例:

x=-2:

0.02:

2;%生成自变量向量y=1.1*sign(x).*(abs(x)1.1)+x.*(abs(x)plot(-2,-1.1,1.1,2,-1.1,-1.1,1.1,1.1),图形元素属性获取与修改,图形中,每条曲线、坐标轴、图形窗口分别是一个对象。

可用set()函数设置对象的属性,用get()函数获得对象的某个属性。

这两个语句在界面编程中特别有用。

2.6.2其他二维图形绘制语句二维条形图、罗盘图、羽毛状图、直方图、极坐标图、阶梯图形、x-半对数图、彗星状轨迹图、误差限图形、二维填充图、对数图、磁力线图、火柴杆图、y-半对数图。

例:

绘制极坐标曲线theta=0:

0.01:

6*pi;rho=5*sin(4*theta/3);polar(theta,rho)rho=5*sin(theta/3);polar(theta,rho)周期确定,可以采用试凑方法,例:

用不同曲线绘制函数表示正弦曲线t=0:

.2:

2*pi;y=sin(t);%先生成绘图用数据subplot(2,2,1),stairs(t,y)%分割窗口,在左上角绘制阶梯曲线subplot(2,2,2),stem(t,y)%火柴杆曲线绘制subplot(2,2,3),bar(t,y)%条型图绘制subplot(2,2,4),semilogx(t,y)%横坐标为对数的曲线,2.6.3隐函数绘制及应用,隐函数例:

ezplot(x2*sin(x+y2)+y2*exp(x+y)+5*cos(x2+y)x自选ezplot(x2*sin(x+y2)+y2*exp(x+y)+5*cos(x2+y),-1010),2.7三维图形绘制,2.7.1三维曲线绘制stem3(三维火柴杆型曲线),fill3(三维填充图形),bar3(三维直方图)等。

例:

参数方程t=0:

.1:

2*pi;%构造t向量,注意下面的点运算x=t.3.*sin(3*t).*exp(-t);y=t.3.*cos(3*t).*exp(-t);z=t.2;plot3(x,y,z),grid%三维曲线绘制stem3(x,y,z);holdon;plot3(x,y,z),grid,2.7.2三维曲面绘制,一般曲面绘制mesh()绘制网格图,surf()绘制表面图。

其他函数,光照下surfl(),等高线surfc(),瀑布型waterfall()等高线绘制contour(),contour3(),例:

Butterworth滤波器x,y=meshgrid(0:

31);n=2;D0=200;D=sqrt(x-16).2+(y-16).2);%求距离z=1./(1+D.(2*n)/D0);mesh(x,y,z),%计算并绘制滤波器axis(0,31,0,31,0,1)%重新设置坐标系,增大可读性surf(x,y,z)%绘制三维表面图contour3(x,y,z,30)三维等高线图,30等高线条数,例:

试绘制出二元函数x,y=meshgrid(-2:

.1:

2);z=1./(sqrt(1-x).2+y.2)+1./(sqrt(1+x).2+y.2);Warning:

Dividebyzero.(TypewarningoffMATLAB:

divideByZerotosuppressthiswarning.)Warning:

Dividebyzero.(TypewarningoffMATLAB:

divideByZerotosuppressthiswarning.)surf(x,y,z),shadingflat%修饰其显示形式,xx=-2:

.1:

-1.2,-1.1:

0.02:

-0.9,-0.8:

0.1:

0.8,0.9:

0.02:

1.1,1.2:

0.1:

2;yy=-1:

0.1:

-0.2,-0.1:

0.02:

0.1,0.2:

.1:

1;x,y=meshgrid(xx,yy);z=1./(sqrt(1-x).2+y.2)+1./(sqrt(1+x).2+y.2);Warning:

Dividebyzero.(TypewarningoffMATLAB:

divideByZerotosuppressthiswarning.)Warning:

Dividebyzero.(TypewarningoffMATLAB:

divideByZerotosuppressthiswarning.)surf(x,y,z),shadingfaceted;set(gca,zlim,0,20)%获得当前坐标轴对象的句柄,例:

Butterworth滤波器x,y=meshgrid(0:

31);n=2;D0=200;D=sqrt(x-16).2+(y-16).2);z=1./(1+D.(2*n)/D0);%计算滤波器subplot(221),surf(x,y,z),axis(0,31,0,31,0,1);view(0,90)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2