《matlab与数值分析课》全册配套课件3_第1页
《matlab与数值分析课》全册配套课件3_第2页
《matlab与数值分析课》全册配套课件3_第3页
《matlab与数值分析课》全册配套课件3_第4页
《matlab与数值分析课》全册配套课件3_第5页
已阅读5页,还剩621页未读 继续免费阅读

下载本文档

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

文档简介

《matlab与数值分析课》全册配套课件3Matlab与数值分析几点要求:记好课堂笔记保证课堂纪律及时完成作业和实验按时上课,不迟到早退1.MATLAB软件平台及编程第一章matlab概论(2学时)MATLAB软件平台简介MATLAB的基本操作要求:熟悉和了解MATLAB软件平台,掌握MATLAB基本操作。1.MATLAB软件平台及编程第二章matlab基本知识(4学时)

(2.1-2.3)MATLAB的数组与矩阵符号矩阵与符号运算多项式及其运算1.MATLAB软件平台及编程第二章matlab编程(续)(2学时)(2.4)M文件及函数编写程序结构程序终止、异常处理和调试1.MATLAB软件平台及编程第三章MATLAB数据的图形表示

(2学时)(3.1-3.2)MATLAB二维绘图基本二维绘图;特殊的二维绘图函数;填充多边形。MATLAB三维绘图三维图形的基本函数;绘制三维折线及曲线;绘制三维网格曲面。1.MATLAB软件平台及编程补充:Simulink建模与仿真

(4学时)Simulink的基本操作与模型窗口模型创建与系统仿真子系统创建与封装运行Simulink模型2.数值分析基础理论与算法第四章数值计算的基本概念(3学时)误差与有效数字计算机计算的几个问题算法的稳定性问题算法设计原则2.数值分析基础理论与算法第五章线性方程组的数值方法(6学时)(教材第八、第九章)高斯消元法矩阵分解向量范数与矩阵范数Jacobi迭代法方程组的病态问题与误差分析方阵的特征值和特征向量的计算2.数值分析基础理论与算法第六章函数的数值逼近(5学时)(教材第4章)代数多项式插值问题线性插值三次样条插值曲线拟合的最小二乘法第七章数值积分(4学时)插值型求积公式复化求积公式高斯求积公式2.数值分析基础理论与算法第八章常微分方程初值问题(4学时)(教材第六章)欧拉方法稳定性与收敛性分析龙格-库塔法2.数值分析基础理论与算法第九章非线性方程求解

(3学时)(教材第七章)非线性方程的求解方法求解非线性方程数值解的MATLAB编程实现2.数值分析基础理论与算法课程安排课程总结(1学时)上机实验(16学时)课程设计基本要求:针对MATLAB编程、Simulink建模与仿真和数值分析的基本理论应用与仿真等相关内容进行课外的课题设计、实现和总结报告,提高学生对实际问题的分析能力、实现能力和文档编写能力。命题形式:任课教师命题学生自主命题课程考核方式:平时成绩+上机实验+课程设计+课程考试(开卷)

平时成绩+上机实验30%课程设计20%课程考试50%教材和参考书教材:《MATLAB数值计算方法》,张德丰等编著,机械工业出版社,2010。

参考资料:《数值计算引论》,白峰杉,高等教育出版社,2004。《科学计算引论—基于MATLAB的数值分析》,ShoichiroNakamura,电子工业出版社,2002。《数值分析基础教程》,李庆杨,高等教育出版社,2001。联系方式Email:wangjg@

Call:61830486Address:科研楼B505房数值分析有什么用?

研究工作需要什么?研究活动的大致过程题目问题解决问题思路具体工作实验理论分析研究工作需要什么?模型分析结论分析工作仿真实验理论分析。。。数值计算数值计算数值分析输入复杂问题或运算

计算机近似解数值计算中的问题?例:地球的表面积有多大?数学工具数值分析讲述的基本内容如何把数学模型归结为数值问题如何估计一个给定算法的精度分析误差在计算过程中的积累和传播如何构造精度更高的算法如何使算法较少的占用存储量如何分析算法的优缺点例:蝴蝶效应

——纽约的一只蝴蝶翅膀一拍,风和日丽的北京就刮起大风来了?!NYBJ病态问题/*ill-posedproblem*/例:线性方程组求解

则得不到解3x+y

73x+y13.001x+y12.999x+y1o线性方程组系数对解的敏感MATLAB工具软件科学家和工程技术人员需要的研究工具

一种演算纸式的科学工程计算语言

MATLAB

1.核心部分:几百个核心内部函数。2.大量可选的工具箱。MATLAB的两个主要部分MATLAB的基本组成MATLAB主程序

