第一章 Matlab语言基础
前言 数学软件简介
纵观整个计算机发展的历史,科学研究工程技术中进行数学分析和数值计算已成为一种不可逆转的趋势。早期计算机只能用原始的汇编语言进行数值计算,随着计算机运行速度的加快,各种复杂的高级语言应运而生,Fortran,c,c++,vb等等,但这些语言只能适合于数值计算和开发大规模的软件,而不能直接被工程技术人员用于数学公式的推导和复杂的数据处理和建模。作为科学和工程问题,更多地在于分析计算和形象图示方面,应用通常的计算语言并不方便。为此,20世纪70年代末80年代初,推出了许多科学计算语言,又称为数学软件。数学软件因其高效和推理能力等特点,在大学教育和科学研究中,正迅速取代Fortran等语言。如Mathematica,Maple V,Mathcad,Matlab等等 (1) Maple V
加拿大Waterloo University开发的一种数学软件,目前主要为5.0版本。数值运算、图形处理、符号运算。提供了2000多种数学函数,涉及到代数、欧几里得几何学、数论、有理函数、微积分、矩阵论、群论以及数学的其他许多领域,提供了一套内部编程语言,供用户开发自己的专用程序。 (2) Mathcad
Mathcad是80年代出现的比较早的一个交互式数学软件。由Mathsoft公司开发,与其它数学软件最大的不同是它兼顾了文字、数学和图形处理等功能,是一个多功能的集成化环境,目前流行版本是2000。 (3) Mathematica 历史
Mathematica的原始系统是由美国物理学家Stephen Wolfram领导的一个小组开发来进行量子力学研究的。1987年Stephen Wolfram创建Wolfram研究公司,推出商品版Mathematica1.0,1998年推出目前流行的4.0版本。 特点
(1)Mathematica采用C语言开发,能方便地移植到各种计算机系统上。
(2)Mathematica是一个交互式、集成化的数学软件,主要功能包括以下三个方面:符号
演算、数值计算和图形功能。
交互式:在使用Mathematica时,计算是在用户和Mathematica系统之间互相交换、传递信息与数据的过程中完成的。
集成化:Mathematica是一个集成化的环境,在此环境中,用户可以完成从符号运算到
图形输出等各项功能。
数值计算与符号演算:作任意位精确度的数值计算;作有理式的各种演算;求有理方程与超越方程的精确解和近似解;作一般表达式的向量与矩阵的各种运算;求一般表达式的极限、导数、积分以及幂级数展开;求解微分方程等等.
图形功能:方便地绘制图形。可以作出一元和二元函数的一般图形、等值线图与密度图;作出一元与二元的散点图。
可扩展性:系统本身也提供了许多能完成各种功能的软件包。Mathematica软件的命令系统本身构成了一种功能强大的程序设计语言,用这种语言可以比较方便地定义用户需要的各种函数和程序包。
1.1 Matlab语言简介
计算机应用离不开计算机语言,Fortran,c,c++,vb等高级语言已经成功应用到各种场合,但作为科学和工程问题,更多地在于分析计算和形象图示方面,应用通常的计算语言并不方便。为此,20世纪70年代末80年代初,推出了许多科学计算语言,又称为数学软件。数学软件因其高效和推理能力等特点,在大学教育和科学研究中,正迅速取代Fortran等语言。如matlab,mathematica,maple,mathcad等等。目前在工程上流行最广的是Matlab。在国外的很多学校,Matlab 已成为理工科学生必须掌握的工具。目前已经广泛运用到矩阵代数,数值计算,信号处理,振动理论,小波分析,优化,神经网络,动态仿真等等。
Matrix Laboratory的缩写,主要用来处理矩阵等代数运算,后来发展成为能用科技计算、图视交互系统和程序语言。 历史:
最初由新墨西哥大学计算机系主任Cleve Moler在70年代用FORTRAN语言编写,1983年John Little和Cleve Moler合作,将Matlab用C语言改写,并对其进行了改进,使其同时具有计算和图形可视化功能。84年,两人合作成立Mathworks公司,正式将Matlab推向市场。是目前在工程上流行最广的软件。在国外的很多学校,Matlab 已成为理工科学生必须掌握的工具。目前已经广泛运用到矩阵代数,数值计算,信号处理,振动理论,小波分析,优化,神经网络,动态仿真等等。Matlab语言由Mathworks公司于1984年正式推出。
与其他语言相比:
1.以矩阵为基本运算单位。
2.提供了一个人机交互的数学系统研究环境(演算纸式的科学计算语言) 3.以矩阵结构为基本的数据结构,大大节省编程时间,简洁化,智能化。 4.语法规则简单,调试方便,可以随时存储中间结果。 5.可方便地将可复杂的计算过程凝成程序,随意调用。
6.可以方便地用三维图像,声音,动画等形式来表述计算结果,帮助逻辑思维。 7.可扩展性强,目前已有专业的几十个工具箱。
8.只是一种数据结构,标准的输入输出语句,不用指针,不用编译。
9.可方便地嵌入其它的高级语言程序。可扩展性强,目前已有专业的几十个工具箱。
Matlab的缺点:
1.函数较多,基本部分700多个,而且目前正在扩展,所以需要多记多练。 2.以解释方式工作,键入程序立即出结果,导致运行速度低。 通用操作界面
指令窗(command window)
历史指令窗(command history)
当前目录浏览器(current directory browser) 工作空间浏览器(workspace browser) 内存数组浏览器(array editor) 交互界面浏览器(launch pad) M文件编辑器(editor/debugger) 帮助导航器(help navigator/browser)
1.2
Command Window运行入门
Command Window指令窗简介 简单的计算器使用法
1.2.1 1.2.2
例1:求[122(74)]32的数值结果。
指令行首行的‘>>’为指示符
‘ans’为英文’answer’的缩写,是一个默认变量 鍵完一个指令的内容后,按下‘enter’鍵执行 1A4725836 9例2:简单矩阵的输入
在M中,不必事先对矩阵维数进行说明,存储时系统自动进行分配。 直接输入矩阵时,矩阵元素之间,用空格或逗号隔开,矩阵行之间用分号或回车鍵隔开。 M对字母大小写敏感。
指令执行后,A被保留在工作空间中直到关闭指令窗,除非用clear命令进行删除或重新赋值。
例3:指令的续行输入
s11/21/31/4...1/51/6s
M中用三个以上的小黑点表示下一行是上一行的继续。
1.2.3 数值变量和表达式
一. 采用习惯的十进制表示,数值的相对精度是eps(可命令查询),数值大体范围
(realmin,realmax)
具有作用域,默认为局部变量,全局变量需要在前面加关键词global
一. 变量的命名规则
(等同于C,C++等高级语言)
二. M默认的预定义变量(predefined variables)
表1.2-1 Matlab的预定义变量
预定义变量 ans eps Inf(inf) i,j pi 含义 计算结果的缺省变量名 机器零阈值 无穷大(如1/0) 虚单元 圆周率 预定义变量 Nan(nan) nargin nargout realmax realmin 含义 不是一个数 (如0/0) 函数输入变量个数 函数输出变量个数 最大正实数 最小正实数 注: 如果不小心改变了常量值,用clear命令来恢复。
三. 运算符与表达式
+ - * /(或\\) ^
所有运算均定义在复数域上,对于方根问题,运算只返回第一象限的解
/ 与\\代表左除与右除,对于标量作用相同,但对于矩阵运算产生不同影响 如果不希望看到运算结果,可用“;”结尾(但运算仍在执行)
四. 复数与复数矩阵 对于复数zabire复数输入格式
z=a+b*i z=r*exp(i*c)
复数矩阵输入格式
实部和虚部分别赋值:A=[]+[]*i
逐个输入: A=[z1,z2…
z3 z4
…]
M的相关指令如下
real(z) %求实部
练习思考
imag(z) %求虚部 abs(z) %求模 angle(z) %求相角
i
例4:如何计算38的全部立方根?
1.3 1.3.1
缺省的情况下,数值结果均以short型显示,即用5位有效数字的科学记数形式显示,但实际上在储存和运算中均以双精度进行。(这也是M在计算大型数据时速度较慢的原因之一)
显示方式的设置
一:指令窗中的[File:preferences]---[command window] (也可在[font&colors]中进行其它设置)
二:指令窗中输入命令
(具体命令用help format 进行查询) 1.3.2
cd clf clc clear dir edit exit/quit md more type which 1.3.3
上下光标箭头-调回已经输入进的命令 左右光标箭头-在当前行中移动光标 pageup,pagedown---前后翻页 esc-清除当前行的所有内容
1.4 1.4.1
Command History 简介
记录着用户在指令窗中输入过的所有指令行,包括每次开启M的时间。
Command History和实录指令diary 指令窗中的指令行的编辑
指令窗中的常用控制指令 Command Window操作要旨 数值计算结果的显示方式
表1.4-1 历史指令窗主要应用功能的操作方法
应用功能 单行或多行指令的复制 操作方法 点亮所需指令,右键点击,引出选择菜单,选中[copy] 点亮所需指令,右键点击,引出选择菜单,选中[Evaluate Selection] 点亮所需指令,右键点击,引把多行指令写成M文件 出选择菜单,选中[Create M-File]
1.4.2 指令窗的实录指令diary
利用diary命令产生“日志”文件,即把当前指令窗中的所有内容(包括指令及计算结果)如实地记录为ASCII文件加以保存。
具体操作过程如下:
1. 创建用以保存日志文件的目录。如c:\\mydir
(可以先在windows中创建,也可在Matlab中用命令 mkdir(‘c:\\’,’mydir’) 2. 将目录设置为当前目录。
可以通过桌面上[current directory]进行,也可在指令窗中运行 cd c:\\mydir 3. 在指令窗中运行指令 diary my-diary
4. 运用指令diary off 关闭记录指令,则所有的操作内容就保存在文件 my-diary 中 注: 1.“日志”文件不能在Matlab中运行。 2.“日志”文件可用用Matlab的M文件编辑器或其它的文本软件打开或编辑,但不能带扩展名
1.5 Current Directory、路径设置和文件管理
1.5.1 当前目录浏览器
利用[view]打开。
利用current directory 界面的弯箭头,可使界面脱离操作桌面,几何独立。
表1.5-1 文件详细列表区的主要应用功能的操作方法
应用功能 操作方法 运行M文件 编辑M文件 点亮-右击-[RUN] 点亮-右击-[Open] 利用菜单[view]…[dock current directory]使浏览器重新嵌入操作桌面。 改变浏览器外表的方法:[File:preferences]
简捷操作方法 对于单行指令,可用左键双击 单行或多行指令的运行 简捷操作方法 左键双击 左键双击 把MAT文件全部数据装入内存 点亮-右击-[Open] 把MAT文件部分数据装入内存 点亮-右击-[Import data]-[Import data Wizard]
注:
用户目录与当前目录的设置,参见1.4.2
1.5.2 搜索路径
1. Matlab的基本搜索过程
用户输入一个指令后order,Matlab 的动作次序大抵如下:
在内存中进行检查,是否为变量,不是,进行下一步。 检查order是否为内建函数,不是,则往下执行。
在当前目录中检查是否有名为order的M文件存在,不是,再往下执行
在Matlab的其他搜索路径中,检查是否有名为order的文件存在。 2.实际搜索中的一些要点
1.5.3
1. 何时需要修改搜索路径
用户有多个目录需要与Matlab交换信息,则应把这些目录放置在Matlab的搜索路径中,如果其中某个目录需要用来存放运行中产生的文件和数据,应该把这个目录设置为当前目录。
2. 修改搜索路径的方式
在指令窗中运行指令 pathtool 在菜单条中,选择[File:Set path]项 利用指令path:
path(path,’c:\\mydir’) %把c:\\mydir设置为搜索路径的尾端 path(’c:\\mydir’,path) %把c:\\mydir设置为搜索路径的首端
1.6
Workspace Browser和Array Editor
凡不在搜索路径上的内容,不可能被搜索到,并执行。 实际搜索比前面所述要复杂的多。 搜索路径的扩展和修改
1.6.1 Workspace Browser简介
工作空间浏览器,又称为内存浏览器。
表1.6-1 工作空间浏览器主要应用功能的操作方法
应用功能 变量的字符显示 变量的图形显示 全部内存变量保存操作方法 点亮变量,右键-选中[Open Selection]项。 点亮变量,右键-选中[Graph Selection]项。 点亮变量,右键-选中[Save 简捷操作方法 左键双击 为MAT文件 部分内存变量保存为MAT文件
1.6.2
Workspace as…]项。 点亮若干变量,右键-选中[Save Selection as…]项。 指令窗中内存变量的查阅和删除
一.查阅指令 who, whos常用格式
who,whos:列出当前工作空间变量。 who var1 var2…:列出变量var1,var2…的信息 who a*:列出以a开头的变量的信息 s=who(whos)(…):将显示的信息存入结构s.
删除指令clear常用格式
clear:删除内存中所有的变量
clear var1 var2 …:删除内存中变量var1,var2… [注]
更多用法可用help 查询。
二.利用工作空间浏览器的菜单操作
在工作空间浏览器中选中所要操作的变量,右击,选择。 (多项选取,采用组合键[Ctrl+左键])
1.6.3 Array Editor和大数组的输入
在工作空间浏览器中双击作一个数值数组,可引出Array Editor。
6.0以上的版本不支持单元数组,构架数组,符号型数组,三维以上的数值数组,
及二维或更高维的字符串数组。
由于在指令窗中输入较大规模的数组操作比较笨拙,可以采用Array Editor。具体操作如下:
(A) 在指令窗中,向一个新变量赋以“空”阵。(var=[]) (B) 在内存浏览器中,双击该变量,打开Array Editor。 (C) 在Array Editor的栏中填入数组的大小。 (D) 逐个填写元素值。
1.6.4 数据文件的存取
一.指令操作法
save filename %把全部内存变量保存为filename.mat文件 save filename v1 v2… %把变量v1,v2…保存为filename.mat文件 save filename v1 v2…-append %把变量v1,v2…添加到filename.mat文件
save filename v1 v2… -ascii %把变量v1,v2…保存为filename.mat 8位ascii文件
save filename v1 v2… -ascii -double %把变量v1,v2…保存为filename.mat 16位ascii
文件
load filename %把FileName.mat文件中全部变量装入内存 load filename v1 v2… %把FileName.mat文件中变量v1,v2…装入内存 load filename v1 v2… -ascii %把FileName.mat ascii文件中变量v1,v2装入内存
二.Workspace 中的右击菜单
1.7
帮助系统
help [topic] help [filename] doc
helpbrowser/helpdesk demo version whatsnew computer
因篇幅问题不能全部显示,请点此查看更多更全内容