如何用matlab编程(2x-5)x^(2/3) 怎么改呀,负数部分不对,系统显示复数

当前位置: >>
Matlab2012最新教程(代码直接复制调试)
第1章1.1基础准备及入门最 简单的计算器使用法为易于学习,本节以算例方式叙述,并通过算例归纳一些 MATLAB 最基本的规则和语 法结构。建议读者,在深入学习之前,先读一读本节。 【例 1.3-1】求 [12 ? 2 ? (7 ? 4)] ? 3 的算术运算结果。本例演示:最初步的指令输入形式??2??和必需的操作步骤。 (1)用键盘在 MATLAB 指令窗中输入以下内容&& (12+2*(7-4))/3^2(2)在上述表达式输入完成后,按 [Enter] 键,该指令被执行,并显示如下结果。ans = 2〖说明〗 ? 本例在指令窗中实际运行的情况参见图 1.3-1。 ? 指令行“头首”的“ &&”是“指令输入提示符” ,它是自动生成的。本书在此后的输 入指令前将不再带提示符“ &&” 。理由是: (A)为使本书简洁; (B)本书用 MATLAB 的 M-book 写成,而在 M-book 中运行的指令前是没有提示符的。5 ? MATLAB 的运算符(如+、- 等)都是各种计算程序中常见的习惯符号。 ? 一条指令输入结束后,必须按 [Enter] 键,那指令才被执行。 ? 由于本例输入指令是“不含赋值号的表达式” ,所以计算结果被赋给 MATLAB 的一个 默认变量“ans” 。它是英文“answer”的缩写。 【例 1.3-2】 “续行输入”法。本例演示:或由于指令太长,或出于某种需要,输入指令行必 须多行书写时,该如何处理。S=1-1/2+1/3-1/4+ ... 1/5-1/6+1/7-1/8 S = 0.6345〖说明〗 ? ? ? MATLAB 用 3 个或 3 个以上的连续黑点表示“续行” ,即表示下一行是上一行的继续。 本例指令中包含“赋值号” ,因此表达式的计算结果被赋给了变量 S。 指令执行后,变量 S 被保存在 MATLAB 的工作空间(Workspace)中,以备后用。如 果用户不用 clear 指令清除它,或对它重新赋值,那么该变量会一直保存在工作空间中, 直到本 MATLAB 指令窗被关闭为止。1.3.3数 值、变量和表达式前节算例只是表演了“计算器”功能,那仅是 MATLAB 全部功能中小小一角。为深入 学习 MATLAB,有必要系统介绍一些基本规定。本节先介绍关于变量的若干规定。一数值的记述3MATLAB 的数值采用习惯的十进制表示,可以带小数点或负号。以下记述都合法。 -99 0.001 9.456 1.3e-3 4.5e33在采用 IEEE 浮点算法的计算机上,数值通常采用“占用 64 位内存的双精度”表示。 其相对精度是 eps (MATLAB 的一个预定义变量) ,大约保持有效数字 16 位。数值范围大 致从 10?308到 10308。二变量命名规则? 变量名、函数名是对字母大小写敏感的。如变量 myvar 和 MyVar 表示两个不同的变量。 sin 是 MATLAB 定义的正弦函数名,但 SIN,Sin 等都不是。 ? ? 变量名的第一个字符必须是英文字母,最多可包含 63 个字符(英文、数字和下连符) 。 如 myvar201 是合法的变量名。 变量名中不得包含空格、标点、运算符,但可以包含下连符。如变量名 my_var_201 是 合法的,且读起来更方便。而 my,var201 由于逗号的分隔,表示的就不是一个变量名。6 三MATLAB 默认 的预定义变量1.3-1。每当在 MATLAB 中有一些所谓的预定义变量(Predefined Variable) ,见表MATLAB 启动,这些变量就被产生。这些变量都有特殊含义和用途。建议:用户在编写指 令和程序时,应尽可能不对表 1.3-1 所列预定义变量名重新赋值,以免产生混淆。 表 1.3-1 预定义变量 ans eps Inf 或 inf i 或 pi 〖说明〗 ? 假如用户对表中任何一个预定义变量中进行赋值,则那个变量的默认值将被用户新赋的 值“临时”覆盖。所谓“临时”是指:假如使用 clear 指令清除 MATLAB 内存中的变 量,或 MATLAB 指令窗被关闭后重新启动,那么所有的预定义变量将被重置为默认值, ? 不管这些预定义变量曾被用户赋过什么值。 在遵循 IEEE 算法规则的机器上,被 0 除是允许的。它不会导致程序执行的中断,只 是在给出警告信息的同时,用一个特殊名称(如 Inf,NaN)记述。这个特殊名称将在 以后的计算中以合理的形式发挥作用。 【例 1.3-3】运用以下指令,以便初步了解预定义变量。本例演示:预定义变量已经存在的 事实;若干预定义变量的数量级概念。format long realmax ans = 1.316e+308 realmin ans = 2.201e-308 eps ans = 2.313e-016 pi ans = 3.79MATLAB 中最常用的预定义变量 义 预定义变量 NaN 或 nargin nargout realmax realmin?含 机器零阈值 无穷大,如 1/0含义计算结果的默认变量名nan不是一个数(Not a Number) , 如 0/0, ? / ? ???函数输入宗量数目 函数输出宗量数目 最大正实数 最小正实数j虚单元 i ??j ???? 1 圆周率 ???7 四运算符和表达式表 1.3-2 MATLAB 表达式的基本运算符 数学表达式 加 减 乘 除 幂 圆括号 矩阵运算符 a+b a-b a*b a/b 或 b a^b ( ) \a 数组运算符 a+b a-b a .* b a ./ b 或 b .\ a a .^ b ( )(1)经典教科书上的算术运算符在 MATLAB 中的表达方式,见表 1.3-2。a?b a?b a ?b a?b? ???ab( )〖说明〗 ? ? ? ? 因为 MATLAB 面向复数设计,其所有运算定义在复数域上。所以对于方根问题,运算 只返还一个“主解” 。要得复数的全部方根,必须专门编写程序(见例 1.3-6) 。 因为 MATLAB 面向矩阵/数组设计,标量被看作 (1? 1) 的矩阵/数组。?数组运算的“乘、除、幂”规则与相应矩阵运算根本不同。前者的算符比后者多一个“小 黑点”(参见例 1.3-9,例 1.3-10。更详细说明请看第 3 章) 。 MATLAB 用左斜杠或右斜杠分别表示“左除”或“右除”运算。对标量而言, “左除” 和“右除”的作用结果相同。但对矩阵来说, “左除”和“右除”将产生不同的结果。(2)MATLAB 书写表达式的规则与“手写算式”几乎完全相同。 ? ? ? ? ? 表达式由变量名、运算符和函数名组成。 表达式将按与常规相同的优先级自左至右执行运算。 优先级的规定是:指数运算级别最高,乘除运算次之,加减运算级别最低。 括号可以改变运算的次序。 书写表达式时,赋值符“=”和运算符两侧允许有空格,以增加可读性。五面向复数设计的运算――MATLAB 特点之一MATLAB 的所有运算都是定义在复数域上的。这样设计的好处是:在进行运算时,不 必像其他程序语言那样把实部、虚部分开处理。为描述复数,虚数单位用预定义变量 i 或 j 表示。 复数 z ? a ? bi ??re 直角坐标表示和极坐标表示之间转换的 MATLAB 指令如下。? ?i?real(z) imag(z) abs(z) angle(z)给出复数 z 的实部 a ??r cos??。 给出复数 z 的虚部 b ??r sin ??。 给出复数 z 的模2a ?b 。?2以弧度为单位给出复数 z 的幅角 arctanb。a8 【例 1.3-4】复数 z1 ? 3 ? 4i, z? ?2? 1? 2i, z? ?3i ??2e 6 表达,及计算 z ? z1z 2 。本例演示:正 z3?确的复数输入法;涉及复数表示方式的基本指令。 (1)经典教科书的直角坐标表示法z1= 4 + 3i z1 = 4.0000 + 3.0000i %合法,但建议少用或不用〖说明〗 ? 本书建议读者不要使用这种输入格式。因为这种书写格式,只适用于“数值标量”复数, 而不适用于“数值矩阵” 。 ? 在这种书写格式中,4i 是一个完整的虚数,在 4 和 i 之间不许“空格”存在。 (2)采用运算符构成的直角坐标表示法和极坐标表示法z2 = 1 + 2 * i z3=2*exp(i*pi/6) z=z1*z2/z3 z2 = 1.0000 + 2.0000i z3 = 1.7321 + 1.0000i z = 1.8840 + 5.2631i (3)复数的实虚部、模和幅角计算 real_z=real(z) image_z=imag(z) magnitude_z=abs(z) angle_z_radian=angle(z) angle_z_degree=angle(z)*180/pi real_z = 1.8840 image_z = 5.2631 magnitude_z = 5.5902 angle_z_radian = 1.2271 angle_z_degree = 70.3048 %弧度单位 %度数单位 %运算符构成的直角坐标表示法 %运算符构成的极坐标表示法【例 1.3-5】图示复数 z 1 ??4 ? 3i, z?2? 1 ? 2i 的和(配图 1.3-2) 。本例演示:MATLAB 的运??9 算在复数域上进行;指令后“分号”的作用;复数加法的几何意义;展示 MATLAB 的可视 化能力(让读者感受,但不要求理解) 。z1=4+3*i;z2=1+2*i; %在一个物理行中,允许输入多条指令。 %但各指令间要用“分号”或“逗号”分开。 %指令后采用“分号” ,使运算结果不显示。 z12=z1+z2 %以下用于绘图 clf,hold on %clf 清空图形窗。逗号用来分隔两个指令。 plot([0,z1,z12],'-b','LineWidth',3) plot([0,z12],'-r','LineWidth',3) plot([z1,z12],'ob','MarkerSize',8) hold off,grid on, axis equal axis([0,6,0,6]) text(3.5,2.3,'z1') text(5,4.5,'z2') text(2.5,3.5,'z12') xlabel('real') ylabel('image') shg z12 = 5.0000 + 5.0000i图 1.3-2两个复数相加【例 1.3-6】 用 MATLAB 计算 3 ? 8 能得到 C2 吗(配图 1.3-3)?本例演示:MATLAB 运?10 算定义在复数域的实质;指令后“分号”抑制运算结果的显示;MATLAB 的方根运算规则; 更复杂指令的表示方式;展现 MATLAB 的图形表现力。 (对于本例指令,读者能有体验就 可,不必强求理解。 ) (1)直接计算时,得到处于第一象限的方根。a=-8; r_a=a^(1/3) r_a = %求 3 次根1.0000 + 1.7321i(2) 3 ? 8 的全部方根计算如下?% 先构造一个多项式 p(r) ??r3?a?p=[1,0,0,-a]; %p 是多项式 p(r) 的系数向量 %指令末尾的“英文状态分号”使该指令运行后,不显示结果。 R=roots(p) R = -2.0 + 1.0 - 1.7321i %求多项式的根(3)图形表示MR=abs(R(1)); t=0:pi/20:2* x=MR*sin(t); y=MR*cos(t); plot(x,y,'b:'),grid on hold on plot(R(2),'.','MarkerSize',30,'Color','r') axis([-3,3,-3,3]),axis square hold off %画第一象限的方根 %保证屏幕显示呈真圆 plot(R([1,3]),'o','MarkerSize',15,'Color','b')%画另两个方根 %画一个半径为 R 的圆 %注意“英文状态逗号”在不同位置的作用 %计算复根的模 %产生参变量在 0 到 2*pi 间的一组采样点11 图1.3-3(-8)的全部三次方根分布〖说明〗 ? 本例有助于理解 MATLAB 的计算特点。 ? 对复数进行方根运算时,MATLAB 只给出处于“第一象限”的那个根。六面向数组设计的运算――MATLAB 特点之二?在 MATLAB 中,标量数据被看作 (1? 1) 的数组(Array)数据。所有的数据都被存放在 适当大小的数组中。为加快计算速度(运算的向量化处理) ,MATLAB 对以数组形式存储的 数据设计了两种基本运算:一种是所谓的数组运算;另一种是所谓的矩阵运算。在此仅以算 例展示 MATLAB 的计算特点,更详细的叙述请见第 3 章。 【例 1.3-7】实数数组 AR ?????????的“一行”输入法。本例演示:二维数组的最基本、最 ???????13?24?常用输入法;二维数组输入的三大要素。 (1)在键盘上输入下列内容AR= [1,3;2,4](2)按 [Enter] 键,指令被执行。 (3)在指令执行后,MATLAB 指令窗中将显示以下结果:AR = 1 2 3 4〖说明〗 ? ? 在 MATLAB 中,不必事先对数组维数及大小做任何说明,内存将自动配置。 二维数组输入的三大要素:数组标识符“[ ]” ;元素分隔符空格或逗号“,” ;数组行间 分隔符分号“;”或“回车键” 。注意:所有标点符号都是“英文状态的符号” 。12 ? MATLAB 对字母大小写是敏感的。比如本例中的数组赋给了变量 AR,而不是 Ar, aR, 或 ar 。 ? 在全部键入一个指令行内容后,必须按下 [Enter] 键,该指令才会被执行。请读者务必 记住此点。出于叙述简明的考虑,本书此后将不再重复提及此操作。【例 1.3-8】实数数组 AI ?AI=[5,7 6,8] AI = 5 6 7 85 的“分行”输入法。 ? 6 8? 7 ?〖说明〗 ? ?? ?本例采用这种输入法是为了视觉习惯。当然,对于较大的数组也可采用此法。 在这种输入方法中, “回车”符用来分隔数组中的行。?2 ? 6i 4 ? 8i ? ? ? ? 示:复数数组的生成;MATLAB 指令对数组元素“并行操作”的实质。 ?? ?【例 1.3-9】对复数数组 A ?1? 5i?3? 7i?进行求实部、虚部、模和幅角的运算。本例演(1)创建复数数组A=AR-AI*i A =AR=[1,3;2,4];AI=[5,7;6,8]; %形成复数矩阵 3.0000 - 7.0 - 8.0000i1.0000 - 5.0 - 6.0000i(2)求复数数组的实部和虚部A_real=real(A) A_image=imag(A) A_real = 1 2 A_image = -5 -6 -7 -8 3 4(3)求复数数组中各元素的模和幅角――循环法(笨拙! )for m=1:2 for n=1:2 Am1(m,n)=abs(A(m,n));13 Aa1(m,n)=angle(A(m,n))*180/ %以度为单位计算幅角 end end Am1,Aa1 Am1 = 5.6 Aa1 = -78.4 -71.9 7.3(4)求复数数组中各元素的模和幅角――直接法Am2=abs(A) Aa2=angle(A)*180/pi Am2 = 5.6 Aa2 = -78.4 -71.9 7.3〖说明〗 ? 函数 real, imag, abs, angle 是同时、并行地作用于数组的每个元素。对 4 个元素运算所需 的时间大致与对单个元素所需时间相同。这有利于运算速度的提高。这是“向量化”运 算的一种形式。 ? 本例给出了循环法求各元素模和幅角的指令。这是很不有效的计算方法。对于 MATLAB 以外的许多编程语言来说,可能不得不采用“循环”处理方式来解本例。记住:对于 MATLAB 来说,应该尽量摒弃“循环”处理,而采用“向量化”处理方式。t 3【例 1.3-10】画出衰减振荡曲线 y ??et=0:pi/50:4* y=exp(-t/3).*sin(3*t); axis([0,4*pi,-1,1]) xlabel('t'),ylabel('y')?sin 3t , t 的取值范围是[0,4? ](配图 1.3-4) 。本例?演示:展示数组运算的优点;展示 MATLAB 的可视化能力。%定义自变量 t 的取值数组 %计算与自变量相应的 y 数组。注意:乘法符前面的小黑点。 %绘制曲线plot(t,y,'-r','LineWidth',2)14 图 1.3-4衰减振荡曲线〖说明〗 ? 本例第二条指令中的“.*”符号表示乘法是在两个数组相同位置上的元素间进行的。 本书把这种乘法称为“数组乘” 。数组乘的引入,不但使得程序简洁自然,而且避免了 ? 耗费机时的“循环计算” 。关于数组运算的详细叙述请见第 3 章。 本例第二条指令是典型的“向量化”处理形式。本书作者建议读者,只要可能,应尽量 采用“向量化”运算形式。【例 1.3-11】复数矩阵 B ? ?3 ? 2i? ?2 ? 6i? ?? 5 ? 3i ?? 的生成,及计算 A ? B 矩阵乘积(A 取自算例 ? 4 ? 2i??1.3-9) 。本例演示:MATLAB 矩阵运算指令的简捷性。B=[3+2i,2+6i;5+3*i,4-2*i] C=A*B B = 3.0000 + 2.0 + 3.0000i C = 49.0i 30.0i 62.0i 40.0i %复数数组的又一种输入方式 %注意标点符号的作用 %矩阵乘法 2.0000 + 6.0 - 2.0000i〖说明〗 ? 当数组被赋予“变换”属性时,二维数组就被称为矩阵。只有当两个矩阵的“内维大小 相等”时,矩阵乘法才能进行。本例中,矩阵 A 的列数与矩阵 B 的行数相等,所以可 以进行 A 乘 B。 ? ? 从表达方式看, “矩阵相乘”的指令格式与“标量相乘”指令格式一样。在其他编程语 言中,矩阵乘法不得不依赖“循环”进行。 MATLAB 之所以能把矩阵运算表达得像标准“线性代数”那样简洁易读、自然流畅, 那是由于 MATLAB 的设计者采用了“面向对象”编程技术。15 1.4Command Window 操作要旨前一节借助算例,使读者对 MATLAB 指令窗的使用方法有了一个直观的感受。本节将在上节的基础上对控制指令窗的指令和操作进行较系统的归纳,以便读者更全面地了解 MATLAB,更方便地使用 MATLAB。1.4.1指 令窗的显示方式一 默 认的输入显示方式从 MATLAB7.0 起,指令窗中的字符、数值等采用更为醒目的分类显示: (1) 对于输入指令中的 if, for, end 等控制数据流的 MATLAB 关键词自动地采用蓝色字体 显示。 (2) 对于输入指令中的非控制指令、数码,都自动地采用黑色字体显示。 (3) 输入的字符串自动呈现为紫色字体。二运 算结果的显示在指令窗中显示的输出有:指令执行后,数值结果采用黑色字体输出;而运行过程中的 警告信息和出错信息用红色字体显示。 运行中,屏幕上最常见到的数字输出结果由 5 位数字构成。这是“双精度”数据的默认 输出格式。用户不要误认为,运算结果的精度只有 5 位有效数字。实际上,MATLAB 的数 值数据通常占用 64 位(Bit)内存,以 16 位有效数字的“双精度”进行运算和输出。MATLAB 为了比较简洁、紧凑地显示数值输出,才默认地采用 format short g 格式显示出 5 位有效数 字。用户根据需要,可以在 MATLAB 指令窗中,直接输入相应的指令,或者在菜单弹出框 中进行选择,都可获得所需的数值计算结果显示格式。MATLAB 数值计算结果显示格式的 类型见表 1.4-1。 表 1.4-1 数据显示格式的控制指令 指 令 含 义 举 例 说 明 format format short format long format short e format long e format short g format long g format rat format hex format + 通常保证小数点后四位有效,最多不超 314.159 被显示为 314.1590; 过 7 位;对于大于 1000 的实数,用 5 位 3141.59 被显示为 3. 有效数字的科学记数形式显示。 15 位数字表示 5 位科学记数表示 15 位科学记数表示 择最佳记数方式 从 format long 和 format long e 中自动选 3.79 择最佳记数方式 近似有理数表示 十六进制表示 355/113 442d18 3.79 3..79e+00从 format short 和 format short e 中自动选 3.1416显示大矩阵用。正数、负数、零 分别用 +16 + , - , 空格表示。 format bank format loose 〖说明〗 ? ? format short 显示格式是默认的显示格式 。 该表中实现的所有格式设置仅在 MATLAB 的当前执行过程中有效。 (金融)元、角、分表示 在显示变量之间有空行 3.14 format compact 显示变量之间没有空行三 显 示方式的永久设置用户根据需要,可以对指令窗的字体风格、大小、颜色和数值计算结果显示格式进行设 置。设置方法是:选中 {File:Preferences}下拉菜单项,引出一个参数设置对话框;在此弹 出对话框的左栏选中“Font & Colors” ,对话框的右边就出现相应的选择内容;用户根据需 要和对话框提示对数据显示格式,或字体等进行选择;最后,通过点击 [OK] 键,便完成 了设置。注意:该设置立即生效,并且这种设置将被永久保留,即这种设置不因 MATLAB 关闭和开启而改变,除非用户进行重新设置。 在此还要指出,对于数值显示格式的设置,也可以直接在指令窗中,通过指令的运作进 行。但这样的设置仅对当前的 MATLAB 指令窗起作用,一旦 MATLAB 关闭,这种设置也 就随之失效。1.4.2指 令行中的标点符号通过前面算例,读者可能已对标点符号的作用有所体会。在此要强调指出:标点在 MATLAB 中的地位极其重要。为此,把各标点的作用归纳成表 1.4-2。 表 1.4-2 MATLAB 常用标点的功能 名 称 标 点 作 用 (为机器辨认)用作输入量与输入量之间的分隔符; 数组元素分隔符。 用作要显示计算结果的指令与其后指令之间的分隔; , 用作输入量与输入量之间的分隔符; 用作数组元素分隔符号。 数值表示中,用作小数点; 用于运算符号前,构成“数组”运算符。 用于指令的“结尾” ,抑制计算结果的显示; 分号 ; 用作不显示计算结果指令与其后指令的分隔; 用作数组的行间分隔符。 用以生成一维数值数组; 冒号 注释号 单引号对 圆括号 : % '' () 用做单下标援引时,表示全部元素构成的长列; 用做多下标援引时,表示那维上的全部元素。 由它“启首”的所有物理行部分被看作非执行的注释 字符串记述符 改变运算次序; 在数组援引时用;17空格逗号黑点. 函数指令输入宗量列表时用。 方括号 花括号 下连符 续行号 [] {} _ ... 输入数组时用; 函数指令输出宗量列表时用。 胞元数组记述符; 图形中被控特殊字符括号。 (为使人易读)用作一个变量、函数或文件名中的连字符; 图形中被控下脚标前导符。 由三个以上连续黑点构成。它把其下的物理行看作该行的 “逻辑”继续,以构成一个“较长”的完整指令。 放在函数名前,形成函数句柄; 匿名函数前导符; 放在目录名前,形成“用户对象”类目录。 〖说明〗为确保指令正确执行,以上符号一定要在英文状态下输入。因为 MATLAB 不能识别含有中文标点的指令。“At”号@1.4.3指 令 cd clf clc clear dir edit 〖说明〗 ? ?指 令窗的常用控制指令表 1.4-3 常见的通用操作指令 含 义 指 exit quit more return type which 令 含 义设置当前工作目录。 清除图形窗 清除指令窗中显示内容 清除 MATLAB 工作空间中保存 的变量 列出指 定目录下 的文件和 子目 录清单 打开 M 文件编辑器关闭/退出 MATLAB 关闭/退出 MATLAB 使其后的显示内容分页进行 返回到上层调用程序;结束键 盘模式 显示指定 M 文件的内容 指出其后文件所在的目录表 1.4-3 所列的指令是基本的,它们对 MATLAB 各版都适用。 尽管随版本的升级,不断增添着列表中指令的“等价”菜单选项操作或工具条图标操作, 但这种“等价”仅对“人机交互”过程而言。至于这些指令在 M 文件中的作用仍是不 可替代的。? ? ?cd 及 dir 指令的操作响应,可以用 MATLAB 操作桌面上或当前目录浏览器中的“浏览 键(Browser) ”替代。关于当前目录浏览器的使用,请看第 1.6 节。 clear 清除内存变量的操作,可以等价地在“工作空间浏览器”交互界面中实现。关于 工作空间浏览器的使用,请看第 1.7 节。 edit 指令的等价操作是:选择 MATLAB 操作桌面或指令窗的下拉菜单项 {File:New: M-file} ,或点击相应工具条上的 1.9 节。 和 图标。关于 M 文件编辑器的使用,请看第1.4.4指 令窗中指令行的编辑18 为了操作方便,MATLAB 不但允许用户在指令窗中对输入的指令行进行各种编辑和运 行,而且允许用户对过去已经输入的指令行进行回调、编辑和重运行。具体的操作方式见表 1.4-4。 表 1.4-4 MATLAB 指令窗中实施指令行编辑的常用操作键 键 ? ? ? ? PageUp 名 作 用 键 End Delete Esc 名 作 用 前寻式调回已输入过的指令行 后寻式调回已输入过的指令行 在当前行中左移光标 在当前行中右移光标 前寻式翻阅当前窗中的内容 Home 使光标移到当前行的首端 使光标移到当前行的尾端 删去光标右边的字符 清除当前行的全部内容Backspace 删去光标左边的字符PageDown 后寻式翻阅当前窗中的内容 〖说明〗 ? 表 1.4-4 所列的操作对 MATLAB 各版均适用。 ? 事实上,MATLAB 把指令窗中输入的所有指令都记录在内存中专门开辟的“指令历史 空间(Command History) ”中,只要用户对它们不进行专门的删除操作,它们既不会因 为用户对指令窗进行“清屏”操作(即运行 clc 指令)而消失,也不会因用户对“工作 ? 空间”进行“清除内存变量” (即运行 clear 指令)而消失。 指令窗中输入过的所有指令都被显示在“历史指令浏览器”交互界面中,以供随时观察 和调用。关于“历史指令浏览器”的使用请看第 1.5 节。 【例 1.4-1】指令行操作过程示例。 (1)若用户想计算 y ?2sin(0.3? )?1???5y1=2*sin(0.3*pi)/(1+sqrt(5))的值,那么用户应依次键入以下字符(2)按 [Enter] 键,该指令便被执行,并给出以下结果y1 = 0.5000(3)通过反复按键盘的箭头键,可实现指令回调和编辑,进行新的计算。 若又想计算 y ????????????? ,用户当然可以像前一个算例那样,通过键盘把相应字?2cos(0.3? )?1 ???5符一个一个“敲入” 。但也可以较方便地用操作键获得该指令,具体办法是:先用 [?] 键 调回已输入过的指令 y1=2*sin(0.3*pi)/(1+sqrt(5)) ;然后移动光标,把 y1 改成 y2;把 sin 改成 cos ;再按 [Enter] 键,就可得到结果。即y2=2*cos(0.3*pi)/(1+sqrt(5)) y2 = 0.3633〖说明〗 ? 可以借助“历史指令窗”进行历史指令的再运行,相关内容请看第 1.5.1 节。19 1.5Command History 历史指令窗MATLAB 所拥有的丰富资源和友善灵活的环境特别适于用来验证一些思想,思考一些问题,和帮助进行创造性思维。用户可以在 MATLAB 环境中,边想边做,做做想想,对随 时蹦出的思想“火花”可即刻通过计算加以验证。历史指令窗(Command History)就是为 这种应用方式设计的。1.5.1Command History 历史指令窗简介历史指令窗记录着:每次开启 MATLAB 的时间,及开启 MATLAB 后在指令窗中运行 过的所有指令行。 该窗不但能清楚地显示指令窗中运行过的所有指令行,而且所有这些 被记录的指令行都能被复制,或再运行。关于历史指令窗的功能详见表 1.5-1。 表 1.5-1 应 用 功 能 单行或 多行指 令 的复制 单行指令的运行 历史指令窗主要应用功能的操作方法 操 作 方 法 简捷操作方法点亮单行或多行指令;按鼠标右键引出现场菜单;选中 {Copy}菜单项,即可用复合键 [Ctrl + V] 把它“粘贴” 到任何地方(包括指令窗) 。 点 亮 单行 指 令 ; 按 鼠标 右 键 引 出 现场 菜 单 ; 选 中 鼠标 左键 双击 {Evaluate Selection} 菜单项,即可在指令窗中运行,并 单行指令。 见到相应结果。 点 亮 多行 指 令 ; 按 鼠标 右 键 引 出 现场 菜 单 ; 选 中 {Evaluate Selection} 菜单项,即可在指令窗中运行,并 见到相应结果。 (详见例 1.5-1)多行指令的运行把多行 指令写 成 M 文件点 亮 多行 指 令 ; 按 鼠标 右 键 引 出 现场 菜 单 ; 选 中 {Create M-File} 菜单项,就引出书写着这些指令的 M 文件编辑调试器;再进行相应操作,即可得所需 M 文 件。1.5.2历 史指令的再运行历史指令的重新调用,既可以采用第 1.4.4 节所介绍的方法实现,也可以借助历史指令 窗进行。在许多场合,后者显得更为方便、直观。 【例 1.5-1】演示如何再运行算例 1.3-10 中的全部绘图指令。 具体操作过程:先利用组合操作 [Ctrl + 鼠标左键] 点亮如图 1.5-1 所示历史指令窗中 的那五行指令;当鼠标光标在点亮区时,点击鼠标右键,引出现场菜单;选中现场菜单项 {Evaluate Selection} ,计算结果就出现在指令窗中。20 图 1.5-1再运行历史指令的演示〖说明〗 ? 历史指令的复制操作步骤大抵相同。但在现场菜单中,应选 {Copy} 项。 ? 单行历史指令的再运行操作更简单,只要用鼠标左键双击所需的那行指令即可。1.6Current Directory、路径设置器和文件管理当在指令窗中运行一条指令时,MATLAB 是怎样从庞大的函数和数据库中,找到所需 的函数和数据的呢?用户怎样才能保证自己所创建的文件能得到 MATLAB 的良好管理,又 怎样能与 MATLAB 原有环境融为一体呢?这就是本节要介绍的内容。1.6.1Current Directory 当前目录浏览器简介如图 1.6-1 所示的当前目录浏览器界面上,自上而下分别是:当前目录名,工具条,文 件、文件夹列表及文件描述区等。此外,MATLAB 还为当前目录窗设计了一个专门的操作 菜单。借助该菜单可方便地打开或运行 M 文件、装载 MAT 文件数据等。详见表 1.6-1。21 图 1.6-1 当前目录浏览器和适配的弹出菜单表 1.6-1 当前目录适配菜单的应用 应 用 功 能 运行 M 文件 编辑 M 文件 把 MAT 文件全部 数据输入内存 把 MAT 文件部分 数据输入内存 操 作 方 法 简捷操作方法 点亮待 运行文 件;按鼠 标右键引 出现场菜 单;选 中 {Run}菜单项,即可使该 M 文件运行。 点亮待 运行文 件;按鼠 标右键引 出现场菜 单;选 中 鼠标 左键 双击 {Open} 菜单项,此 M 文件就出现在编辑/调试器中。 M 文件。 点亮待装数据文件;按鼠标右键引出现场菜单;选中 鼠标 左键 双击 {Open} 菜单项,此文件的数据就全部装入工作内存。 MAT 文件。 点亮待装载数据文件;按鼠标右键引出现场菜单;选中 {Import Data} 菜 单 项 , 引出 数 据 预 览选 择 对 话 框 “Import Wizard” ;在此框中“勾选”待装数据变量名, 点击 [Finish] 键,就完成操作。 〖说明〗 ? MATLAB 启动后的默认当前目录通常是:MATLAB\R2006a\work。应当指出:在该默 认当前目录上存放用户文件是允许的、完全的、可靠的。MathWorks 公司之所以设计这 样一个目录,就是供用户使用的。 若 MATLAB 的启动由点击 MATLAB\R2006a\bin\win32 目录下的 matlab.exe 触发,那么 当 前 目 录 将 是 MATLAB 所 在 的 根 目 录 。 提 醒 读 者 : 千 万 不 要 把 MATLAB\R2006a\bin\win32 设成当前目录,也尽量不要把 MATLAB 所在根目录设成当 前目录。对此,用户应该通过重新设置,把当前目录设置在适当的目录上。?1.6.2用 户目录和当前目录设置(1)建立用户目录 在使用 MATLAB 的过程中,为管理方便,本书作者建议:用户应尽量为自己建立一个 专门的工作目录,即“用户目录” ,用来存放自己创建的应用文件。尽管,matlab\work 允许 用户存放文件,用户最好仅把它作为临时工作目录使用。 在 Windows 环境下,创建目录是十分简单的规范操作。因此,本文不再赘述。 (2)应把用户目录设置成当前目录 在 MATLAB 环境中,如果不特别指明存放数据和文件的目录,那么 MATLAB 总默认 地将它们存放在当前目录上。因此,出于 MATLAB 运行可靠和用户方便的考虑,本书作者 建议:在 MATLAB 开始工作的时候,就应把用户自己的“用户目录”设置成当前目录。 (3)把用户目录设置成当前目录的方法 方法一:交互界面设置法 在 MATLAB 操作桌面右上方,或当前目录浏览器左上方,都有一个当前目录设置区。 它包括: “目录设置栏”和“浏览键” 。用户或在“设置栏”中直接填写待设置的目录名,或 借助“浏览键”和鼠标选择待设置目录。 方法二:指令设置法 通过指令设置当前目录是各种 MATLAB 版本都适用的基本方法。这种指令设置法的适22 用范围比交互界面设置法大。它不仅能在指令窗中执行,而且可以使用在 M 文件中。假设 待设置的用户目录是 c:\mydir ,那么把它设置为当前目录的指令是 cd c:\mydir 。 注意:以上方法设置的当前目录,只是在当前开启的 MATLAB 环境中有效。一旦 MATLAB 重新启动,以上设置操作必须重新进行。1.6.3MATLAB 的搜索路径MATLAB 的所有(M、MAT、MEX)文件都被存放在一组结构严整的目录树上。MATLAB 把这些目录按优先次序设计为“搜索路径”上的各个节点。此后,MATLAB 工作时,就沿 着此搜索路径,从各目录上寻找所需的文件、函数、数据。 当用户从指令窗送入一个名为 cont 的指令后,MATLAB 的基本搜索过程大抵如下。 ? ? ? ? 检查 MATLAB 内存,看 cont 是不是变量;假如不是变量,则进行下一步。 检查 cont 是不是内建函数(Built-in Function) ;假如不是,再往下执行。 在当前目录上,检查是否有名为 cont 的 M 文件存在;假如不是,再往下执行。 在 MATLAB 搜索路径的其他目录中,检查是否有名为 cont 的 M 文件存在。 应当指出: (A)实际搜索过程远比前面描述的基本过程复杂。但又有一点可以肯定, 凡不在搜索路径上的内容,不可能被搜索。 (B)指令 exist、 which、 load 执行时,也都遵 循搜索路径定义的先后次序。1.6.4MATLAB 搜索路径的扩展一 何 时需要修改搜索路径假如用户有多个目录需要同时与 MATLAB 交换信息,那么就应把这些目录放置在 MATLAB 的搜索路径,使得这些目录上的文件或数据能被调用。又假如其中某个目录需要 用来存放运行中产生的文件和数据,那么还应该把这个目录设置为当前目录。二? ?利 用设置路径对话框修改搜索路径在指令窗里,运行指令 pathtool。 在 MATLAB 桌面、指令窗等的菜单条中,选择 {File:Set Path} 下拉菜单项。采用以下任何一种方法都可以引出设置路径对话框(图 1.6-2) 。23 图 1.6-2路径设置对话框〖说明〗 ? 该对话框设置搜索路径有两种修改状态: 当前有效修改 假如在路径设置过程中,仅使用了该对话框的左侧按键。 永久有效修改 假如在设置后,点击了对话框下方 [Save] 按键。 ? 所谓永久有效修改是指:所进行的修改不因 MATLAB 的关闭而消失。三 利 用指令 path 设置路径利用 path 指令设置路径的方法对任何版本的 MATLAB 都适用。假设待纳入搜索路径 的目录为 c:\my_dir ,那么以下任何一条指令均能实现: path(path,'c:\my_dir') path('c:\my_dir',path) 把 c:\my_dir 设置在搜索路径的尾端 把 c:\my_dir 设置在搜索路径的首端〖说明〗 ? 用 path 指令扩展的搜索路径仅在当前 MATLAB 环境下有效。也就是说:若用户退出 当前 MATLAB 后,再重新启动 MATLAB,那么在前一环境下用 path 所定义的扩展搜 ? 索路径无效。 用 path 指令扩展的搜索路径的方法可以编写在程序中。1.71.7.1工作空间浏览器和数组编辑器Workspace 工作空间 浏览器简介工作空间浏览器(或称内存浏览器)默认地放置于 MATLAB 操作桌面的左上侧后台。 点击桌面左上侧框下方外露的“Workspace”窗标,可使工作空间浏览器出现在桌面的前台。 该浏览器的功用,详见表 1.7-1。24 图 1.7-1 工作空间浏览器及“绘图工具”图标的展开表 1.7-1 工作空间浏览器主要功能及其操作方法 功 能 创建 新变量 点击 操 作 方 法 简捷操作法 图标,在工作空间中生成一个“unnamed”的新变量;双击该新变量图标,引出 Array Editor 数组编辑器(如图 1.7-3) ; 在数组编辑器中,向各元素输入数据;最后,对该变量进行重 命名。 用鼠 标左键 点 亮变 量 ; 或 点击 图 标 , 或 选中 弹 出 菜单 中 的 {Open Selection} 项,则变量内含的数据就显示在“Array Editor”数 双击变量。 组编辑器中。 (数组编辑器详见第 1.7-3 节) 点亮变量;或选中图标 下拉菜单项,或选中弹出菜单中的 绘图项,就可以适当地绘出选中变量的图形。 (详见例 1.7-1) 选择待保存到文件的(一个或多个)变量,或点击图标 ,或 选中弹出菜单中的 {Save Workspace As}项,便可把那些变量保 存到 MAT 数据文件。 (详见第 1.7-4 节之一) 点击图标 ; 选择 MAT 数据文件; 再单击那文件, 引出 “Import Wizard”界面,它展示文件所包含的变量列表;再从列表中, 选择待装载变量,便可。显示 变量内容 图示变量 用文件 保存变量 从文件向 内存装载 变量【例 1.7-1】通过“工作空间浏览器”的运作,采用图形显示内存变量 y 。 (注意:本例是 在例 1.3-10 运行后进行的,因此内存中保存着由例 1.3-10 产生的全部变量。 ) (1)借助“图标菜单”图示变量 在“工作空间浏览器”中,用鼠标点亮所需图示的变量 y ;再选中“图标菜单”的 {plot(y)} ,就可得到图 1.7-2 所示的图形。 (2)借助“现场弹出菜单”图示变量 在鼠标点亮变量 y 后,按鼠标右键引出“现场菜单” ,再选择现场菜单中的 {plot(y)}菜 单项,也可以画出图 1.7-2 所示的曲线。25 图 1.7-2数组 y 表示的曲线〖说明〗 ? 例 1.3-10 的图 1.3-4 虽与本例图 1.7-2 形状相同,但含义却不同。这两张图的纵轴刻度 相同,但横轴刻度不同。前者表现的是函数关系 y ??f (t) ;而后者表现的是数组 y(k) , 在此 k 是数组元素的序号。 ? 注意:借助图形表现数据是十分常用的手段。这是由于图形具有表现数据内在联系和宏 观特征的卓越能力。1.7.2工 作空间的管理指令本节要介绍管理工作空间的三个常用指令:who, clear, pack。一查 询指令 who 及 whos【例 1.7-2】在指令窗中运用 who, whos 查阅 MATLAB 内存变量。 who, whos 在指令窗中运行后的显示结果如下:who Your variables are: ans t whos Name ans t y Size 1x1 1x201 1x201 Bytes Class 8 double array 1608 double array 1608 double array yGrand total is 403 elements using 3224 bytes26 〖说明〗 ? ? ? who, whos 指令操作对 MATLAB 的所有版本都适用。 本例两个指令的差别仅在于获取内存变量信息的简单和详细程度不同。 读者运行 who, whos 指令后的变量列表随具体情况而不同。本例的变量列表是在本书作 者进行特定操作后产生的。二从 工作空间中删除变量和函数的指令 clear清除工作空间中的所有变量 清除工作空间中的 var1 和 var2 变量 清除工作空间中所有的变量、全局变量、编译过的 M 函数和 MEX 链接。 清除工作空间中名为 fun1 和 fun2 的函数最常用的几种格式: clear clear var1 var2 clear all clear fun1 fun2注意:在第 2、4 调用格式中,clear 后面的变量名和函数名之间一定要采用“空格” 分隔,而不能采用其他符号。三整 理工作空间内存碎片的指令 pack在 MATLAB 运行期间,它会自动地为产生的变量分配内存,也会为使用到的 M 函数分 配内存。有时对于容量较大的变量,会出现“Out of memory”的错误。此时,可能使用 clear 指令清除若干内存中的变量也无济于事。产生这种问题的一个原因是:MATLAB 存放一个 变量时,必须使用“连成一片”的内存空间。对于那些被碎片分割得“支离破碎”的内存空 间,即便它们的总容量超过待生成变量,也无法使用。在这种情况下,借助 pack 指令也许 能解决问题。1.7.3Array Editor 数组 编辑器图 1.7-3工作空间变量数组编辑器27 双击工作空间浏览器中的变量图标,将引出如图 1.7-3 所示的数组编辑器 Array Editor。 该编辑器可用来查看、编辑数组元素;对数组中指定的行或列进行图示。 点击图标 ,创建一个名为“unnamed”的变量;在双击该变量引出一个与图 1.7-3 类 似的界面。但数组中,除第一个元素为 0 外,其余均为“空白” 。利用这个界面,读者就可 以比较自在地输入较大的数组。 从 MATLAB7.0 版起,数组编辑器不但能观察和编辑“双精度”数组,而且也能观察和 编辑“字符串”数组、 “胞元”数组、和“构架”数组。1.7.4数 据文件和变量的存取一 借 助工作空间浏览器产生保存变量的 MAT 文件从工作空间浏览器中选择待保存到文件的(一个或多个)变量;再点击图标 ,或选中 弹出菜单中的 {Save As} 项;就可把那些变量保存到(由用户自己命名的)mydata.mat 的 数据文件。该数据文件默认地存放在“当前目录”上。二借 助输入向导 Import Wizard 向工作空间装载变量点击工作空间浏览器上的图标 ,或 MATLAB Desktop 下拉菜单 {File: Import Data}; 在用户希望的目录上,选中 MAT 数据文件(如当前目录上的 mydata.mat) ;再双击那文件, 引出如图 1.7-4 所示的“Import Wizard”界面,它展示出文件所包含的变量列表;再从列表 中,通过“勾选” ,选择待装载变量(如图中的 t 和 y) ;再点击 [Finish] 按键,变量 t 和 y 就被装载到工作空间。图 1.7-4输入向导三 存 取数据的操作指令 save 和 load利用 save , load 指令实现数据文件存取是 MATLAB 各版都采用的基本操作方法。它的 具体使用格式如下。 save FileName save FileName save FileName save FileName 件 save FileName v1 v2 -ascii -double28v1 v1 v1v2 v2 -append v2 -ascii把全部内存变量保存为 FileName.mat 文件 把变量 v1, v2 保存为 FileName.mat 文件 把变量 v1, v2 添加到 FileName.mat 文件中 把变量 v1, v2 保存为 FileName 8 位 ASCII 文 把变量 v1, v2 保存为 FileName 16 位 ASCII 文件 load load 存 load 内存 〖说明〗 ? ? ? FileName 文件名可以带路径,也可以带扩展名。 v1 , v2 代表变量名;指定的变量个数不限,只要内存或文件中存在;变量名与变量名 之间必须以空格相分隔。 -ascii 选项使数据以 ASCII 格式处理。生成的(不带扩展名的)ASCII 文件可以在任何 “文字处理器”中被修改。如果数据较多的变量需要进行修改,那么 ASCII 格式的数 FileName FileName FileName v1 v1 v2 v2 -ascii 把 FileName.mat 文件中的全部变量装入内存 把 FileName.mat 文件中的 v1, v2 变量装入内 把 FileName ASCII 文件中的 v1, v2 变量装入据文件很适用。 ? 如果指令后没有-ascii 选项,那么数据以二进制格式处理。生成的数据文件一定带 mat 扩展名。 【例 1.7-3】数据的存取。 (假定内存中已经存在变量 X,Y,Z) (1)建立用户目录,并使之成为当前目录,保存数据mkdir('c:\','my_dir'); cd c:\my_dir save saf X Y Z dir . .. saf.mat %在 C 盘上创建目录 my_dir %使 c:\my_dir 成为当前目录 %选择内存中的 X,Y,Z 变量保存为 saf.mat 文件 %显示目录上的文件(2)清空内存,从 saf.mat 向内存装载变量 Zclear load saf Z who Your variables are: Z %清除内存中的全部变量 %把 saf.mat 文件中的 Z 变量装入内存 %检查内存中有什么变量〖说明〗 ? 如果一组数据是经过长时间的复杂计算后获得的,那么为避免再次重复计算,常使用 save 加以保存。此后,每当需要,都可通过 load 重新获取这组数据。这种处理模式常 在实际中被采用。1.8Editor/Debugger 和脚本编写初步对于比较简单的问题,对于那些一次性问题,通过指令窗中直接输入一组指令去求解, 也许是比较简便、快捷的。但当待解决问题所需的指令较多和所用指令结构较复杂时,或当 一组指令通过改变少量参数就可以被反复使用去解决不同问题时,直接在指令窗中输入指令 的方法就显得烦琐和笨拙。M 脚本文件就是设计来解决这个矛盾的。29 1.8.1Editor/Debugger M 文件编辑器简介图 1.8-1 M 文件编辑器示图默认情况下,M 文件编辑器(Editor/Debugger)不随 MATLAB 的启动而开启,而只有 当编写 M 文件时才启动。M 编辑器不仅可以编辑 M 文件,而且可以对 M 文件进行交互式 调试;M 文件编辑器不仅可处理带 .m 扩展名的文件,而且可以阅读和编辑其他 ASCII 码文 件。 M 文件编辑器的启动方法有以下几种: ? ? 点击 MATLAB 桌面上的 图标,或选中菜单项 {File:New:M-File} ,或直接在指令窗口输入指令 edit,都可以打开空白的 M 文件编辑器。 点击 MATLAB 桌面上的 图标,或选中菜单项 {File:Open} ,可引出“Open”文 件选择对话框,在填写所选文件名后,再点 [Open] 键,就可引出展示相应文件的 M 文件编辑器。在指令窗中,把待打开文件名(经一空格)写在 edit 后,指令运行后, 文件编辑器就打开那文件。 用鼠标左键双击当前目录窗中的所需 M 文件,可直接引出展示相应文件的 M 文件编辑 器。?1.8.2M 脚本文件编写初步所谓 M 脚本文件是指: (1)该文件中的指令形式和前后位置,与解决同一个问题时在 指令窗中输入的那组指令没有任何区别。 (2)MATLAB 在运行这个脚本时,只是简单地从 文件中读取那一条条指令,送到 MATLAB 中去执行。 (3)与在指令窗中直接运行指令一样, 脚本文件运行产生的变量都是驻留在 MATLAB 基本工作空间中。 (4)文件扩展名是“.m” 。 【例 1.8-1】编写解算例 1.3-10 题目的 M 脚本文件,并运行之。 操作步骤: (1) 在历史指令窗中,找到算例 1.3-10 的运行指令,并把它们选中点亮。 (2) 点击鼠标右键,选中弹出现场菜单中的 {Create M-file} ,便引出如图 1.8-1 的 M 文 件编辑器。 (3) 以 exm010801 为文件名进行保存,于是就得到了 exm010801.m 文件。 (4) 保证这个文件在 MATLAB 的当前目录或搜索路径上,在指令窗中运行 exm010801 就可以得到如图 1.3-4 的曲线。 〖说明〗 ? 当使用 M 文件编辑调试器保存文件时,或当在 MATLAB 指令窗中运行 M 文件时,不30 必写出文件的扩展名。 ? 在 M 文件编辑调试器中,可以采用汉字注释,并总可获得正确显示。1.9帮助系统及其使用读者接触、学习 MATLAB 的起因可能不同,借助 MATLAB 所想解决的问题也可能不同,从而会产生不同的求助需求。如对于初学者,最急于知道的是:MATLAB 的基本用法。 又如 MATLAB 老用户很想知道的是:MATLAB 新版本有什么新特点、新功能。再如对科研 工作者来说,面对不断变化的实际问题,常常产生两类困惑:知道具体指令,但不知道该怎 么用;或想解某个具体问题,不知道 MATLAB 有哪些指令可用。 MATLAB 作为一个优秀的科学计算软件,其帮助系统考虑了不同用户的不同需求,构 成了一个比较完备的帮助体系。并且,这种帮助体系随 MATLAB 版本的重大升级,其完备 性和友善性都会有较大的进步。 作者在此建议:不管以前是否使用过 MATLAB,任何用户都应尽快了解 MATLAB 的帮 助系统,掌握各种获取帮助信息的方法。只有这样,用户才可能较好地运用 MATLAB 资源, 快捷、可靠、有效地独立解决自己面临的各种问题。1.9.1子系统 名称 指令窗帮 助子系统 帮助 导航系统 典型算例 演示系统 视频 演示系统 PDF 文件 帮助系统 Web 网上 帮助系统六 大子系统构成的帮助体系表 1.9-1 特 点 MATLAB 的帮助体系 资 源文本形式;最可信、最原始; 所有 M 文件的帮助注释内容;包含在 M 文件之中 不适于系统阅读 HTML 形 式 ; 系 统 叙 述 位于 matla\help 目录下; MATLAB 规则,一般用法; HTML 和 XML 文件,物理上独立于 M 文件 适于系统阅读和交叉查阅 HTML 和 GUI 交互界面; 以 算 例 为 载体 分 类 介 绍 MATLAB 使用方法 形象;内容限于版本新特点 系统的标准打印文件;便于 长时间系统阅读 交互式讨论具体问题 下载网站 http://www.mathworks.com/access/helpdesk/help/ helpdesk.html 制造商网站 新闻组 http://www.mathworks.com comp.soft-sys.matlab 站 位于 matlab\toolbox 下各分类子目录的 demos 子目 录;专门编写 HTML 和演示 M 文件Flash 形式;视听兼备,直观 位于 matlab\demos 目录下;Flash 文件讨 论 www.mit.edu/~pwb/cssm/matlab-faq.html1.9.2常 用帮助指令31 一 函 数搜索指令在“知道具体函数指令名称,但不知道该函数如何使用”的场合,运用函数搜索指令能 很好地获得帮助信息。函数搜索指令的调用方法如下: help 列出所有函数分组名(Topic Name) help TopicName help FunName helpwin helpwin TopicName helpwin FunName doc ToolboxName doc FunName 〖说明〗 ? ? ? ? 在此,TopicName, FunName, ToolboxName 分别用来表示待搜索的分组函数名、函数文 件名、工具包名。 help 搜索的资源是 M 文件帮助注释区的内容。这部分资源用纯文本形式写成。它简扼 地叙述该函数的调用格式和输入输出量含义。该帮助内容最原始,但也最真切可靠。 helpwin 搜索的资源还是 M 文件帮助注释区的内容。但它的显示形式已不再是“比较简 陋的文本” ,而被自动转换成“比较方便的超文本” 。 doc 搜索是在 HTML 文件构成的帮助子系统中进行的。HTML 文件是根据 M 文件资源 编写的,内容比 M 文件帮助注释详细。该子系统,由于采用“超链接”机理,因此检 索、查阅比较方便。 ? 函数搜索指令的功能与帮助导航器中的“Index 搜索窗”相同。 列出指定名称函数组中的所有函数 给出指定名称函数的使用方法 列出所有函数分组名(Topic Name) 列出指定名称函数组中的所有函数 给出指定名称函数的使用方法 列出指定名称工具包中的所有函数名 给出指定名称函数的使用方法二词 条搜索指令在“想解某具体问题,但不知道有哪些函数指令可以使用”的场合,词条搜索指令也许 比较有用。 lookfor 索 KeyWord 对 M 文件 H1 行进行单词条检docsearch( ' KeyWord1 @ KeyWord2 @ KeyWordn' ) 对 HTML 子系统进行多词条检索 〖说明〗 ? 在此,KeyWord, KeyWord1, KeyWord2, KeyWord3 分别是待检索的词条。而 @ 表示逻 辑运算符。在实际使用中,该 @ 应写成 OR, AND, NOT 中的任意一个。待索词条、逻辑符之间用“空格”分隔。 ? lookfor 搜索的资源是 M 文件帮助注释区中的第一行(简称 H1 行) 。 ? ? docsearch 搜索是在 HTML 文件构成的帮助子系统中进行的。它的搜索功能强、效率高, 搜索到的内容也比较详细。 词条搜索指令的功能与帮助导航器中的“Search 搜索窗”相同。32 1.9.3Help Navigator/Browser 帮助导航浏览器帮助导航/浏览器搜索的资源是 Mathworks 专门写成的 HTML 帮助子系统。它的内容来 源于所有 M 文件,但更详细。它的界面友善、方便。这是用户寻求帮助的最主要资源。 引出帮助导航/浏览器的方法有以下几种: (1) 在指令窗中运行 helpbrowser 或 helpdesk。 (2) 在 MATLAB 的默认操作桌面,及各独立出现的交互窗口中 或点击工具条的 图标;或选中下拉菜单项 {Windows:Help}; 或选中下拉菜单项 {Help:MATLAB Help} 。一帮 助导航/浏览器简介图 1.9-1 帮助导航/浏览器整个帮助界面由分列 于左右半侧的帮助 导航器Help Navigator 和 帮助浏览器 HelpBrowser 部分组成。借助鼠标对这两部分的“中间分隔线”的左右调节,改变每部分所占版 面。帮助导航器有四个“导航窗” :内容分类目录 Contents,指令检索 Index,词条检索 Search, 演示实例 Demos。二Contents 目录 窗该窗口列出“节点可展开的目录树” 。用鼠标点击目录条,即可在 Help Browser 帮助浏 览器中显示出相应标题的 HTML 帮助文件。 该窗口是向用户提供全方位系统帮助的“向导图” 。该向导图的构造贯穿四个原则,即 “深浅层次”“功能划分”“帮助方式”和“英文字母次序” 、 、 。关于“深浅层次”原则的详 细说明,请见表 1.9-2。33 表 1.9-2 按深浅层次设置的条目 层次类型 概括 版本特点 入门和使用初步 详细指南 综合算例 功 用 条 目 举 例 Begin Here Release Notes Started 阅读建议 粗读 老用户必读 新用户必读 老用户浏览 全面、系统、按功能叙述 强调指令间配合和使用要领演示 Using MATLAB Examples 或系统读 或选读 选读 简介特点、内容、方法 专门介绍版本升级变化以简单操作、说明和算例引导用户 Getting三 Index 检索窗正如许多书籍后所附的“术语索引表”一样,MATLAB 也有一个事先制作的指令、函 数列表文件。该文件专供“Index”窗(图 1.9-2)使用。当用户在“Index”窗上方“待查栏 (Search index for) ”中填入某词汇时,其下白板上就列出与之最匹配的词汇列表。图 1.9-2 “Index”窗对 fourier 词汇的搜索结果片断四 Search 搜索 窗“Search”窗(图 1.9-3)是利用关键词查找全文中与之匹配章节条目的交互界面。这 是电子读物所特有的最大优点之一。它与 Index 搜索有两点主要区别: (1) 与 Index 搜索只在专用指令表中查找不同,Search 搜索是在整个 HTML 文件中进行 的,因此其覆盖面更宽。 (2) Index 搜索只能进行单指令名搜索,而 Search 搜索采用多词条的逻辑组合搜索,功 能更强,搜索效率更高。34 图 1.9-3Search 窗逻辑组合搜索示图1.9.4DEMO 演示系统与以前版本相比,MATLAB R2006.a 版的 DEMO 显得更为系统和完善。它以算例为载 体,由 HTML、GUI 界面、显示 M 文件的编辑器组合而成。该演示系统,分布在 matlab\toolbox 的各个分类子目录中。该系统综合演示:为解决一个具体算例,各指令间如何配合使用。无 论是对 MATLAB 新用户来说还是对老用户来说,都是十分有益的。该演示程序的示范作用 是独特的,是包括 MATLAB 用户指南在内的有关书籍所不能代替的。用户若想学习和掌握 MATLAB,不可不看这组演示程序。但对初学者来说,不必急于求成去读那些太复杂的程 序。 在指令窗中运行 demos 指令,或点击帮助导航器中的“Demos”窗,就可引出如图 1.9-4 的 DEMO 演示系统。该界面左侧采用标准的 Windows 目录树结构清晰地展示各分类内容的 多层次演示结构。界面右侧是 HTML 写成的一组“蓝色”超链接。用鼠标点击超链接就可 引出如图 1.9-5 的 HTML 演示浏览界面。35 图 1.9-4帮助导航其中的 Demos 窗图 1.9-5算例演示的 HTML 浏览器36 图 1.9-6演示算例的 M 文件图 1.9-5 算例演示浏览器的用法: (1) 直接阅读浏览器显示的内容。这种形式比较接近读者的阅读习惯,看起来比较舒畅。 (2) 点击图 1.9-5 左上方的“Open intro.m in the Editor”超链接,引出如图 1.9-6 所示的 采用 M 文件编辑器显示的演示 M 文件。读者从编辑器中看到的是:直接面向 MATLAB 的 M 文件。它有助于读者习惯和理解 M 文件的编写。这些文件都可以在 MATLAB 中直接运行。 (3) 点击图 1.9-5 右上方的“Run in the Command Window”超链接,就会出现如引出图 1.9-7 所示的 Command Window 界面。通过操作该界面左侧的“Next”超链接,一 步一步地观察指令、运算结果和可视化图形之间的关系。37 图 1.9-7演示算例的 GUI 交互界面1.9.5VIDEO 视频演 示帮助系统在 MATLAB 的 Demos 里还提供一种新的视频帮助资料,专门介绍新特点。它形象、生 动、直观,便于用户了解和掌握新版的功能。 进入 VIDEO 演示系统最方便的途径是:选择帮助导航器 Demos 窗中的“New Features in Version 7” ,直接导出 VIDEO 视频演示“点播台” 。 根据需要,点中“点播台”上所需栏目,就导出如图 1.9-9 的视频播放器。通过眼看鼠 标操作和界面图像变化,耳听相配的英语解释,用户很容易学会各种操作之间的关系和 MATLAB 各种新功能的使用。图 1.9-8 VIDEO 视频演示点播台38 图 1.9-9 视频播放器习题 11. 2. 3. 4. 5. 在安装 MATLAB 软件时,哪个组件是必须选择的?假如不“勾选”这个组件,那么就 不可能建立 MATLAB 工作环境。 数字 1.5e2,1.5e3 中的哪个与 1500 相同? 请指出如下 5 个变量名中,哪些是合法的? abcd-2 xyz_3 3chan a 变量 ABCDefgh 在 MATLAB 环境中,比 1 大的最小数是多少? 设 a = -8 , 运行以下三条指令,问运行结果相同吗?为什么? w1=a^(2/3)39 w2=(a^2)^(1/3) 6. 7. w3=(a^(1/3))^2 指令 clear, clf, clc 各有什么用处? 以下两种说法对吗?(1) “MATLAB 的数值表达精度与其指令窗中的数据显示精度相 同。 ” (2)MATLAB 指令窗中显示的数值有效位数不超过 7 位。 ”8.?????????? ?7 8 9?S=[1,2,3;4,5,6;7,8;9] S=[1 2 3;4 5 6;7 8 9] S=[1,2,3;4,5,6;7,8,9] %整个指令在中文状态下输入 试为例 1.3-5 编写一个解题用的 M 脚本文件?9.第?1?章? 符号计算1 2 3 ?????????? 6 ,下面哪些指令能实现目的? 想要在 MATLAB 中产生二维数组 S ???4 5所谓符号计算是指:解算数学表达式、方程不是在离散化的数值点上进行,而是凭借一 系列恒等式,数学定理,通过推理和演绎,力求获得解析结果。这种计算建立在数值完全准 确表达和推演严格解析的基础之上,因此所得结果是完全准确的。 本书之所以把符号计算内容放在第 2 章,是出于以下考虑:一,相对于 MATLAB 的数 值计算“引擎”和“函数库”而言,符号计算的“引擎”和“函数库”是独立的。二,在相 当一些场合,符号计算解算问题的指令和过程,显得比数值计算更自然、更简明。三,大多 数理工科的本科学生在学过高等数学和其他专业基础课以后,比较习惯符号计算的解题理念 和模式。 在编写本章时,作者在充分考虑符号计算独立性的同时,还考虑了章节的自完整性。为 此,本章不但全面地阐述符号计算,而且在最后一节还详细叙述了符号计算结果的可视化。 这样的安排,将使读者在阅读完本章后,就有可能运用 MATLAB 的符号计算能力去解决相 当一些具体问题。1.11.1.1符号对象和符号表达式符 号对象的创建和衍生一 生 成符号对象的基本规则 二 符 号数字40 【例 2.1-1】符号(类)数字与数值(类)数字之间的差异。a=pi+sqrt(5) sa=sym('pi+sqrt(5)') Ca=class(a) Csa=class(sa) vpa(sa-a) a = 5.3777 sa = pi+sqrt(5) Ca = double Csa = sym ans = .852e-16三 符 号参数 四 符 号变量【例 2.1-2】用符号计算研究方程 uz 2 ? vz ??w ? 0 的解。? ?(1)syms u v w z Eq=u*z^2+v*z+w; result_1=solve(Eq) % findsym(Eq,1) result_1 = -u*z^2-v*z ans = w(2)result_2=solve(Eq,z) result_2 = 1/2/u*(-v+(v^2-4*u*w)^(1/2)) 1/2/u*(-v-(v^2-4*u*w)^(1/2))【例 2.1-3】对独立自由符号变量的自动辨认。41 (1)syms a b x X Y k=sym('3'); z=sym('c*sqrt(delta)+y*sin(theta)'); EXPR=a*z*X+(b*x^2+k)*Y;(2)findsym(EXPR) ans = X, Y, a, b, c, delta, theta, x, y(3)findsym(EXPR,1) ans = x(4)findsym(EXPR,2),findsym(EXPR,3) ans = x,y ans = x,y,theta【例 2.1-4】findsym 确定自由变量是对整个矩阵进行的。syms a b t u v x y A=[a+b*x,sin(t)+u;x*exp(-t),log(y)+v] findsym(A,1) A = [ a+b*x, sin(t)+u] [ x*exp(-t), log(y)+v] ans = x1.1.2 1.1.3 1.1.4符 号计算中的算符 符 号计算中的函数指令 符 号对象的识别【例 2.1-5】数据对象及其识别指令的使用。 (1)42 clear a=1;b=2;c=3;d=4; Mn=[a,b;c,d] Mc='[a,b;c,d]' Ms=sym(Mc) Mn = 1 3 Mc = [a,b;c,d] Ms = [ a, b] [ c, d] 2 4(2)SizeMn=size(Mn) SizeMc=size(Mc) SizeMs=size(Ms) SizeMn = 2 SizeMc = 1 SizeMs = 2 2 9 2(3)CMn=class(Mn) CMc=class(Mc) CMs=class(Ms) CMn = double CMc = char CMs = sym(4)isa(Mn,'double') isa(Mc,'char') isa(Ms,'sym') ans = 1 ans = 143 ans = 1(5)whos Mn Mc Ms Name Mc Mn Ms Size 1x9 2x2 2x2 Bytes Class 18 char array 32 double array 312 sym objectGrand total is 21 elements using 362 bytes1.2符号数字及表达式的操作1.2.1数 值数字与符号数字之间的转换一 数 值数字向符号数字的转换 二 符 号数字向双精度数字转换 1.2.2digits p0=sym('(1+sqrt(5))/2') pr=sym((1+sqrt(5))/2) % pd=sym((1+sqrt(5))/2,'d') % e32r=vpa(abs(p0-pr) e32d=vpa(abs(p0-pd)) Digits = 32 p0 = (1+sqrt(5))/2 pr = 6824*2^(-52) pd = ) e16=vpa(abs(p0-pd),16)符 号数字的任意精度计算【例 2.2-1】digits, vpa 指令的使用。44 1.r = .251e-16 e16 = 0. e32d = .251e-161.2.3符 号表达式的基本操作3【例 2.2-2】简化 f ?syms x g1=simple(f) g2=simple(g1) g1 = (2*x+1)/x g2 = 2+1/x1 6 12 ? ? ?8 。 x x x?3 2f=(1/x^3+6/x^2+12/x+8)^(1/3);1.2.4表 达式中的置换操作一 子 表达式置换操作【例 2.2-3】对符号矩阵clear all syms a b c d Wa ?cb d? ? ?进行特征向量分解。[V,D]=eig([c d]) ? V = [ [ 1] D = [? [RVD,W]=subexpr([V;D],W)-(1/2*d-1/2*a-1/2*(d^2-2*a*d+a^2+4*b*c)^(1/2))/c, 1,-(1/2*d-1/2*a+1/2*(d^2-2*a*d+a^2+4*b*c)^(1/2))/c]1/2*d+1/2*a+1/2*(d^2-2*a*d+a^2+4*b*c)^(1/2),45 0] [ 1/2*d+1/2*a-1/2*(d^2-2*a*d+a^2+4*b*c)^(1/2)] RVD = [ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c] [ [ [ W = (d^2-2*a*d+a^2+4*b*c)^(1/2) 1, 1/2*d+1/2*a+1/2*W, 0, 1] 0] 1/2*d+1/2*a-1/2*W] 0,二 通 用置换指令【例 2.2-4】用简单算例演示 subs 的置换规则。 (1)f=a*sin(x)+5 f = a*sin(x)+5(2)f1=subs(f,'sin(x)',sym('y')) %&2& class(f1) f1 = a*y+5 ans = sym(3)f2=subs(f,{a,x},{2,sym('pi/3')}) %&3& class(f2) f2 = 3^(1/2)+5 ans = sym(4)f3=subs(f,{a,x},{2,pi/3}) %&4&46 class(f3) f3 = 6.7321 ans = double(5)f4=subs(subs(f,a,2),x,0:pi/6:pi) %&5& class(f4) f4 = 5.0000 ans = double 6.1 7.1 6.0(6)f5=subs(f,{a,x},{0:6,0:pi/6:pi}) %&6& class(f5) f5 = 5.0000 ans = double 5.1 8.1 7.01.31.3.1符号微积分极 限和导数的符号计算kx? 【例 2.3-1】试求 lim 1 ? 1x???x? ? ?。syms x k Lim_f = exp(-k)Lim_f=limit((1-1/x)^(k*x),x,inf)【例 2.3-2】求 f ? ?a? t cos x ?df d2f d2f , , 。 ?求 ? 2 dt dtdx ln x ? dxt3f=[a,t^3;t*cos(x), log(x)];47 df=diff(f) dfdt2=diff(f,t,2) dfdxdt=diff(diff(f,x),t) df = [ dfdt2 = [ [ [ 0, 6*t] 0, 0] 0, 0] 0] 0, 0] 1/x] [ -t*sin(x),dfdxdt = [ -sin(x),?f1【例 2.3-3】求 f(x1 , x2 ) ?? ? ? 2 ? ? ? ? cos(x1) sin(x2 ? ? )?x1 e xx2的 Jacobian 矩阵?syms x1 x2;f=[x1*exp(x2);x2;cos(x1)*sin(x2)]; v=[x1 x2];fjac=jacobian(f,v) fjac = [ [ exp(x2), 0, x1*exp(x2)] 1]? ?f 1 ? ?x ? ? ? ? ? ? ?f 3 ?x 3 ? ? ? f ? ?f ? ? ? ?x1 ? 2 ? x?f2 。 ?x2 ?[ -sin(x1)*sin(x2), cos(x1)*cos(x2)]【例 2.3-4】 f ( x) ? sin x ,求 fx?(0) , f x? (x) 。??(1)clear syms x syms d positive f_p=sin(x); df_p=limit((subs(f_p,x,x+d)-f_p)/d,d,0) df_p = cos(x) df_p0 = 1 % % &4& &5&df_p0=limit((subs(f_p,x,d)-subs(f_p,x,0))/d,d,0) %(2)f_n=sin(-x); df_n=limit((f_n-subs(f_n,x,x-d))/d,d,0) % &7&48 df_n0=limit((subs(f_n,x,0)-subs(f_n,x,-d))/d,d,0) df_n = -cos(x) df_n0 = -1%&8&(3)f=sin(abs(x)); dfdx=diff(f,x) &10& dfdx = cos(abs(x))*abs(1,x) %(4)xn=-3/2*pi:pi/50:0;xp=0:pi/50:3/2*xnp=[xn,xp(2:end)]; hold on plot(xnp,subs(f,x,xnp),'k','LineWidth',2.5) plot(xn,subs(df_n,x,xn),'--r','LineWidth',2.5) plot(xp,subs(df_p,x,xp),':r','LineWidth',2.5) legend(char(f),char(df_n),char(df_p),'Location','NorthEast')% grid on xlabel('x') hold off &16& % &13&图 2.3-1 函数及其导函数【例 2.3-5】设 cos(x ? sin y) ??sin y ,求?dy 。 dx(1)clear49 syms x g=sym('cos(x+sin(y(x)))=sin(y(x))') dgdx=diff(g,x) g = cos(x+sin(y(x)))=sin(y(x)) dgdx = -sin(x+sin(y(x)))*(1+cos(y(x))*diff(y(x),x)) = cos(y(x))*diff(y(x),x) % % &3& &4&(2)disp(maple('isolate',dgdx,diff('y(x)',x))) &5& diff(y(x),x) sin(x+sin(y(x)))/(-sin(x+sin(y(x)))*cos(y(x))-cos(y(x))) = %【例 2.3-6】求 f (x) ??xesyms xx在 x ? 0 处展开的 8 阶 Maclaurin 级数。?r=taylor(x*exp(x),9,x,0) r =%忽略 9 阶及 9 阶以上小量的展开x+x^2+1/2*x^3+1/6*x^4+1/24*x^5+1/120*x^6+1/720*x^7+1/5040*x^8【例 2.3-7】求 sin(x 2 ??y) 在 x ??0, y ??0 处的截断 8 阶小量的 Taylor 展开近似。TL1=maple('mtaylor(sin(x^2+y),[x=0,y=0],8)') class(TL1) TL1 = y+x^2-1/6*y^3-1/2*x^2*y^2+1/120*y^5-1/2*x^4*y+1/24*x^2*y^4-1/6*x^6-1/ 5040*y^7+1/12*x^4*y^3 ans = char1.3.2【例 2.3-8】求序 列/级 数的符号求和?[ t,k 3 ] , ?tt? 0 ?1??k?1 ?1 (?1 k ? ,) 。 2 ? (2k ? 1) ? k ??f1=[t k^3];f2=[1/(2*k-1)^2,(-1)^k/k]; ? s1=simple(symsum(f1)) s2=simple(symsum(f2,1,inf)) s1 = [ 1/2*t*(t-1), s2 =50k^3*t] [ 1/8*pi^2, -log(2)]1.3.3【例 2.3-9】求clear syms x符 号积分?x1 1 ?? x dx 。 xf=sqrt((1+x)/x)/x s=int(f,x) s=simple(simple(s)) f = ((1+x)/x)^(1/2)/x s = ((1+x)/x)^(1/2)/x*(-2*(x^2+x)^(3/2)+2*(x^2+x)^(1/2)*x^2+log(1/2+x+(x^ 2+x)^(1/2))*x^2)/((1+x)*x)^(1/2) s = log(1/2+x+((1+x)*x)^(1/2))-2*((1+x)*x)^(1/2)/x? ax【例 2.3-10】求sin x ??x ? ?1 ? ? dx 。f=[a*x,b*x^2;1/x,sin(x)]; ? ?? ???b x2?disp('The integral of f is');pretty(int(f)) The integral of f is [ [ [ log(x) 2 3] 1/3 b x ] ] -cos(x) ][1/2 a x【例 2.3-11】求积分syms x y z? ? ?2 x2 x 1x2y xy(x 2 ??y 2 ??z 2 )dzdydx 。F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2) VF2=vpa(F2) F2 = -075*2^(1/2)+64/225*2^(3/4)+*2^(1/4)+/ 6563700 VF2 = 224.3280551 【例 2.3-12】求阿基米德(Archimedes)螺线 r ? a ? ? ,???( a ??0) 在????0 到 ? 间的曲线长?度函数,并求出 a ? 1,??? 2??时的曲线长度。? ?(1)syms a r theta phi positive x=r*cos(theta);x=subs(x,r,a*theta); y=r*sin(theta);y=subs(y,r,a*theta); dLdth=sqrt(diff(x,theta)^2+diff(y,theta)^2); L=simple(int(dLdth,theta,0,phi)) L = 1/2*a*(phi*(1+phi^2)^(1/2)+asinh(phi))(2)L_2pi=subs(L,[a,phi],sym('[1,2*pi]')) L_2pi_vpa=vpa(L_2pi) L_2pi = pi*(1+4*pi^2)^(1/2)+1/2*asinh(2*pi) L_2pi_vpa = 21.272566(3)L1=subs(L,a,sym('1')); ezplot(L1*cos(phi),L1*sin(phi),[0,2*pi]) grid on hold on x1=subs(x,a,sym('1')); y1=subs(y,a,sym('1')); h1=ezplot(x1,y1,[0,2*pi]); set(h1,'Color','r','LineWidth',5) title(' ') legend('螺线长度-幅角曲线','阿基米德螺线') hold off52 图 2.3-2 阿基米德螺线(粗红)和螺线长度函数(细蓝)1.41.4.1 1.4.2 1.4.3微分方程的符号解法符 号解法和数值解法的互补作用 求 微分方程符号解的一般指令 微 分方程符号解示例【例 2.4-1】求dt dx ??y,dt dy ??? x 的解。?S=dsolve('Dx=y,Dy=-x') disp([blanks(12),'x',blanks(21),'y']),disp([S.x,S.y]) S = x: [1x1 sym] y: [1x1 sym] x y [ -C1*cos(t)+C2*sin(t), C1*sin(t)+C2*cos(t)]【例 2.4-2】图示微分方程 y ??xy ? ? (y )? 2 的通解和奇解的关系。?y=dsolve('(Dy)^2-x*Dy+y=0','x')53%&1& clf,hold on, ezplot(y(1),[-6,6,-4,8],1) cc=get(gca,'Children'); set(cc,'Color','r','LineWidth',5) % % %for k=-2:0.5:2;ezplot(subs(y(2),'C1',k),[-6,6,-4,8],1);end, % hold off,title('\fontname{隶书}\fontsize{16}通解和奇解') y = 1/4*x^2 -C1^2+x*C1图 2.4-1通解和奇解曲线【例 2.4-3】求解两点边值问题: xy?? ? 3y????x? ?2, y(1) ??0, y(5) ? 0 。?(1)y=dsolve('x*D2y-3*Dy=x^2','y(1)=0,y(5)=0','x') y = 31/468*x^4-1/3*x^3+125/468(2)ezplot(y,[-1,6]) hold on plot([1,5],[0,0],'.r','MarkerSize',20) text(1,1,'y(1)=0') text(4,1,'y(5)=0') title(['x*D2y-3*Dy=x^2',', hold off y(1)=0,y(5)=0'])54 图 2.4-2两点边值问题的解曲线1.51.5.1符号变换和符号卷积Fourier 变换及 其反变换1 ?0 t ?0 的 Fourier 变换。 t ?0? ?【例 2.5-1】求 f (t) ? (1)syms t w ut=heaviside(t); UT=fourier(ut) UT = pi*dirac(w)-i/w? ?(2)Ut=ifourier(UT,w,t) Ut = heaviside(t)【例 2.5-2】根据 Fourier 变换定义,用积分指令求方波脉冲 y ? Fourier 变换。 (1)55A ?0? ??/ 2 ??t ? ??/ 2??else的? ? syms A t w syms tao positive yt=heaviside(t+tao/2)-heaviside(t-tao/2); Yw=fourier(A*yt,t,w) Yw = 2*A/w*sin(1/2*tao*w)(2)Yt=ifourier(Yw,w,t) Yt = A*(heaviside(t+1/2*tao)-heaviside(t-1/2*tao))(3)yt3=subs(yt,tao,3) Yw3=subs(Yw,[A,tao],[1,3]) subplot(2,1,1) Ht=ezplot(yt3,[-3,3]); set(Ht,'Color','r','LineWidth',3) subplot(2,1,2),ezplot(Yw3) yt3 = heaviside(t+3/2)-heaviside(t-3/2) Yw3 = 2/w*sin(3/2*w) hea vis ide (t+3/2 )-heaviside (t-3/2 ) 1 0. 5 0 -3 -2 -1 0 t 2 /w s in(3/2 w) 1 2 33 2 1 0 -1 -6 -4 -2 0 w 2 4 6图 2.5-1 时域方波及其 Fourier 变换【例 2.5-3】求 f (t) ?? (t ?x)?? 0 ?e ?t ?? x 的 Fourier 变换,在此 x 是参数, t 是时间变量。 t ?? x56
ft=exp(-(t-x))*heaviside(t-x); F1=simple(fourier(ft,t,w)) F2=simple(fourier(ft)) F3=simple(fourier(ft,t)) F1 = 1/(1+i*w)/exp(i*x*w) F2 = i*exp(-i*t*w)/(i+w) F3 = -exp(-t*(2+i*t))/(-1+i*t)1.5.2【例 2.5-4】求 syms a bLaplace 变换及其反变换? (t ? a) ?e sin bt? ?? Dt=dirac(t-a);positive ? ?atu(t ? b) 的 Laplace 变换。 te ? ? 2 ?t ??%&2&Ut=heaviside(t-b); Mt=[Dt,Ut;exp(-a*t)*sin(b*t),t^2*exp(-t)];MS=laplace(Mt,t,s) MS = [ exp(-s*a), exp(-s*b)/s] 2/(s+1)^3] [ 1/b/((s+a)^2/b^2+1),【例 2.5-5】验证 Laplace 时移性质: L{ f (t ? t?0)U (t ? t 0 )} ??e??s t?0L{ f (t)}t 0 ?? 0 。syms t s syms t0 positive ft=sym('f(t-t0)')*heaviside(t-t0) FS=laplace(ft,t,s) FS_t=ilaplace(FS,s,t) ft = f(t-t0)*heaviside(t-t0) FS = exp(-s*t0)*laplace(f(t),t,s) FS_t = f(t-t0)*heaviside(t-t0)1.5.3Z 变换及其反变换57 【例 2.5-6】求序列 f ( n) ? ? (1)syms n?0 2n?6(1 ? 0.5)n ?? 0 n ??0 的 Z 变换,并用反变换验算。 n ?? 0? Delta=sym('charfcn[0](n)');D0=subs(Delta,n,0); ? D15=subs(Delta,n,15); ? [D0,D15] [ 1, 0]% % %&2&disp('[D0,D15]');disp([D0,D15])(2)syms z fn=2*Delta+6*(1-(1/2)^n) FZ=simple(ztrans(fn,n,z)); disp('FZ = ') pretty(FZ) FZ_n=iztrans(FZ,z,n) fn = 2*charfcn[0](n)+6-6*(1/2)^n FZ = 2 4 z + 2 -------------2 2 z - 3 z + 1 FZ_n = 2*charfcn[0](n)+6-6*(1/2)^n1.5.4符 号卷积? t?【例 2.5-7】已知系统冲激响应??求 u( t) ??esyms T t tao ut=exp(-t); ht=exp(-t/T)/T;U (t) 输入下的输出响应。uh_tao=subs(ut,t,tao)*subs(ht,t,t-tao); yt=simple(simple(int(uh_tao,tao,0,t))) yt = -(exp(-t)-exp(-t/T))/(T-1)58 【例 2.5-8】采用 Laplace 变换和反变换求上例的输出响应。syms s yt=ilaplace(laplace(ut,t,s)*laplace(ht,t,s),s,t); yt=simple(yt) yt = (-exp(-t)+exp(-t/T))/(T-1)【例 2.5-9】求函数 u(t) ? U (t ) ? U (t ? 1) 和??卷积。? ??syms tao t=sym('t','positive'); ut=heaviside(t)-heaviside(t-1); ht=t*exp(-t); yt=int(subs(ut,t,tao)*subs(ht,t,t-tao),tao,0,t) yt=collect(yt,'heaviside(t-1)') yt = 1+t*heaviside(t-1)*exp(1-t)-heaviside(t-1)+(-t-1)/exp(t) yt = (exp(1-t)*t-1)*heaviside(t-1)+1+(-t-1)/exp(t)1.61.6.1符号矩阵分析和代数方程解符 号矩阵分析?【例 2.6-1】求矩阵?A 行列式、逆和特征根。?syms a11 a12 a21 a22 A=[a11,a12;a21,a22] DA=det(A) IA=inv(A) EA=eig(A) A = [ a11, a12] [ a21, a22] DA = a11*a22-a12*a21 IA = [ a22/(a11*a22-a12*a21), -a12/(a11*a22-a12*a21)]59 [ -a21/(a11*a22-a12*a21), a11/(a11*a22-a12*a21)] EA = 1/2*a11+1/2*a22+1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2) 1/2*a11+1/2*a22-1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)【例 2.6-2】著名的 Givens 旋转(变换)G ?sin t cos t ? ?? sin t 32 ? 对矩阵 A ? ? cos t ? 12 ? ? ??12?的 ? 3 2?旋转作用。 (1)syms t A=sym([sqrt(3)/2,1/2;1/2,sqrt(3)/2]) G=[cos(t),-sin(t);sin(t),cos(t)]; GA=G*A A = [ sqrt(3/4), [ GA = [ 1/2*cos(t)*3^(1/2)-1/2*sin(t), 1/2*cos(t)-1/2*sin(t)*3^(1/2)] [ 1/2*sin(t)*3^(1/2)+1/2*cos(t), 1/2*sin(t)+1/2*cos(t)*3^(1/2)] 1/2] 1/2, sqrt(3/4)](2)An=subs(GA,t,110/180*pi); Op=[0;0]; Ad=double(A); v1=[Op,Ad(:,1)]';v2=[Op,Ad(:,2)]'; u1=[Op,An(:,1)]';u2=[Op,An(:,2)]'; plot(v1(:,1),v1(:,2),'--k',v2(:,1),v2(:,2),'b') axis([-1,1,-1,1]),axis square hold on hu=plot(u1(:,1),u1(:,2),'--k',u2(:,1),u2(:,2),'b'); set(hu,'LineWidth',4) title('Givens Rotation') legend(' v1',' v2',' u1',' u2','Location','South') hold off grid on60 Givens Rotation 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -1 -0.5 0 v1 v2 u1 u2 0.5 1图 2.6-1 Givens 旋转的几何意义【例 2.6-3】求 d ? ? 程组的解。 (1)n 2p 24p, q ??p ? n ? 8d ? 1 线性方? ? ?A=sym([1 1/2 1/2 -1;1 1 -1 1;1 -1/4 -1 1;-8 n 1 1]); -1 ??q, n ? d ? q ??p ??10, q ? d ????? b=sym([0;10;0;1])? ? ?X1=A\b b = 0 10 0 1 X1 = 1 8 8 9(2)S=solve('d+n/2+p/2-q','d+n-p+q-10','d-n/4-p+q','-8*d-n+p+q-1'); disp([' d n p d',' n',' p',' q']) q disp([S.d,S.n,S.p,S.q]) [ 1, 8, 8, 9]61 1.6.2 1.6.3线 性方程组的符号解 一 般代数方程组的解? ? ?【例 2.6-4】求方程组 uy^2 ? vz ??w ??0 , y ? z ? w ??0 关于 y, z 的解。S=solve('u*y^2+v*z+w=0','y+z+w=0','y','z') disp('S.y'),disp(S.y),disp('S.z'),disp(S.z) S = y: [2x1 sym] z: [2x1 sym] S.y -1/2/u*(-2*u*w-v+(4*u*w*v+v^2-4*u*w)^(1/2))-w -1/2/u*(-2*u*w-v-(4*u*w*v+v^2-4*u*w)^(1/2))-w S.z 1/2/u*(-2*u*w-v+(4*u*w*v+v^2-4*u*w)^(1/2)) 1/2/u*(-2*u*w-v-(4*u*w*v+v^2-4*u*w)^(1/2))【例 2.6-5】solve 指令求 d ? 定”方程组解。syms d n p qn p ? ??q , n ? d ? q ??p ? 10 , q ? d ? 2 2? ? ? ?n ??p 构成的“欠 4eq1=d+n/2+p/2-q;eq2=n+d+q-p-10;eq3=q+d-n/4-p; S=solve(eq1,eq2,eq3,d,n,p,q); disp([' S.d',' S.n',' S.p',' S.q']) disp([S.d,S.n,S.p,S.q]) Warning: 3 equations in 4 variables. & In solve at 113 In sym.solve at 49 S.d [ d, S.n S.p S.q 8, 4*d+4, 3*d+6]【例 2.6-6】求 (x ??2)x??2 的解。clear all, s=solve('(x+2)^x=2','x') s = .1.7利用 MAPLE 的深层符号计算资源62 1.7.1【例 2.7-1】求 无穷。 (1)syms t x经 典特殊函数的调用?x 01 dt , x ? (0, 1) 。注意:被积函数在 t ??0 无定义,在 t ? 1 处为负 ln t? ??ft=1/log(t); sx=int(ft,t,0,x) sx = -Ei(1,-log(x))(2)x=0.5:0.1:0.9 sx_n=-mfun('Ei',1,-log(x)) x = 0.5000 sx_n = -0.9 -0.0 -1.0 0.0 0.90001.7.2(1)mhelp indexMAPLE 库函数在线帮助的检索 树Index of help descriptions Calling Sequence ?index[category] or help(index, category)Description - The following categories of topics are available in the help subsystem: expression operators for forming expressions function misc module packages procedure statement list of Maple functions miscellaneous facilities topics related to modules descriptions of library packages topics related to procedures and programming list of Maple statements63 To access these help pages, you must prefix the category with index, thus ? index[category].(2)mhelp index[function] Index of descriptions for standard library functions Description - The following are the names of Maple's standard library functions. For more information, see ?f where f is any of these functions. about additionally AFactors AiryBi alias AngerJ applyop arccot arcsec arctan array ArrayOptions asspar ... writeto ztrans See Also libname, index[package] abs addproperty AIrreduc AiryBiZeros allvalues antihermitian applyrule arccoth arcsech arctanh ArrayDims assemble assume add addressof AiryAi algebraic anames antisymm arccos arccsc arcsin argument ArrayElems assign assuming addcoords AFactor AiryAiZeros algsubs andmap apply arccosh arccsch arcsinh Array ArrayIndFns assigned asympt(注:省略号是作者所加,以省篇幅。 ) zero _ Zeta zip(3)1.7.3发 挥 MAPLE 的计算潜力?【例 2.7-2】求递推方程 f ( n) ???3 f ( n ? 1) ? 2 f (n ? 2) 的通解。? ?(1)gs1=maple('rsolve(f(n)=-3*f(n-1)-2*f(n-2),f(k));') gs1 =64%&1& (-f(0)-f(1))*(-2)^k+(2*f(0)+f(1))*(-1)^k(2)gs2=maple('rsolve','f(n)=-3*f(n-1)-2*f(n-2)','f(k)') gs2 = (-f(0)-f(1))*(-2)^k+(2*f(0)+f(1))*(-1)^k %&2&【例 2.7-3】求 f ??xyz 的 Hessian 矩阵。 (1)FH1=maple('hessian(x*y*z,[x,y,z]);') FH1 = matrix([[0, z, y], [z, 0, x], [y, x, 0]])(2)FH2=maple('hessian','x*y*z','[x,y,z]') FH2 = matrix([[0, z, y], [z, 0, x], [y, x, 0]])(3)FH=sym(FH2) FH = [ 0, z, y] [ z, 0, x] [ y, x, 0]1.81.8.1符号计算结果的可视化直 接可视化符号表达式一 单 独立变量符号函数的可视化【例 2.8-1】绘制 y ? 2.8-1) 。syms t tao y=2/3*exp(-t/2)*cos(sqrt(3)/2*t); s=subs(int(y,t,0,tao),tao,t); subplot(2,1,1)2 ? t2 3 t 和它的积分 s(t ) ? e cos 3 2?t 0y (t )dt 在 [0, 4? ] 间的图形(图?65 % ezplot(y,[0,4*pi]),ylim([-0.2,0.7]) grid on subplot(2,1,2) ezplot(s,[0,4*pi]) grid on title('s = \inty(t)dt')2/3 exp(-1/2 t) cos (1/2 3 t) 0.6 0.4 0.2 0 -0.2 0246 t s = ?y(t)dt810120.5 0.4 0.3 0.2 0 2 4 6 t 81/21012图 2.8-1 ezplot 使用示例二 双 独立变量符号函数的可视化【 例 2.8-2 】 借 助 可 视 化 手 段 , 加 深 Taylor 展 开 的 邻 域 近 似 概 念 。 图 形 研 究 函 数f (x, y) ? sin(x?2??y) 在 x ??0, y ??0 处的截断 8 阶小量的 Taylor 展开(例 2.3-7 讨论过) 。(1)TL1=maple('mtaylor(sin(x^2+y),[x=0,y=0],8)') TL1 = y+x^2-1/6*y^3-1/2*x^2*y^2+1/120*y^5-1/2*x^4*y+1/24*x^2*y^4-1/6*x^6-1/ 5040*y^7+1/12*x^4*y^3(2)Fxy='sin(x^2+y)' Fxy_TL1=[Fxy, '-(',TL1,')'] Fxy = sin(x^2+y) Fxy_TL1 = sin(x^2+y)-(y+x^2-1/6*y^3-1/2*x^2*y^2+1/120*y^5-1/2*x^4*y+1/24*x^2*y^ 4-1/6*x^6-1/5040*y^7+1/12*x^4*y^3)66 (3)clf ezsurf(Fxy,[-4,4,-6,6]) shading interp view([-30,50])图 2.8-2原函数在较大范围内的图形(4)clf ezsurf(TL1,[-4,4,-6,6]) shading interp view([-30,50])图 2.8-3Taylor 展开在较大范围内的图形67 (5)clf ezsurf(Fxy,[-0.5,0.5,-0.5,0.5],'circ') shading interp view([-75,15])图 2.8-4 原函数在小范围内的图形(6)clf ezsurf(TL1,[-0.5,0.5,-0.5,0.5],'circ') shading interp view([-75,15])图 2.8-5 Taylor 展开在小范围内的图形68 (7)clf ezsurf(Fxy_TL1,[-0.5,0.5],'circ') shading interp view([-50,10])图 2.8-6 小范围内的误差曲面【例 2.8-3】使用球坐标参量画部分球壳(图 2.8-7 ) 。x='cos(s)*cos(t)'; y='cos(s)*sin(t)'; z='sin(s)'; ezsurf(x,y,z,[0,pi/2,0,3*pi/2]) view(17,40) shading interp colormap(spring) light('position',[0,0,-10],'style','local') light('position',[-1,-0.5,2],'style','local') material([0.5,0.5,0.5,10,0.3])69 图 2.8-7ezsurf 在参变量格式下绘制的图形1.8.2符 号计算结果的数值化绘图x 1 1 和? 。 dt (在例 2.7-1 中已计算过积分) 0 ln t ln t【例 2.8-4】在 (0, 1) 区间,图示 (1)syms t x ft=1/log(t); sx=int(ft,t,0,x) sx = -Ei(1,-log(x))(2)x=0.1:0.05:0.9; sx_n=-mfun('Ei',1,-log(x));(3)图示被积函数和积分函数clf ezplot('1/log(t)',[0.1,0.9]) grid on hold on plot(x,sx_n,'LineWidth',3) Char1='1/ln(t)'; Char2='{\int_0^x} 1/ln(t) dt'; title([Char1,' and ',Char2]) legend(Char1,Char2,'Location','SouthWest')70 00 -1 -2 -3 -4 -5 -6 -7 -8 0 .1 0 .2 1/ln(t)00. 3 0.4 0 .5x 0. 6 0. 7 1/ln(t) and t 1 /ln( t) d t图 2.8-6 被积函数曲线和积分函数曲线0. 8习题 21.观察一个数(在此用@记述)在以下四条不同指令作用下的异同: a=@ b = sym( @ ) c = sym( @ ,'d ' ) d = sym( '@ ' ) %这给出完全准确值 ;而异同通过 vpa(abs(a-d)) ,x1/ln(t) dt在此,@ 分别代 表具体数值 7/3 , pi/3 , pi*3^(1/3) vpa(abs(b-d)) , vpa(abs(c-d))等来观察。 〖答案〗 (1)x=7/3a = 2.3333 b = 7/3 c = 2.9500209 d = 7/3 v1 =71 0. v2 = 0. v3 = .6876e-15(2)x=pi/3a = 1.0472 b = pi/3 c = 1.1811710 d = pi/3 v1 = 0. v2 = 0. v3 = .9222e-15(3)x=pi*3^(1/3)a = 4.5310 b = 7732*2^(-50) c = 4.6030989 d = pi*3^(1/3) v1 = . = . = .9094e-152.说出以下三条指令产生的结果各属于哪种数据类型,是“双精度”对象,还是“符号” 对象? 3/7+0.1, sym(3/7+0.1), vpa(sym(3/7+0.1))72 〖答案〗c1 = 0.5286 c2 = 37/70 c3 = .3.在不加专门指定的情况下,以下符号表达式中的哪一个变量被认为是独立自由变量。 sym('sin(w*t)') , sym('a*exp(-X)' ) , sym('z*exp(j*theta)') 〖答案〗ans = w ans = a ans = za11 ? 4.求符号矩阵 A ? a 21 ? ?a ? 3 ? 1简洁化。 〖答案〗A = [ a11, a12, a13] [ a21, a22, a23] [ a31, a32, a33] DA =a12 a 22 a3 2a13 a23 ? 的行列式值和逆,所得结果应采用“子表达式置换” ? a ? 33 ? ?a11*a22*a33-a11*a23*a32-a21*a12*a33+a21*a13*a32+a31*a12*a23-a31*a 13*a22 IAs = [(a22*a33-a23*a32)/d, -(-a12*a23+a13*a22)/d] [-(a21*a33-a23*a31)/d, (a11*a33-a13*a31)/d, -(a12*a33-a13*a32)/d,73 -(a11*a23-a13*a21)/d] [(-a21*a32+a22*a31)/d, (a11*a22-a12*a21)/d] d = a11*a22*a33-a11*a23*a32-a21*a12*a33+a21*a13*a32+a31*a12*a23-a31*a 13*a22 -(a11*a32-a12*a31)/d,5.对函数 f ( k) ? ?akk ?0?? 0 ?k ?0?,当 a 为正实数时,求?? k? 0?f (k ) z?k。 (实际上,这就是根据定义求 Z 变换问题。 ) 〖答案〗Z1 = -z/(-z+a)2 x ?1 6.对于 x ??0 ,求 ? 2k ?1 ? x ? 1 ? k?0 ?? ?2k ?1。 (提示:理论结果为 ln x )〖答案〗s_ss = log(x) syms k x? ?? ?f=2/(2*k+1)*((x-1)/(x+1))^(2*k+1) s=simple(symsum(f,k,0,inf))s= log(x) 7. (1)通过符号计算求 y(t) ??sin t 的导数dy dy 。 (2)然后根据此结果,求 dt dt和t?0??dyt? ? 2。〖答案〗d = abs(1,sin(t))*cos(t) d0_ = -1 dpi_2 =74 08.求出?1.7 ??e ??x sin x dx 的具有 64 位有效数字的积分值。?5?〖答案〗si = 1.1679.计算二重积分??2 1x2(x 2 ??y 2 )dydx 。1〖答案〗r = 10.[0,2?]区间,画出 y ( x )???x0sin t dt 曲线,并计算 y(4.5) 。 t〖答案〗y = sinint(x) y5 = 1.486851575 sinin t(x)1 .8 1 .6 1 .4 1 .2 1 0 .8 0 .6 0 .4 0 .2 0 0 1 2 3 x 4 5 611. 算y( n ) ??? 2sin n xdx,并求 y(5) 。0〖答案〗yn = 1/2*pi^(1/2)*gamma(1/2+1/2*n)/gamma(1+1/2*n) y5 = 8/1512.序 列 x(k) ??akk, h(k) ??bk, 在 此 k ? ? 0 , a ?? b ) 求 这 两 个 序 列 的 卷 积 ( ,y(k) ?? h(n)x(k ? n) 。?n?0〖答案〗y1 = (-(b/a)^(k+1)+1)*a^k*a/(-b+a)或y2 = (-b*b^k+a^k*a)/(-b+a)76 13. 系统的冲激响应为 h(t) ??e?3t,求该系统在输入 u(t) ??cos t , t ??0 作用下的输出。(提示:运用卷积进行计算) 〖答案〗hut = -3/10/exp(t)^3+3/10*cos(t)+1/10*sin(t)14.f (t ) ??Ae???t, ??? 0 的 Fourier 变换。?〖答案〗F = 2*A*a/(a^2+w^2)15.t ? ? ? f (t ) ? ?? ? ?A? ? 1 ? ? ????0 ? ? ???t ?? t ???的 Fourier 变换,并画出 A ??2,??

我要回帖

更多关于 matlab2x怎么开根号 的文章

 

随机推荐