MATLAB语言、工作环境、句柄图形、数学函数库和应用程序接口MATLAB的功能性工具箱

如:Simulink:动态系统仿真MATLAB的学科性工具箱如:signalprocessingtoolbox信号处理工具箱

例:用一个简单命令求解线性系统

3x1+x2-x3=3.6x1+2x2+4x3=2.1-x1+4x2+5x3=-1.4线性系统求解:(Ax=b)线性系统求解:(Ax=b)

输入指令:A=[31-1;124;-145];b=[3.6;2.1;-1.4];x=A\b得到结果:x=1.4818-0.46060.3848x=linspace(0,6)y1=sin(2*x),y2=sin(x.^2),y3=(sin(x)).^2;plot(x,y1,x,y2,x,y3)例、用简短命令计算并绘制在0x6范围内的sin(2x)、sinx2、sin2x。常用专业性工具箱:ControlSystem最基本的控制工具箱SignalProcessing信号处理工具箱ImageProcessing图像处理工具箱Communication通讯工具箱Higher-OrderSpectralAnalysis高阶谱分析Spline样条分析工具箱Statistics统计分析工具箱…MATLAB的部分通用命令clear:删除内存中的变量。clc:删除工作窗口的内容。clf:删除图形窗口的内容。Matlab联机帮助命令

help功能提供matlab大部分主题的在线帮助信息help

显示help

主题一览表helpplotxyz

显示有关三维做图指令帮助信息虽然help可以随时提供帮助,但必须知道准确的函数名称。当不能确定函数名称时,help就无能为力了。

Lookfor函数—它可提供通过一般的关键词,搜索出一组与之相关的命令lookforfourier

寻找含有傅立叶变换的相关指令变量查询函数who与whos作用都是列出在matlab工作空间中已经驻留的变量名清单不同的是whos在给出驻留变量的同时,还给出他们的维数及性质Matlab的演示功能demo

在线演示MATLAB的数值运算数据类型数据运算:双精度型(Double)支持的数据类型:数值型、字符型、单元型和结构型

复数的表示:

i,j表示虚数单位

z=a+b*i或z=a+b*j当b是一个数字时,可以表示为

z=a+bi或z=a+bjMATLAB的矩阵和数组运算matlab具有出色的矩阵运算能力,占据世界上数值计算软件的重要地位矩阵的创建:创建矩阵的方法直接输入法规则:矩阵元素必须用[]括住矩阵元素必须用逗号或空格分隔

在[]内矩阵的行与行之间必须用分号分隔

矩阵元素可以是任何matlab表达式,可以是实数,也可以是复数,复数可用特殊函数I,j输入

a=[123;456]x=[2pi/2;sqrt(3)3+5i]

矩阵元素:注意:只要是赋过值的变量,不管是否在屏幕上显示过,都存储在工作空间中,以后可随时显示或调用。变量名尽可能不要重复,否则会覆盖2.用matlab函数创建矩阵空阵[]—matlab允许输入空阵,当一项操作无结果时,返回空阵。rand——随机矩阵eye——单位矩阵zeros——全部元素都为0的矩阵ones——全部元素都为1的矩阵向量的生成:利用冒号生成向量x=i:j如果I<J,生成以1为增量的向量如果I>J,生成X空向量x=i:j:kj是递增步长矩阵的标识和引用矩阵的子矩阵通过向量、标量的标识来引用和赋值。

1.向量标识

A(u,v)2.“0~1”向量标识A(L)例:找出4阶魔方阵中大于10的元素。

A=16231351110897612414151规则:所有字符串都用单引号括起来;字符串中的每个字符都是字符串变量中的一个元素;字符串中的字符以ASCII码形式存储并区分大小字符串数组字符串数组的建立。

例:a=‘Thisisatest.’A=‘中国成都’

B=‘China‘’中國‘’’字符串数组的建立有效字符串连成长字符串多行字符串数组的直接创建利用字符串操作函数创建字符串数组利用转换函数建立字符串数组字符串数组的元素标识符号的作用:

“,”逗号的作用逗号可作为指令间的分隔符,matlab允许多条语句在同一行出现。

把matlab工作空间中一些有用的数据长久保存下来的方法是生成mat数据文件。

save——将工作空间中所有的变量存到matlab.mat文件中。数据的保存与获取默认文件名

savefilename——将工作空间中所有的变量存到filename.mat文件中。

savefilenameab——将工作空间中a和b变量存到filename.mat文件中。

