资源描述
精品文档,仅供学习与交流,如有侵权请联系网站删除前 言MATLAB一直是国际科学界应用和影响最广泛的软件工具,有着Mathematica和Maple无法比拟的优势和适用面。它不仅仅是一款数学软件,应用于微积分、概率统计、复变函数、线性变换、解方程、最优化、插值及数据显示等方面,也应用于模糊逻辑、小波分析、神经网络、图像处理、模式识别方面求解。另外数字信息处理、系统仿真、自动化、工程力学、信息与系统、模拟电路等方面都广泛的应用。使用好的数据处理方法和相应的软件工具对实验数据进行处理是大学理工数各专业学生应具备的基本技能,对于相关课程的学习也非常重要。MATLABT优点众多,本书只是重点讨论MATLAB在数据处理方面的应用。具体包括以下方面的内容:1MATLAB安装及界面使用详解;2数组与矩阵及其运算;3MATLAB常用数值计算;4代数方程与最优化;5符号计算;6插值与拟合;7数据与函数的显示。在阅读过程中,要求上机执行书中的相关程序代码,熟练书的相关知识,要求勤查MATLAB自带的帮助系统,才能起到很好的学习效果。第一章 MATLAB的安装和界面使用 本章详细讲述MATLAB R2007a的安装和界面的使用。1.1. MATLAB安装 首先双“setup.exe”之后,出现如图1-1的“Welcome to the MathWorks Installer”窗口,然后点击“Next”按钮。1-1进入图1-2的“License Information”窗口,在Name框和Organization输入1-2相应名称(自行命名)。然后安装目录下的“serial.txt”文件,将序列号复制到“Please enter your Personal License Password(PLP)”框中,然后点击“Next”按钮。待少许时间,防火墙会提示是否允许访问网络的提示框,如瑞星防火墙会出如下图1-3的对话框。1-3选择“总是允许”,并按“确定”。进入“MathWorks Account”对话框 如图1-4。图1-4选择“Install the product versions from my DVD or local disk only”选项按钮,进入“License agreement”对话框,然后选择“Yes”按钮。 图1-5进入“Installation Type”对话框,如图1-6所示,然后 选择“Typical”按钮,点击“Next”。图1-6然后进入“”对话框,如图1-7所示。可以更改安装目录,也呆保持默认。如果系统盘的空间不空,则应更改安装目录,以保证机器的正确运行。图1-7在接下来的步骤中,皆选择“Next”按钮,即可。1.2. MATLAB的启动与界面详解 在开始菜单中,选择:开始程序MATLABR2007amatlab R2007a,如图1-8所示。图1-8然后进入MATLAB应用程序主界面,如图1-9所示。最上方是标题栏,显示版本信息:MATLAB 7.4.0 (R2007a):再往下的一栏是菜单栏:图1-9接下来是工具栏:其中是指定当前工作路径,如果要向某文件夹中读取或保存相关内容,则通过点击,然后选择该文件夹作为当前工作路径。然后点击左侧的,则会出现Current Directory对话框如图1-10所示,用来显示当前路径中的文件信息。它和Workspace处于同一具标签对话框中。图1-10右侧是Command Window窗口,如图1-11所示,是用来输入MATLAB指令的。一打开MATLAB则在Command Window中会出现“”,此符号表示MATLAB软件已准备好了,正在待命令的输入。如输入指令:A =1 2 3然后回车,则出现运算结果:A = 1 2 3 此指令表示输入一个一行三列的矩阵(即行向量),并将此矩阵(向量)保存在变量A中。关于矩阵及向量向量,在第二章中详细解释。图1-11指令执行完毕之后,会发现左下方的Command History窗口中会多出现一行刚刚输入的指令。如图1-12所示,Command History是用来保存输入过的命令,方便以后查找或再次使用。同时Workspace标签属性页也会多出一行。如图1-12所示,Current Directory是用来显示可用的各种变量的。图中说是说明了刚才得到的变量A,它的值、最小、最大元素及类型等信息。图1-12 图1-13在上任一处右击,然后在弹出菜单上选择需要查看的相关信息。如图1-14所示。如果需要用到以前的命令,可以在Command History窗口中查到,可按日期查找,可以选择单条历史命令,也可以同时选择多条历史记录。然后右选择复制,将其粘贴到Command Window窗口中执行。也可将其作为文本复制到Word文档或txt文档中。如果双击历史记录中的命令,则系统会立即执行被双击的命令一次。如果Command History窗口中一些命令不需要,可以一条或多条记录,然后按“Delete”键,将之删除。图1-14 图1-151.3. MATLAB的帮助详解 点击主菜单中的HellpMATLAB Help或直接按F1,进入MATLAB自带的帮助界面,如图1-16所示。点击各个节点可以查看相关帮助信息。帮助文件里有详细的解释和丰富的实例。图1-16由帮助界面,可以看以MATLAB的强大功能,它可以与主流的软件开发工具进行混合编程开发。与Java和.Net无缝对接。只有勤查帮助或网上查找资料才能起到事半功倍的学习效果。【精品文档】第 7 页第二章 数组与矩阵的概念及其运算在MATLAB中预定了一些符号,用于特定的含义,以下是一些预定义的符号:表2-1符号意义符号意义ans默认变量名pi圆周率eps机器可识别的最小的数flops浮点运算之数inf无穷大NaN非数i或j虚数单位realmax最大的实数realmin最小的实数intmax最大的整数其余的请参看联机帮助系统。2.1. 数组与矩阵的概念MATLAB中,数组和矩阵本身是没有区别的,在内存中是一样的。只是针对不同的运算方式,将其为数组运算或矩阵运算。如果运算是按元素对应进行的,则称为数组运算。如果按线性代数学中的方式运算,则称为矩阵运算,如例2-1例2-1 数组与矩阵的区别演示。设有矩阵A和B如下:以数组方式运算方式:,其中Inf表示无穷大(非数)MATLAB指令:A=-1 1;0 2 %输入的矩阵保存在变量A中A = -1 1 0 2 B=-1 1;0 2 %输入的矩阵保存在变量B中B = -1 1 0 2A .*B %以数组方式相乘,ans = -1 2 0 8A . /B %以数组方式相除ans = -1 2 Inf 2几点说明:1、MATLAB中,矩阵(数组)按元素逐个输入的方法,就是将所有元素放在一对方括号内,行与行之间以分号“;”隔开,每一行中各元素之间以空格或逗号隔开。详细说明参看2.2节内容;2、MATLAB指令输入时,必需在英文状态下输入,否则会出错;3、如果一条指令以分号“;”作为结束符,则运算结果并不显示在Command Window窗口中,但保存在Workspace中。如果没有分号,则将结果显示在Command Window中;4、百分号“%”表示注释,从开始到行未为方便人阅读所加的注释,不是指令中的一部分;5、注意数组方式运算有一个小黑点“.”;6、本书中凡MATLAB指令都用加粗字体;7、MATLAB中变量无需要声明就可直接使用,根据赋值符号“”右则表达式的类型来自动确定左侧的类型。如A=-1 1;0 2,A表示一个2阶矩阵。以矩阵方式运算(即按线性代数中的矩阵运算):当然,矩阵的加法和减法两种方式都是一样的,MATLAB指令:A*B %矩阵方式相乘ans = -1 5 -3 11A/B %矩阵方式相除ans = -1.0000 1.5000 -3.0000 3.5000注意:如本书中后面内容只提及矩阵,只有当涉及到数组方式的运算时才将矩阵称为数组。2.2. 矩阵的创建和操作 在MATLAB中,有两种创建矩阵的方法。一是直接按元素逐个输入的方法,如例2-1所示;另一种就是使用MATLAB相关的指令来创建。一、直接输入元素创建直接按元素逐个输入来创建矩阵,就是将所有元素放在一对方括号内,行与行之间以分号“;”隔开,每一行中各元素之间以空格或逗号隔开。只有一行的矩阵称为行向量(也称为一维数组),只有一列的矩阵称为列向量。此方法可创建向量和矩阵。例2-2 直接输入创建向量和矩阵演示。vr = 1 2 3 4 %创建行向量,元素之间以空格隔开vr = 1 2 3 4vc = 1;2;3 %创建列向量,行之间以分号隔开vc = 1 2 3m23=1 2 3;4 5 6 %创建一个23行的矩阵m23 = 1 2 3 4 5 6二、MATLAB指令创建在MATLAB中指令,更多时候也称为函数。可以使用MATLAB内置的函数来创建矩阵(数组)。以下以举例的方式说明。例2-3 通过MATLAB指令创建向量和矩阵演示:1、指定起点:步长:终点。如果不指定步长,则将步长默认为1,最后一个元素不一定是终点,这取决于区间长度是否为步长的整数倍。该方法用于创建向量。v = 0:0.2:1 %以0为起点、1为终点、步长为0.2创建一个数组(行向量)v = 0 0.2000 0.4000 0.6000 0.8000 1.0000v = 0:pi %起点0、终点pi、默认步长1。最后一个元素不是终点。v = 0 1 2 32、linspace(起点,终点,元素个数),等分间隔。该方法用于创建向量。v = linspace(0,pi,3)v = 0 1.5708 3.1416v = linspace(0,3,5)v = 0 0.7500 1.5000 2.2500 3.00003特殊矩阵的创建。创建特殊矩阵的常用函数:rand、magic、zeros、ones和eye等,需要深入研究请参看联机帮助。rand(state,0) %把均匀分布伪随机发生器置为0状态v = rand(2,3) %产生一个23的随机矩阵v = 0.9501 0.6068 0.8913 0.2311 0.4860 0.7621m = magic(3) %产生一个3阶魔方矩阵m = 8 1 6 3 5 7 4 9 2zeros(3) %产生一个3阶零矩阵ans = 0 0 0 0 0 0 0 0 0zeros(2,3) %产生一个23的零矩阵ans = 0 0 0 0 0 0eye(2,3) %产生一个23的矩阵,左边22是一个单位矩阵ans = 1 0 0 0 1 0eye(3) %产生一个3阶单位矩阵ans = 1 0 0 0 1 0 0 0 1ones(2,3) %产生一个元素全为1的23阶矩阵ans = 1 1 1 1 1 1另外还有其它特殊的矩阵创建函数,如有需要请参看帮助。2.3. 矩阵的访问操作 以下以举例的方式说明矩阵的访问操作如下:例2-4矩阵访问举例演示:v = 1 2 3 4 5 6 7; %生成一个行向量v(3) %查询第三个元素的值ans = 3v(3)=23 %将第三个元素的值设为23v = 1 2 23 4 5 6 7v(1 2 6)=11 12 16 %将下标为1、2、6的三元素的值设为11、12、16v = 11 12 23 4 5 16 7v(4:end) %查询第4至最后元素之间的所有元素ans = 4 5 16 7v(1:5) %查询第1至5个元素ans = 11 12 23 4 5m=1 2 3;4 5 6 %产生一个新矩阵mm = 1 2 3 4 5 6m(2,3) %查询第2行第3列位置上的元素ans = 6m(:,2) %查询第2列元素上所有行的元素ans = 2 5m(2,:) %查询第2行上所有列的元素ans = 4 5 6m(2,1 2) %查询第2行上的第1、2列位置上的元素ans = 4 5m(1,2 3)=88 99 %将第1行上的第2、3列上的元素分别设为88和99m = 1 88 99 4 5 6m(2,2)=518 %将第2行2列位置上的元素设为518m = 1 88 99 4 518 62.4. 矩阵的基本运算操作 矩阵的常用基本运算有加、减、乘、除、求逆等。数组方式和矩阵方式的运算符只差了一个小圆点,注意观察实例代码。1、加法和减法数组方式和矩阵方式都是一样的,就是直接将对应位置上的元素相加。如果是一个数和矩阵相加,则矩阵的每一个元素都加上这个数。例2-4矩阵加法操作演示:A=magic(3) %产生一个魔方矩阵A = 8 1 6 3 5 7 4 9 2B = ones(3) %产生一个元素全为1的矩阵B = 1 1 1 1 1 1 1 1 1A+B %矩阵的加法ans = 9 2 7 4 6 8 5 10 32+A %数与矩阵的加法ans = 10 3 8 5 7 9 6 11 42、乘法、除法与逆运算数组方式的乘法和除法是依元素对应相乘;矩阵方式的乘法则是按线性代数中的方法进行,矩阵的除是按线性代数中的取逆进行。左除:A/B,相当于A*B-1,右除:AB,相当于A-1*B。逆运算按线性代数中的方法进行。例2-5矩阵乘、除操作演示 A=magic(3); B=ones(3); A.*B %数组方式的乘法ans = 8 1 6 3 5 7 4 9 2A*B %矩阵方式的乘法ans = 15 15 15 15 15 15 15 15 15M=1,2;2 1 M = 1 2 2 1B=1 -1;1 0 B = 1 -1 1 0A./B %维数不匹配,将会出错? Error using = rdivideMatrix dimensions must agree.M./B %数组方式的除法ans = 1 -2 2 InfB./M %数据方式的除法ans = 1.0000 -0.5000 0.5000 0M/B %矩阵方式的除法ans = -2 3 -1 3M*inv(B) %以矩阵方式运算,M乘以B的逆矩阵ans = -2 3 -1 3inv(B) %计算B的逆ans = 0 1 -1 13、矩阵作为函数参数如果矩阵(数组)作为标准数学函数的参数,则对每一个元素都作同一函数计算。如V是一个行向量,R = sin(V)的运算结果R也是一个行向量,且R是的每一个元素都是由V中对应元素值求正弦值得到。例2-6矩阵作为函数参数演示v = 0 pi/2 pi 3*pi/2 2*pi %产生一个有4个元素的行向量v = 0 1.5708 3.1416 4.7124 6.2832r=sin(v) %计算结果也是一个向量,和v的元素个相同r = 0 1.0000 0.0000 -1.0000 -0.00004、常用的矩阵操作函数常用的矩阵操作函数如左右置换、上下置换、旋转,以下举例说明。例2-7矩阵常用操作演示A = magic(3) A = 8 1 6 3 5 7 4 9 2flipud(A) %矩阵上下翻转ans = 4 9 2 3 5 7 8 1 6fliplr(A) %矩阵左右翻转ans = 6 1 8 7 5 3 2 9 4rot90(A) %矩阵旋转90度ans = 6 7 2 1 5 9 8 3 42.5. 非数、关系运算与逻辑操作 1、非数NaN当表达式中如果分母出现零,或类似于的表达式运算时都会产生非数NaN,即Not a number。NaN具有如下性质: NaN参与的运算结果也是NaN; 非数没有大小的概念,因此不能将两非数去比较大小。非数真实的记录了运算结果,即数学中的无限变换趋,以下举例说明。例2-8非数使用演示log(0) %即相当于自变量趋向0时的极限为负无穷大ans = -Inft = 1/0 %相当于分母从右侧趋向趋向0时的极限为无穷大t = Infcos(t) %对非数计算余弦结果为非数ans = NaN非数要用于数据可视化中,如将图中某一指定部分镂空,将用到非数,详见第七章。2、关系运算与逻辑运算关系操作符有:= =或eq(A,B),=或ne,或gt,=或ge,以及&或and、|或or和或nor等具体函数要求自行查阅帮助系统。另外有关函数如下:all, any, isqual, iempty, isfinite, isinf, isnan, isnumeric, isreal, isprime, isspace, isstr, ischar, isstudent, isunix, isvms, find.列表如下,详情请参看联机帮助。关系运算符如下表2-2关系运算符功能关系运算符功能=大于或等于大于=不等于例2-9关系运算与逻辑矩阵使用演示A=1 5 9;3 4 7;2 6 8 A = 1 5 9 3 4 7 2 6 8B = magic(3) B = 8 1 6 3 5 7 4 9 2C = gt(A,B) 比较大小Greater thanC = 0 1 1 0 0 0 0 0 1whos C %查看C的详细信息 Name Size Bytes Class Attributes C 3x3 9 logicalD = and(A,B) %求和运算D = 1 1 1 1 1 1 1 1 1B3 %B中元素值大于1的位置对应1否则对应0,结果是一个逻辑矩阵ans = 1 0 1 0 1 1 1 1 0B(find(B3) %将B中元素值大于3的元素列出来ans = 8 4 5 9 6 7r,c = find(B3) %元素值大于3的行号组成的数组r,列号组成数组cr = 1 3 2 3 1 2c = 1 1 2 2 3 3B.*(B3) %B中不大于3位置上的元素设为零ans = 8 0 6 0 5 7 4 9 0例2-10 绘制0,3pi之间的曲线,并截去pi至2pi之间的曲线。x = linspace(0,3*pi); 自变量数组y = sin(x); 函数数组x1 = (x2*pi); 逻辑数组y1 = x1.*y; 截断数组plot(x,y1); 绘图2.6. 小结、综合举例与练习 例2-11综合举例,利用关系运算求近似极限,修补图形缺口。t=-2*pi:pi/10:2*pi; 自变量数组y=sin(t)./t; 函数值数组tt=t+(t=0)*eps; 修正后的自变量数组,元素值为零时,以最小机器数代替yy=sin(tt)./tt; 修正后的函数值数组subplot(1,2,1),plot(t,y),axis(-7,7,-0.5,1.2), 绘制没有修正的图形subplot(1,2,2),plot(tt,yy),axis(-7,7,-0.5,1.2)绘制修正后的图形图2-1第三章 矩阵的基本特征参数本章简要说明反映矩阵特征参数的一些量,如行列式、秩、条件数、范数、特征值与特征向量等问题。3.1. 矩阵的基本参数以一下说明有矩阵信息的基本参数1、元素个数、行列数及其最大者、元素最大最小元素例3-1矩阵基本信息查询演示M = magic(3) M = 8 1 6 3 5 7 4 9 2numel(A) %统计矩阵的元素个数ans = 9size(M) %计算矩阵的行列数ans = 3 3length(A) %计算行数与列数中的最大者ans = 3max(M(:) %求出矩阵中所有元素中的最大者ans = 9min(M(:) %求出矩阵中所有元素中的最小者ans = 13.2. 矩阵的行列式、秩与范数计算行列式、秩及范数的指令分别是det、rank和norm例3-2矩阵行列式、秩与范数使用演示A=magic(3);det(A) %求A的行列式ans = -360rank(A) 计算矩阵的秩ans = 3A = 5 6 9;3 5 1;8 6 1A = 5 6 9 3 5 1 8 6 1binf = norm(A,inf) 计算无穷范数binf = 20b2 = norm(A,2) 计算2范数b2 = 15.42153.3. 条件数、矩阵的稳定性条件数是反映AX = b中,如果A或b发生细微变化,解变化的剧烈程度。如果条件数很大说明是病态方程方程,不稳定方程。例3-3矩阵条件数与稳定性演示A = 2 3 4;1 1 9;1 2 -6A = 2 3 4 1 1 9 1 2 -6con2 = cond(A) 计算2-范式条件数con2 = 575.8240con1 = condest(A) 计算1-范式条件数con1 = 817例3-4求解线性方程组:A = 2 3 4;1 1 9;1 2 -6 系数矩阵A = 2 3 4 1 1 9 1 2 -6b =1;-7;9 常数列b = 1 -7 9x = inv(A)*b 逆矩阵的方法求解x = 1 1 -1Ab 左除方法求解ans = 1 1-1A = A+0.001 系数矩阵加上扰动A = 2.0010 3.0010 4.0010 1.0010 1.0010 9.0010 1.0010 2.0010 -5.9990b = b-0.001 常数列加上扰动b = 0.9990 -7.0010 8.9990x2 = inv(A)*b 以逆矩阵的方法求解x2 = 0.9504 1.0297 -0.99803.4. 特征值、特征向量与对角化与数学知识相关的概念请参考相关数学书籍例3-5特征值与特征向量演示:A = 8 1 6 3 5 7 4 9 2E = eig(A) 计算特征值E = 15.0000 4.8990 -4.8990V,D = eig(A) 计算特征值组成的对角矩阵D和特征向量组成的矩阵VV = -0.5774 -0.8131 -0.3416 -0.5774 0.4714 -0.4714 -0.5774 0.3416 0.8131D = 15.0000 0 0 0 4.8990 0 0 0 -4.8990注:有关正交化运算(orth函数)、三角分解(lu)、正交分解(qr)、特征值分解(eig)、奇异值分解(svd)的内容,请参看Matlab自还的帮助系统和相关数学书籍3.5. 小结、综合举例与练习利用Matlab求解下列线性方程组:要求先分别列出系数矩阵和常数列向量,求出其行列式、秩、特征值及特征向量矩阵、2种条件数,系数矩阵的逆矩阵,然后求出其解,将系数矩阵再乘以解向量,看是否和常数向量相等。最后将系数矩阵加个0.0002的扰动,看其解是多少?第四章 微积分学中的基本求解问题4.1. 符号运算简介符号运算以推理解析的方式进行,因此没有误差问题的困扰,能给出完全正确的解析解,如解析解不存在,则给按任意指定的精度给出数值解。符号运算使用起来非常简单,与大学数学中的书写类似。符号函数的定义使用指令sym与syms,以下代码段举例说明其应用。例4-1 sym与syms的使用y = sym(2*sin(x)*cos(x) 通过字符串来创建符号对象,自变量为xy =2*sin(x)*cos(x)y = simple(y) 将符号函数对像化简y = sin(2*x)syms a b; 声明符号变量a,by = sin(a)*cos(b)-cos(a)*sin(b); 符号对象yy = simple(y) 将符号对象y化简y =sin(a-b)A = sym(1 2;3 2) 通过字符串创建矩阵符号对象AA = 1, 2 3, 2da=det(A) 计算A的行列式da =-4ia = inv(A) 计算A的逆矩阵,注意结果含有分数ia = -1/2, 1/2 3/4, -1/4ea = eig(A) 计算A的特征值ea = 4 -1ev,ea=eig(A) 计算特征值和特征向量。ev = -1, 1 1, 3/2ea = -1, 0 0, 4注意:使用符号运算就像平时数学运算一样方便。另外MATLAB中还有针对多项式操作的一系列函数:colllect:同幂次的项系数进行合并;expand:按多项式、三角函数或指数对数函数等展开;factor:因式分解;horner:将多项式分解成嵌套形式;simple:将表达式化简。如需要时可查看帮助,此不再详细展开。4.2. 符号对象的精度控制在符号计算中,当符号常数或符号结果需要以数值形式给出时,可以灵活地按指定精度输出数值。与精度有关的三个函数指令:double,digits,vpadigits:显示当前采用的数值计算精度;digits(n) :设置今后数值计算以n位相对精度进行;xs=vpa(x) :在digits指定精度下,给出x的数值型结果;xs=vpa(x,n) :在n位相对精度下,给出x的数值型结果。以下举例说明。例4-2 精度控制演示。vpa(pi) 依当前精度输出ans =3.1415927eval(pi) 依默认精度输出ans = 3.1416vpa(pi,100) 依指定精度输出ans =3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068a =sym(1/3) 创建符号对象a =1/3digits(2); 设置当前精度为2vpa(a) 以当前精度输出ans =.33digits(19); 设置当前精度为19vpa(a) 以当前精度输出ans =.33333333333333333334.3. 极限求解MATLAB中计算极限的函数是limit,其语法如下:limit(F,x,a):计算limit(F,x,a,right):limit(F,x,a,left):例4-3求符号极限演示:syms x a t h 说明字符变量limit(sin(x)/x) 计算极限,默认求右趋于零的极限ans =1limit(1/x,x,0,right) 对x求右趋于零的极限ans =Inflimit(1/x,x,0,left) 对x求左趋于零的极限ans =-Inflimit(sin(x+h)-sin(x)/h,h,0) 对h求趋于零的极限ans =cos(x)v = (1+a/x)x,exp(-x) v = (1+a/x)x, exp(-x)limit(v,x,inf,left) 对x求左趋于正无穷大的极限ans = exp(a), 04.4. 导数及其几何应用导数问题分两类,一类是已知函数解析式,然后计算其导数解析式或计算某点的导数值,此类问题很好处理。另一类问题是只有实验得到的离散数据,要得到各阶导数值,该类问题比较麻烦,常用的方法是中心差分法。几何上介绍点积、叉积、混合积,切平面和法线、梯度场,流线场。一、解析法求导数问题解析法求导使用符号运算,求导函数为diff,语法如下:diff(S); 对S求导,依26字母中最接近x的字母为自变量diff(S,v); 以v为自变量,对S求导diff(S,v,n); 以v为自变量,对S求n阶导数例4-3求符号极限演示:da = diff(x5+3*x+5) 求导数da =5*x4+3f = sym(log(x)/exp(x2) 定义符号函数f =log(x)/exp(x2)simplify(diff(f) 对函数求导数后再化简ans =-exp(-x2)*(-1+2*log(x)*x2)/xsimplify(diff(f,2) 对函数求二阶导数后化简ans =exp(-x2)*(-1-4*x2+4*log(x)*x4-2*log(x)*x2)/x2二、向量的点积、叉积和混合积点积、叉积与混合积的相关概念,请参见数据书籍。例4-4点积、叉积与混合演示: x1 = 1 9 8 0x1 =1 9 8 0x2=2 6 9 7x2 =2 6 9 7y = dot(x1,x2) 点积运算y =128y1 = cross(x1,x2) 维数是3才能进行叉积运算? Error using = cross at 37A and B must have at least one dimension of length 3.x1=9 5 2x1 =9 5 2x2 = 3 2 7x2 =3 2 7xd = dot(x1,x2) 计算点积xd =51xcr = cross(x1,x2) 计算叉积xcr =31 -57 3xcr2 = cross(x2,x1) 计算叉积xcr2 =-31 57 -3x3=2 4 7x3 =2 4 7ydc = dot(x3,cross(x1,x2) 混合积运算,用于计算平行六面体的体积ydc =-1454.5. 各种积分问题 积分有符号方法和数值方法,以下分别说明。符号积分的函数是int,它的语法是:int(S); 计算S的一个原函数。int(S,v); 以v为积分变量计算S的一个原函数int(S,a,b); 计算符号积分,a与b是下限和上限,S是被积函数int(S,v,a,b); 计算符号积分,a与b是下、上限,S是被积函数,v是积分变量例4-5符号积分演示: f = sym(sin(s+2*x) 定义符号函数f =sin(s+2*x)int(f) 求原函数ans =-1/2*cos(s+2*x)int(f,s) 以s为积分变量求原函数ans =-cos(s+2*x)int(f,pi/2,pi) 计算指定区间的定积分ans =-cos(s)int(f,s,pi/2,pi) 指定积分变量,指定区间求定积分ans =-sin(2*x)+cos(2*x)int(f,a,b) 指定区间上求定积分ans =1/2*cos(s+2*a)-1/2*cos(s+2*b)例4-6求与。F1=int(1/log(t),t,0,x) 计算符号积分,无初等解析式。Warning: Explicit integral could not be found. In sym.int at 58 In char.int at 9 F1 = int(1/log(t),t = 0 . x)F1=int(1/log(t),t,0,1/2) 计算积分,无初等解析式。F1 =-Ei(1,log(2)vpa(F1) 以指定精度得到数值解。ans =-.37867104306108797672720718463656例4-7求积分。注意:内积分上下限都是函数。syms x y zF2=int(int(int(x2+y2+z2,z,sqrt(x*y),x2*y),y,sqrt(x),x2),x,1,2)VF2=vpa(F2) F2 =1610027357/6563700-6072064/348075*2(1/2)+14912/4641*2(1/4)+64/225*2(3/4)VF2 =224.92153573331143159790710032805以下实例是数值计算方法计算积分。例2-8绘制下列空间曲线的图形并计算长度,参数方程:,长度:t=0:0.05:3*pi 生成数组plot3(sin(2*t),cos(t),t) %绘制三维曲线图4-1f=inline(sqrt(4*cos(2*t).2+sin(t).2+1) %d定义一个内联函数f =Inline function:f(t) = sqrt(4*cos(2*t).2+sin(t).2+1) % functionlen =quad(f,0,3*pi) 使用数值方法计算定积分的值len =17.22204.6. 级数问题求解 级数求各的函数是symsum,它的语法形式是:r = symsum(s,a,b); r = symsum(s,v,a,b); 以下举例说明它们的使用方法,详细请查阅MATLAB自带的帮助文件。例4-7求和及,数值转换与精度控制演示:A= symsum(sym(2*n-1)2),1,N) 求和A =11/3*N+8/3-4*(N+1)2+4/3*(N+1)3simplify(A) 化简ans =-1/3*N+4/3*N3B= symsum(sym(1/(2*n-1)2),1,inf) 求无穷项和B =1/8*pi2 digits(15) 设置当前精度vpa(B) 必须使用vpa函数才能用相应精度输出ans =1.23370055013617例4-10求和及和,数值转换与精度控制演示:syms x kr = symsum(1/k2,1,20) 1至20求和r =17299975731542641/10838475198270720r = symsum(1/k2,10,20) 10至20求和r =3056206830982561/54192375991353600第五章 代数方程与最优化5.1. 代数方程求解代数方程的函数是solve,它的语法是:solve(eq)solve(eq,var)solve(eq1,eq2,.,eqn)g = solve(eq1,eq2,.,eqn,var1,var2,.,varn)说明:输入参数符号表达式或字符串。如果输入参数是形如的字符串,即:solve(),则执行指令求解方程。可以求解单个方程,也可求解方程组。参数var,var1,var2,.,varn用于指定未知变量,eq1,eq2,.,eqn是用符号表达式或字符串表示的方程。另外MATLAB还提供了函数fsolve,可用于求解多元方程的一个实根,详细使用方法请参看帮助文件,此处主要介绍solve.例5-1求解方程,其中分别将x和b视为未知数。A = solve(a*x2 + b*x + c) 求解方程,A表示解组成的数组,x为未知数。A =-1/2*(b-(b2-4*a*c)(1/2)/a-1/2*(b+(b2-4*a*c)(1/2)/aA = solve(a*x2 + b*x + c,b) 求解方程,b为未知数。A =-(a*x2+c)/x例5-2求解方程组,和 S = solve(x + y = 1,x - 11*y = 5) 求解方程组S = x: 1x1 symy: 1x1 symS.x,S.y 显示结果ans =4/3ans =-1/3A = solve(a*u2 + v2, u - v = 1, a2 - 5*a + 6) 解方程组并显示结果的结构A = a: 4x1 symu: 4x1 symv: 4x1 symA.a,A.u,A.v 显示结果的A的各个部分ans =2233ans =1/3+1/3*i*2(1/2)1/3-1/3*i*2(1/2)1/4+1/4*i*3(1/2)1/4-1/4*i*3(1/2)ans =-2/3+1/3*i*2(1/2)-2/3-1/3*i*2(1/2)-3/4+1/4*i*3(1/2)-3/4-1/4*i*3(1/2)a = A.a;u = A.u;v=A.v; 显示结果的A的各个部分分别保存在a,u,v中eval(a.*u.2 + v.2) eval(u - v -1) eval(a.2 - 5.*a + 6) 检验结果是否正确ans =2*(1/3+1/3*i*2(1/2)2+(-2/3+1/3*i*2(1/2)2, 0, 02*(1/3-1/3*i*2(1/2)2+(-2/3-1/3*i*2(1/2)2, 0, 03*(1/4+1/4*i*3(1/2)2+(-3/4+1/4*i*3(1/2)2, 0, 03*(1/4-1/4*i*3(1/2)2+(-3/4-1/4*i*3(1/2)2, 0, 0a.*u.2 + v.2 检验结果是否为零,下面的结果似乎表示方程左边不为零ans =2*(1/3+1/3*i*2(1/2)2+(-2/3+1/3*i*2(1/2)22*(1/3-1/3*i*2(1/2)2+(-2/3-1/3*i*2(1/2)23*(1/4+1/4*i*3(1/2)2+(-3/4+1/4*i*3(1/2)23*(1/4-1/4*i*3(1/2)2+(-3/4-1/4*i*3(1/2)2u - v -1 检验结果是否为零,结果显示方程左边为零ans =0000a.2 - 5.*a + 6 检验结果是否为零,结果显示方程左边为零ans =0000eval(a.*u.2 + v.2) 将符号变量转成数值,结果显示方程左边几乎可看成零ans =1.0e-015 *000.11100.11105.2. 无条件最优化问题求解 MATLAB中解决无条件极值的函数有两个:fminunc和fmin
展开阅读全文