load——loadfilename——loadfilenameab——mat文件是标准的二进制文件,还可以ASCII码形式保存。即可恢复保存过的所有变量矩阵加、减(+,-)运算规则:相加、减的两矩阵必须有相同的行和列两矩阵对应元素相加减。允许参与运算的两矩阵之一是标量。标量与矩阵的所有元素分别进行加减操作。第二章矩阵运算及应用2.矩阵乘()运算规则:A矩阵的列数必须等于B矩阵的行数标量可与任何矩阵相乘。a=[123;456;780];b=[1;2;3];c=a*bc=143223

矩阵除的运算在线性代数中没有,有矩阵逆的运算,在matlab中有两种矩阵除运算。矩阵左除:A\B

定义为:X=A\BAX=B

矩阵右除:B/A

定义为:X=B/AXA=B(B/A)’=(A’\B’)

a^p——a自乘p次幂

方阵整数3.矩阵乘方当p为正整数时,表示方阵自乘p次;当p为负整数时,表示方阵自乘p次后的逆;当p为零时,为方阵同维的单位阵。

a=[1,2,3;4,5,6;7,8,9];a^2ans=303642668196102126150inv——矩阵求逆det——行列式的值eig——矩阵的特征值diag——对角矩阵’——矩阵转置sqrt——矩阵开方4.矩阵的其它运算

数组运算指元素对元素的算术运算,与通常意义上的由符号表示的线性代数矩阵运算不同数组加减(.+,.-)a.+ba.-b数组运算

对应元素相加减(与矩阵加减等效)2.数组乘除(

,./,.\)ab——a,b两数组必须有相同的行和列两数组相应元素相乘。a=[123;456;789];b=[246;135;7910];a.*bans=281841530497290a=[123;456;789];b=[246;135;7910];a*bans=253746558510985133172

a./b=b.\aa.\b=b./aa./b=b.\a—都是a的元素被b的对应元素除a.\b=b./a—都是b的元素被a的对应元素除例:a=[123];b=[456];c1=a.\b;c2=b./ac1=4.00002.50002.0000c2=4.00002.50002.0000——

给出a,b对应元素间的商.例:a=[123];b=[456];z=a.^2z=1.004.009.00z=a.^bz=1.0032.00729.003.数组乘方(.^)—元素对元素的幂关系操作和逻辑操作关系操作符:<、<=、>、>=、==(等于)、~=(不等于)关系运算规则:两个变量都是标量,则结果为真(1)或假(0)。两个变量都是数组,则必须大小相同,结果也是同样大小的数组,数组的元素为0或1。关系操作一个数组和一个标量,则把数组的每个元素分别与标量比较,结果为与数组大小相同的数组,数组的元素为0或1。<、<=和>、>=,仅对参加比较变量的实部进行比较,

==和~=,则同时对实部和虚部进行比较。逻辑操作逻辑操作符:&(与)、|(或)、~(非)和xor(异或)。aba&ba|b~axor(a,b)000010010111100101111100运算符优先级'(矩阵转置)、^(矩阵幂)和.'(数组转置)、.^(数组幂)~(逻辑非)*(乘)、/(左除)、\(右除)和.*(点乘)、./(点左除)、.\(点右除)+、-(加减):(冒号)<、<=、>、>=、~=&(逻辑与)多项式的表示和创建在Matlab中,任意的多项式都是用一个行向量表示,将多项式的系数按降幂排列存放在行向量中。多项式p(x)=a0xn+a1xn-1+…+an-1x+an对应的行向量为:P=[a0a1…an]。直接创建多项式例:p(x)=2x4+5x3-8x+3[250-83]通过根创建多项式poly其调用格式如下:P=poly(A)如A为向量,则P是多项式的系数行向量,该多项式的根A。注意:如A为n×n的矩阵,则P是一个长度为n+1的行向量,它是A的特征多项式的系数;例:A=[6-86;100;020];p=poly(A),roots(p), D=eig(A)求根:roots

调用方式:

roots(A)注意:求根的精度问题:例:y=(x-1)6=x6-x5+15x4-20x3+15x2-6x+1a=[1-615-2015-61]a=1-615-2015-61>>roots(a)ans=1.0042+0.0025i1.0042-0.0025i1.0000+0.0049i1.0000-0.0049i0.9958+0.0024i0.9958-0.0024i多项式的基本运算多项式的乘法conv多项式的乘法本质上是多项式系数向量的卷积运算。卷积的定义为

K

c(k)=a(i)b(k+1-i)i=1在Matlab,完成此功能的命令是conv:C=conv(a,b)。例:求a=x3+3x2+2x1+1和b=4x3+3x2+9x1+10的乘积。a=[1321]; b=[43910];c=conv(a,b)多项式的除法dconv多项式的除法的运算实质就是多项式系数的解卷积运算。向量a对向量c进行解卷积得到的商向量q和余向量r,满足:

kc(k)-r(k)=a(i)q(k+1-i)i=1在Matlab,完成此功能的命令是dconv:[q,r]=dconv(c,a)其中:

c=conv(a,q)+r例:a=[1321];c=[4152647512910];[q,r]=deconv(c,a)多项式的加减对多项式所对应的向量利用数组加减运算规则执行加减运算。注:多项式所对应的向量如果大小不相等,必须用0补齐。例:求a=x3+3x2+2x1+1和b=4x3+3x2+9x1+10的和与差。a=[1321]; b=[43910];c=a+b,c1=a-b,多项式的求导polyder

不仅可以计算单个多项式的导数,还可以计算两个多项式相乘和相除的导数。其调用方式如下:polyder(p):返回多项式系数向量p的导数;polyder(a,b):返回多项式a*b的导数;[q,d]=polyder(b,a):返回b/a的导数,用q/d表示。其中q是结果的分子多项式,d是结果的分母多项式。例:求a=x3+3x2+2x1+1和b=4x3+3x2+9x1+10的乘和商的导数。a=[1321]; b=[43910];polyder(a,b)[q,d]=polyder(b,a)多项式的求值polyval在Matlab中,多项式求值有两种方式:按数组规则和按矩阵规则计算多项式值。y=polyval(p,x):按数组规则运算。用来计算多项式p在自变量x处的值,可以是数、向量和矩阵。如果x是向量或矩阵,则该命令将对x的每个元素计算p的值,结果大小和x的大小相同;y=polyvalm(p,x):按矩阵规则运算。自变量x是一方阵。例:p=[23306]; x=[1-1];y=polyval(p,x)x=[-11;1-1]y1=polyval(p,x)y2=polyvalm(p,x)6.多项式的部分分式展开没有多重根:

B(s)R(1)R(2)R(n)----=--------+--------+...+--------+K(s)A(s)s-P(1)s-P(2)s-P(n)有多重根时,则包含有:R(j)R(j+1)R(j+m-1)--------+------------+...+------------s-P(j)(s-P(j))^2(s-P(j))^m

在Matlab中完成此任务的指令是residue:[r,p,k]=residue(b,a):求b(s)/a(s)的部分分式展开,返回值r是留数,p是极点,k是整式向量,a,b分别是分母和分子;[b,a]=residue(r,p,k):将展开式还原为两个多项式b(s)和a(s)相除的形式。例:a=[24582];b=[3583];[r,p,k]=residue(b,a)[bb,aa]=residue(r,p,k)特殊变量和常数非数(NaN或nan),非数的意思是:不是一个数,指无效的数值。空数组,凡是某维长度为0或若干维长度均为0的数组都是空数组。特殊的变量熟悉MATLAB的工作环境熟练应用MATLAB的帮助信息创建和修改矩阵符号的用法矩阵及数组运算小结:作业:1.给出MATLAB帮助信息的使用方法。2.给出生成向量{}的指令。3.计算多项式的根。第三章MATLAB程序设计3.1M文件3.2程序控制结构3.3函数文件3.4程序举例3.5程序调试3.1M文件3.1.1M文件概述用MATLAB语言编写的程序,称为M文件。M文件可以根据调用方式的不同分为两类:命令文件(ScriptFile)和函数文件(FunctionFile)。例分别建立命令文件和函数文件,将华氏温度f转换为摄氏温度c。程序1:首先建立命令文件并以文件名f2c.m存盘。

clear;%清除工作空间中的变量

f=input('InputFahrenheittemperature:');c=5*(f-32)/9

然后在MATLAB的命令窗口中输入f2c,将会执行该命令文件,执行情况为:

InputFahrenheittemperature:73c=22.77783.1M文件

程序2:首先建立函数文件f2c.m。

functionc=f2c(f)c=5*(f-32)/9

然后在MATLAB的命令窗口调用该函数文件。

clear;y=input('InputFahrenheittemperature:');x=f2c(y)

输出情况为:

InputFahrenheittemperature:70c=21.1111x=21.11113.1M文件3.1.2M文件的建立与打开

M文件是一个文本文件,它可以用任何编辑程序来建立和编辑,而一般常用且最为方便的是使用MATLAB提供的文本编辑器。1.建立新的M文件:启动MATLAB文本编辑器有3种方法:

(1)菜单操作。从MATLAB主窗口的File菜单中选择New菜单项,再选择M-file命令,屏幕上将出现文本编辑器窗口。

(2)命令操作。在MATLAB命令窗口输入命令edit,启动MATLAB文本编辑器后,输入M文件的内容并存盘。

(3)命令按钮操作。单击MATLAB主窗口工具栏上的NewM-File命令按钮,启动MATLAB文本编辑器后,输入M文件的内容并存盘。3.1M文件2.打开已有的M文件:也有3种方法:

(1)菜单操作。从MATLAB主窗口的File菜单中选择Open命令,则屏幕出现Open对话框,在Open对话框中选中所需打开的M文件。在文档窗口可以对打开的M文件进行编辑修改,编辑完成后,将M文件存盘。

(2)命令操作。在MATLAB命令窗口输入命令:edit文件名,则打开指定的M文件。

(3)命令按钮操作。单击MATLAB主窗口工具栏上的OpenFile命令按钮,再从弹出的对话框中选择所需打开的M文件。3.1M文件3.2程序控制结构3.2.1顺序结构1.数据的输入从键盘输入数据,可以使用input函数来进行,该函数的调用格式为:

A=input(提示信息,选项);其中提示信息为一个字符串,用于提示用户输入什么样的数据。如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:

xm=input('What''syourname?','s');2.数据的输出

MATLAB提供的命令窗口输出函数主要是disp函数,其调用格式为:

disp(输出项)

其中输出项既可以为字符串,也可以为矩阵。3.2程序控制结构例输入x,y的值,并将它们的值互换后输出。程序如下:

x=input('Inputxplease.');y=input('Inputyplease.');z=x;x=y;y=z;disp(x);disp(y);3.2程序控制结构例求一元二次方程ax2+bx+c=0的根。程序如下:

a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);3.2程序控制结构3.程序的暂停暂停程序的执行可以使用pause函数,其调用格式为:

pause(延迟秒数)

如果省略延迟时间,直接使用pause,则将暂停程序直到用户按任一键后程序继续执行。若要强行中止程序的运行可使用Ctrl+C命令。3.2程序控制结构3.2.2选择结构1.if语句:在MATLAB中,if语句有3种格式。(1)单分支if语句:

if条件语句组

end

当条件成立时执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。3.2程序控制结构(2)双分支if语句:

if条件语句组1else

语句组2end

当条件成立时执行语句组1,否则执行语句组2,语句组1或语句组2执行完后,再执行if语句的后继语句。3.2程序控制结构例计算分段函数的值。程序如下:

x=input('请输入x的值:');ifx<=0y=(x+sqrt(pi))/exp(2);elsey=log(x+sqrt(1+x*x))/2;endy3.2程序控制结构(3)多分支if语句:

if条件1

语句组1elseif条件2

语句组2……elseif条件m

语句组melse

语句组nend3.2程序控制结构例输入一个字符,若为大写字母则输出其对应的小写字母;若为小写字母则输出其对应的大写字母;若为数字字符则输出其对应的数值;若为其他字符则原样输出。

c=input('请输入一个字符','s');ifc>='A'&c<='Z'disp(char(abs(c)+abs('a')-abs('A')));elseifc>='a'&c<='z'disp(char(abs(c)-abs('a')+abs('A')));elseifc>='0'&c<='9'disp(abs(c)-abs('0'));elsedisp(c);end3.2程序控制结构2.switch语句:根据表达式的取值不同分别执行不同的语句,其语句格式为:

switch表达式

case表达式1

语句组1case表达式2

语句组2……case表达式m

语句组motherwise

语句组nend3.2程序控制结构

当表达式的值等于表达式1的值时,执行语句组1,当表达式的值等于表达式2的值时,执行语句组2,…,当表达式的值等于表达式m的值时,执行语句组m,当表达式的值不等于case所列的表达式的值时,执行语句组n。任意一个分支的语句执行完后,直接执行switch语句的下一句。3.2程序控制结构例某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):

price<200没有折扣

200≤price<5003%折扣

500≤price<10005%折扣

1000≤price<25008%折扣

2500≤price<500010%折扣

5000≤price14%折扣输入所售商品的价格,求其实际销售价格。3.2程序控制结构程序如下:price=input('请输入商品价格');switchfix(price/100)case{0,1}%价格小于200rate=0;case{2,3,4}%价格大于等于200但小于500rate=3/100;casenum2cell(5:9)%价格大于等于500但小于1000rate=5/100;casenum2cell(10:24)%价格大于等于1000但小于2500rate=8/100;casenum2cell(25:49)%价格大于等于2500但小于5000rate=10/100;otherwise%价格大于等于5000rate=14/100;endprice=price*(1-rate)%输出商品实际销售价格3.try语句:try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。语句格式为:

try

语句组1catch

语句组2end3.2程序控制结构例矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。程序如下:

A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%显示出错原因3.2程序控制结构3.2.3循环结构1.for语句:for语句的格式为

for循环变量=表达式1:表达式2:表达式3

循环体语句

end

其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。3.2程序控制结构例一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。程序如下:

form=100:999m1=fix(m/100);%求m的百位数字

m2=rem(fix(m/10),10);%求m的十位数字

m3=rem(m,10);%求m的个位数字

ifm==m1*m1*m1+m2*m2*m2+m3*m3*m3disp(m)endend3.2程序控制结构3.2程序控制结构例当n=100时,求y的值。程序如下:

y=0;n=100;fori=1:ny=y+1/(2*i-1);endyfor语句更一般的格式为:

for循环变量=矩阵表达式循环体语句

end

执行过程是依次将矩阵的各行元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。3.2程序控制结构例写出下列程序的执行结果。

s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];fork=as=s+k;enddisp(s');3.2程序控制结构2.while语句:while语句的执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环。一般格式为:

while(条件)

循环体语句

end3.2程序控制结构例从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们的和。程序如下:

sum=0;cnt=0;val=input('Enteranumber(endin0):');while(val~=0)sum=sum+val;cnt=cnt+1;val=input('Enteranumber(endin0):');endif(cnt>0)summean=sum/cntend3.2程序控制结构3.break语句和continue语句:与循环结构相关的语句还有break语句和continue语句。它们一般与if语句配合使用。

break语句用于终止循环的执行。当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。

continue语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。3.2程序控制结构例求[100,200]之间第一个能被21整除的整数。程序如下:

forn=100:200ifrem(n,21)~=0continueendbreakendn3.2程序控制结构4.循环的嵌套:如果一个循环结构的循环体又包括另一个循环结构,就称为循环的嵌套,或多重循环结构。例若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,500]之间的全部完数。

form=1:500s=0;fork=1:m/2ifrem(m,k)==0s=s+k;endendifm==sdisp(m);endend3.2程序控制结构3.3.1函数文件的基本结构函数文件由function语句引导,其基本结构为:

function输出形参表=函数名(输入形参表)

注释说明部分函数体语句其中以function开头的一行为引导行,表示该M文件是一个函数文件。函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于一个时,则应该用方括号括起来。3.3函数文件例编写函数文件求半径为r的圆的面积和周长。函数文件如下:

function[s,p]=fcircle(r)%CIRCLEcalculatetheareaandperimeterofacircleofradiir%r圆半径

%s圆面积

%p圆周长

%2004年7月30日编

s=pi*r*r;p=2*pi*r;3.3函数文件3.3.2函数调用函数调用的一般格式是:

[输出实参表]=函数名(输入实参表)

要注意的是,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。3.3函数文件例利用函数文件实现直角坐标(x,y)与极坐标(ρ,θ)之间的转换。

1.函数文件tran.m:

function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);2.调用tran.m的命令文件main1.m:

x=input('Pleaseinputx=:');y=input('Pleaseinputy=:');[rho,the]=tran(x,y);rhotheta3.3函数文件

在MATLAB中,函数可以嵌套调用,即一个函数可以调用别的函数,甚至调用它自身。一个函数调用它自身称为函数的递归调用。例利用函数的递归调用,求n!

n!就是以递归的形式定义的,求n!需要求(n-1)!,这时可采用递归调用。递归调用函数文件factor.m如下:

functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*n;%递归调用求(n-1)!end3.3函数文件3.3.3函数参数的可调性在调用函数时,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。3.3函数文件例nargin用法示例。函数文件examp.m:

functionfout=charray(a,b,c)ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end

命令文件mydemo.m:

x=[1:3];y=[1;2;3];examp(x)examp(x,y')examp(x,y,3)3.3.4全局变量与局部变量全局变量用global命令定义,格式为:

global变量名例全局变量应用示例。建立函数文件wadd.m,该函数将输入的参数加权相加。

functionf=wadd(x,y)globalALPHABETAf=ALPHA*x+BETA*y;

在命令窗口中输入:

globalALPHABETAALPHA=1;BETA=2;s=wadd(1,2)3.3函数文件例Fibonacci数列定义如下:

f1=1f2=1fn=fn-1+fn-2(n>2)

求Fibonacci数列的第20项。3.4程序举例A=ones(1,20);fori=3:20A(i)=A(i-1)+A(i-2);endA(20)例猜数游戏。首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“Youwon”,同时退出游戏。用户最多可以猜7次。3.4程序举例A=fix(100*rand(1));fori=1:7B=input('请输入猜测值:');ifA>Bdisp('Low');elseifA<Bdisp('High');elsedisp('Youwon!');break;endend3.5.1程序调试概述一般来说,应用程序的错误有两类,一类是语法错误,另一类是运行时的错误。语法错误包括词法或文法的错误,例如函数名的拼写错、表达式书写错等。程序运行时的错误是指程序的运行结果有错误,这类错误也称为程序逻辑错误。3.5程序调试3.5.2调试器1.Debug菜单项该菜单项用于程序调试,需要与Breakpoints菜单项配合使用。2.Breakpoints菜单项该菜单项共有6个菜单命令,主要用于在程序中设置和清除断点。3.5程序调试MATLAB绘图与程序设计

基本知识一

绘图二维和三维基本绘图命令Matlab图形窗口Matlab有用于图形输出的专用窗口,称为图形窗口。所有的绘图命令将把图象输出到当前窗口,若在命令执行前,当前窗口已经存在图形,则原图形将被新图象覆盖掉。二维平面图形的绘制plot——最基本的二维图形指令

plot的功能:

plot命令自动打开一个图形窗口Figure

用直线连接相邻两数据点来绘制图形根据图形坐标大小自动缩扩坐标轴,将数据标尺及单位标注自动加到两个坐标轴上,可自定坐标轴,可把x,y轴用对数坐标表示线性坐标曲线plotplot(y):参数y为向量,以y的值为纵坐标,y的下标为横坐标。例1:x=[0,0.48,0.84,1,0.91,0.6,0.14]plot(x)plot(x,y):参数x,y为向量,以x为横坐标,以y为纵坐标。注意:x,y的长度必须相等例:t=0:0.001:2*pi;y=cos(t); plot(t,y)plot(Y)参数Y为mⅹn的矩阵。该命令把矩阵Y转化为长度为m的n个向量,然后对n个向量划出n条线。例:y=[5448910;344582; 8579625;988967] plot(y)复向量式plot(Z):当z为一个复向量时,该命令等价于plot(real(Y),imag(Y));其它情况忽略z的虚部。例:t=0:0.1:3*pi;x=t+i*cos(t);plot(x);figure;plot(t,x)综合调用方式plot(x1,y1,x2,y2,…)该命令可以在同一窗口绘制多条曲线。例:t=0:0.1:3*pi;x=t+i*cos(t);plot(real(x),imag(x),t,x)三维绘图可分为三个过程:生成平面网格点生成和绘制三维网格点处理三维表面。

三维曲面绘图生成平面网格点

[X,Y]=meshgrid(x,y)x是区间[x0,xm]上划分点组成的向量;y是区间[y0,yn]上划分点组成的向量;X,Y是输出变量矩阵,矩阵X的行向量都是x,矩阵y的列向量都是y。例:

[X,Y]=meshgrid(-2:2:2,-2:1:2)生成三维网格点mesh(x,y,z,c):x,y,z,c是同维矩阵x,y,z对应确定空间上的网格点c为颜色矩阵;例: [X,Y]=meshgrid(-2:.2:2,-2:.2:2); Z=X.*exp(-X.^2-Y.^2); mesh(Z) 三维表面处理

对网格曲面的网格块区域着色就得到实曲面。mesh命令仅对网格线着色,而对网格片着色使用surf命令。surf的使用方式与mesh相同。例: [X,Y]=meshgrid(-2:.2:2,-2:.2:2); Z=X.*exp(-X.^2-Y.^2); surf(Z); 函数contour绘制二维等高线。用户可以指定等高线的条数、坐标系的比例及某值上的等高线,两者用法相同.等高线的绘制shadingfaceted—网格修饰,缺省方式shadingflat——去掉黑色线条,根据小方块的值确定颜色shadinginterp——颜色整体改变,根据小方块四角的值差补过度点的值确定颜色peaks(30);shadinginterp;colormap(hot)[X,Y,Z]=peaks(30);surfl(X,Y,Z)

shadinginterp;colormap(cool);axisoff透视与消隐p=peaks(30);mesh(p);hiddenon作业:

绘出二元函数

的三维图形。并根据你的兴趣,对图形做出适当的修饰。

M文件类型命令文件(脚本文件script-file)函数文件(function-file)二

编程命令文件格式注解+运行命令将matlab命令构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为命令文件模式。程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语句。例:

%画出花瓣

theta=-pi:0.01:pi;rho(1,:)=2*sin(5*theta).^2;polar(theta,rho(1,:))%极坐标绘图函数定义行文件的第一行,定义函数名,输入输出参数的数量和名称。H1行帮助信息的第一行,紧跟定义行之后。函数说明H1行以后,函数主体以前的帮助信息。函数主体函数中进行真正计算和输出赋值等工作的代码。注释函数体中用‘%’引导的对程序的注释。函数文件格式

函数文件的一般结构:例:functionk=rank(x)%RANK Numberoflinearlyindependentrowsorcolumns.% K=RANK(X)isthenumberofsingularvaluesofX% thatarelargerthanMAX(SIZE(X))*NORM(X)*EPS.% K=RANK(X,tol)isthenumberofsingularvaluesofXthat% arelargerthantol.% Copyright(c)1984-94byTheMathWorks,Inc.s=svd(x);if(nargin==1)tol=max(size(x))*max(s)*eps;endr=sum(s>tol);程序部分M文件的编辑环境

Matlab自身提供的M文件编辑器;一般的文字编辑器,如写字板、记事本和Word等,保存为文本文件,后缀为.m。注:运行m文件之前,必须将文件放在MATLAB的搜索路径上

尽量使函数定义名与函数文件名一致。两者不一致时,MATLAB将忽略函数定义行的函数定义名,而以保存文件名为准。H1行做好用英文表达,利于关键字查询。MATLAB的搜索过程:例:假设MATLAB执行指令cow1.检查cow是否是变量名。2.是否是内建函数(Built_inFunction)。3.是否是cow所在M文件的一个子函数。4.是否是cow所在M文件的一个私有函数。5.是否是当前目录上的文件。6.搜索路径上是否有 cow存在。MATLAB的变量与表达式MATLAB的变量与类型变量命名规则变量名和函数名对字母的大小写敏感;变量名的第一个字符必须是一个英文字母,最多可包括31个字符;变量名可由英文字母、数字和下划线混合组成

;变量名中不得包含空格和标点,但可以由下连字符局部变量:具有函数内部作用范围全局变量:可在几个函数和基本工作空间之间共享,具有全局作用范围全局变量的声明:

global变量名1变量名2…

变量名间用空格分离。全局变量在使用前必须在MATLAB工作空间中申明,而在某个具体的MATLAB函数中如果想用到该全局变量时,也必须在函数中申明。由于全局变量损害函数的封闭性,因此不提倡使用全局变量。局部变量和全局变量永久变量

又称预定义变量(PredefinedVariable)

ans;eps;realmax;realmin;pi;i,j;inf;NaN;compter;flops;version;注:尽可能不对永久变量重新赋值,以免产生混淆MATLAB基本表达式

表达式变量=表达式

MATLAB书写表达式的规则与“手写算式”几乎相同。例:

20.3+3.9*sin(x);

y=sin(x)+cos(x);[x,y,z]=peaks字符串数组、单元数组和结构数组数据类型:单元型cell数组字符型char结构型struct数值型numeric存储型Storage(包括int8,unit8,int16,unit16,int32,unit32)双精度型double稀疏型sparse用户对象userobject

最常用的数据类型只有双精度型和字符型,其他数据类型只在一些特殊条件下使用MATLAB程序结构顺序结构循环结构分支结构顺序结构顺序结构就是依照顺序执行程序的各条语句。语句在程序文件中的位置反映了程序的执行顺序。循环结构for-end循环语法为:

forx=array

可执行语句

end

循环执行的次数为固定的。循环次数由数组(array)的列数决定。例:

forii=1:10;x(ii)=ii;end;x=12345678910说明:for循环不会因为在循环体内对循环变量重新赋值而终止;for循环结构可按需要嵌套使用。技巧:为得到高效代码,尽量提高代码的向量化程度,避免使用循环结构;为得到最快的运算速度,在循环指令前尽量对数组进行预定义例:利用for循环求1!+2!+3!++5!的值

sum=0;fori=1:5pdr=1;fork=1:ipdr=pdr*k;endsum=sum+pdr;endsum=153while-end循环

while循环将循环体中的语句循环执行不定次数。

语法为:

while表达式循环体语句

end

表达式一般是由逻辑运算和关系运算以及一般运算组成的,以判断循环的进行和停止;只要表达式的值非0,继续循环;直到表达式值为0,循环停止。例:用while循环求1~100间整数的和

sum=0;i=1;whilei<=100sum=sum+i;i=i+1;endsumsum=5050

分支结构if-else-end分支结构if—else—end语句有3种形式

if表达式执行语句

endif表达式———

是语句1else————

否语句2end

if表达式1

语句1elseif表达式2

语句2elseif表达式3

语句3

·

·

·

else

语句nend这种结构实现了一种多路选择,比较复杂。可替代一般高级语言

温馨提示

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

评论

0/150

提交评论