实验一Matlab基本操作与微积分计算实验目的1.进一步理解导数概念及其几何意义.2.学习matlab的求导命令与求导法.3.通过本实验加深理解积分理论中分割、近似、求和、取极限的思想方法.4.学习并掌握用matlab求不定积分、定积分、二重积分、曲线积分的方法.5.学习matlab命令sum、symsum与int.实验内容一、变量1、变量MA TLAB中变量的命名规则是:(1)变量名必须是不含空格的单个词;(2)变量名区分大小写;(3)变量名最多不超过19个字符;(4)变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号.1、创建简单的数组x=[a b c d e f ]创建包含指定元素的行向量x=first:step: last创建从first起,逐步加step计数,last结束的行向量, step缺省默认值为1x=linspace(first,last,n)创建从first开始,到last结束,有n个元素的行向量x=logspace(first,last,n)创建从first开始,到last结束,有n个元素的对数分隔行向量.注:以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素.2、数组元素的访问(1)访问一个元素: x(i)表示访问数组x的第i个元素.(2)访问一块元素: x(a :b :c)表示访问数组x的从第a个元素开始,以步长为b到第c个元素(但不超过c),b可以为负数,b缺损时为1.(3)直接使用元素编址序号: x ([a b c d]) 表示提取数组x的第a、b、c、d个元素构成一个新的数组[x (a) x (b) x(c) x(d)].3、数组的运算(1)标量-数组运算数组对标量的加、减、乘、除、乘方是数组的每个元素对该标量施加相应的加、减、乘、除、乘方运算.设:a=[a1,a2,…,an], c=标量, 则:a+c=[a1+c,a2+c,…,an+c]a .*c=[a1*c,a2*c,…,an*c]a ./c= [a1/c,a2/c,…,an/c](右除)a .\c= [c/a1,c/a2,…,c/an] (左除)a .^c= [a1^c,a2^c,…,an^c]c .^a= [c^a1,c^a2,…,c^an](2)数组-数组运算当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行的,不同大小或维数的数组是不能进行运算的.设:a=[a1,a2,…,an], b=[b1,b2,…,bn], 则:a +b= [a1+b1,a2+b2,…,an+bn]a .*b= [a1*b1,a2*b2,…,an*bn]a ./b= [a1/b1,a2/b2,…,an/bn]a .\b=[b1/a1,b2/a2,…,bn/an]a .^b=[a1^b1,a2^b2,…,an^bn]三、矩阵1、矩阵的建立矩阵直接输入:从“[ ” 开始,元素之间用逗号“,”(或空格),行之间用分号“;”(或回车),用“ ]”结束.特殊矩阵的建立:a=[ ] 产生一个空矩阵,当对一项操作无结果时,返回空矩阵,空矩阵的大小为零.b=zeros (m,n) 产生一个m行、n列的零矩阵c=ones (m,n) 产生一个m行、n列的元素全为1的矩阵d=eye (m,n) 产生一个m行、n列的单位矩阵eye (n) %生成n维的单位向量eye (size (A)) %生成与A同维的单位阵2、矩阵中元素的操作(1)矩阵A的第r行A(r,:)(2)矩阵A的第r列A(:,r)(3)依次提取矩阵A的每一列,将A拉伸为一个列向量A(:)(4)取矩阵A的第i1~i2行、第j1~j2列构成新矩阵:A(i1:i2, j1:j2)(5)以逆序提取矩阵A的第i1~i2行,构成新矩阵:A(i2:-1:i1,:)(6)以逆序提取矩阵A的第j1~j2列,构成新矩阵:A(:, j2:-1:j1 )(7)删除A的第i1~i2行,构成新矩阵:A(i1:i2,:)=[ ](8)删除A的第j1~j2列,构成新矩阵:A(:, j1:j2)=[ ](9)将矩阵A和B拼接成新矩阵:[A B];[A;B]3、矩阵的运算(1)标量-矩阵运算同标量-数组运算.(2)矩阵-矩阵运算a. 元素对元素的运算,同数组-数组运算.(A/B %A右除B; B\A%A左除B)b. 矩阵运算:矩阵加法:A+B矩阵乘法:A*B方阵的行列式:det(A)方阵的逆:inv(A)方阵的特征值与特征向量:[V ,D]=eig[A] A 的转置 A ’A 的n 次幂A^n 四、导数及偏导数计算 1.学习matlab 命令.建立符号变量命令sym 和syms 调用格式: x=sym(‘x’), 建立符号变量x ;syms x y z , 建立多个符号变量x,y,z ; matlab 求导命令diff 调用格式:diff (函数()f x ) , 求()f x 的一阶导数()f x '; diff (函数()f x , n ) , 求()f x 的n 阶导数()()n fx (n 是具体整数);diff (函数(,)f x y ,变量名x ), 求(,)f x y 对x 的偏导数f x∂∂;diff (函数(,)f x y , 变量名x ,n ) ,求(,)f x y 对x 的n 阶偏导数nn fx∂∂;matlab 求雅可比矩阵命令jacobian ,调用格式:jacobian ([(,,)f x y z ;(,,)g x y z ;(,,)h x y z ], [,,x y z ])给出: f f f x y z g g g x y z h h h xyz ⎛⎫∂∂∂ ⎪∂∂∂ ⎪⎪∂∂∂⎪∂∂∂ ⎪ ⎪∂∂∂ ⎪∂∂∂⎝⎭2.求一元函数的导数. (1)()y f x =的一阶导数.例1.1 设()x f x e =,用定义计算(0)f '. 解:()f x 在某一点0x 的导数定义为极限: 000()()limx f x x f x x∆→+∆-∆我们记h x =∆,输入命令:syms h;limit((exp(0+h)-exp(0))/h,h,0) 得结果:ans=1.可知(0)1f '= 例1.2 求ln(sin )y x =的导数. 解: 输入命令:dy_dx=diff(log(sin(x))). 得结果:dy_dx=cos(x)/sin(x).在matlab 中,函数x ln 用log(x)表示,而log10(x)表示x lg .例1.3 求下列函数的导数: %利用matlab 命令diff 一次可以求出若干个函数的导数.1.1y =2.22cos 2cos 2y x x =+.3.xy sin 34=.4.xyln ln 4=. 解: 输入命令:a=diff([sqrt(x^2- 2*x+5),cos(x^2)+2*cos(2*x),4^(sin(x)),log(log(x))]). 得结果:a=[1/2/(x^2-2*x+5)^(1/2)*(2*x-2), -2*sin(x^2)*x-4*sin(2*x), 4^sin(x)*cos(x)*log(4), 1/x/log(x)].由本例可以看出,matlab 函数是对矩阵或向量进行操作的,a(i)表示向量a 的第i 个分量.函数向量的第i 个函数的导数为导数向量中对应的元素。
(2)参数方程所确定的函数的导数.设参数方程()()x x t y y t =⎧⎨=⎩确定函数()y f x =,则y 的导数()()dy y t dxx t '='.例1.4.设(sin )(1cos )x a t t y a t =-⎧⎨=-⎩,求d y d x.解: 输入命令:dx_dt=diff(a*(t-sin(t))); dy_dt=diff(a*(1-cos(t))); dy_dx=dy_dt/dx_dt. 得结果:dy_dx=sin(t)/(1-cos(t)). 其中分号的作用是不显示结果.3.求多元函数的偏导数.例1.5 设 u 的一阶偏导数.解: 输入命令:diff((x^2+y^2+z^2)^(1/2), x). 得结果:ans=1/(x^2+y^2+z^2)^(1/2)*x. 在命令中将末尾的x 换成y 将给出y 的偏导数:ans=1/(x^2+y^2+z^2)^(1/2)*y . 也可以输入命令:jacobian((x^2+y^2+z^2)^(1/2),[x y]). 得结果:ans=[1/(x^2+y^2+z^2)^(1/2)*x, 1/(x^2+y^2+z^2)^(1/2)*y] 给出矩阵,u u x y ⎛⎫∂∂⎪∂∂⎝⎭. 例1.6 求下列函数的偏导数: 1.1()yz arctg x=.2.2yz x = .解: 可以逐个求,但使用jacobian 命令求偏导数更为方便. 输入命令:jacobian([atan(y/x),x^y],[x,y]). 得结果:ans=[ -y/x^2/(1+y^2/x^2), 1/x/(1+y^2/x^2)] [ x^y*y/x, x^y*log(x)]. 4.求高阶导数或高阶偏导数.例1.7 设22()x f x x e = ,求(20)()fx . 解:输入指令:diff(x^2*exp(2*x),x,20). 得结果: ans =99614720*exp(2*x)+20971520*x*exp(2*x)+1048576*x^2*exp(2*x)例1.8 设642232z x y x y =-+,求22222,,z z z x y x y∂∂∂∂∂∂∂.解:输入命令:diff(x^6-3*y^4+2*x^2*y^2,x,2) 可得到22zx∂∂: ans=30*x^4+4*y^2. diff(x^6-3*y^4+2*x^2*y^2,y,2)得22zy∂∂: ans=-36*y^2+4*x^2.输入命令: diff(diff(x^6-3*y^4+2*x^2*y^2,x),y)可得2z x y∂∂∂: ans=8*x*y同学们可自己计算2z y x∂∂∂比较它们的结果.注意命令:diff(x^6-3*y^4+2*x^2*y^2,x,y),是对y 求偏导数,不是求2z x y∂∂∂.5.求隐函数所确定函数的导数或偏导数 例1.9 设ln y xx ee -+=,求d y d x解:(,)ln y xF x y x ee -=+-,先求x F ',再求y F '.输入命令:df_dx=diff(log(x)+exp(-y/x)-exp(1),x) 得到x F ':df_dx=1/x+y/x^2*exp(-y/x). 输入命令:df_dy=diff(log(x)+exp(-y/x)-exp(1),y) 得到y F ':df_dy=-1/x*exp(-y/x) 输入命令:dy_dx=-df_dx/df_dy 可得所求结果:dy_dx=-(-1/x-y/x^2*exp(-y/x))*x/exp(-y/x).例1.10.设sin()cos()()0xy yz tg xz ++= ,求,z zx y∂∂∂∂解:()sin()cos()()F x xy yz tg xz =++ 输入命令:a=jacobian(sin(x*y)+cos(y*z)+tan(z*x),[x,y,z]) 可得向量(),,x y z F F F '''a=[cos(x*y)*y+(1+tan(z*x)^2)*z,cos(x*y)*x-sin(y*z)*z, -sin(y*z)*y+(1+tan(z*x)^2)*x]. 输入命令:dz_dx=-a(1)/a(3) 得:dz_dx=(-cos(x*y)*y-(1+tan(z*x)^2)*z)/(-sin(y*z)*y+(1+tan(z*x)^2)*x) 输入命令:dz_dy=-a(2)/a(3) 得:dz_dy=(-cos(x*y)*x+sin(y*z)*z)/(-sin(y*z)*y+(1+tan(z*x)^2)*x) 五、积分计算1 学习matlab 命令(1)求和命令sum 调用格式.sum(x),给出向量x 的各个元素的累加和,如果x 是矩阵,则sum(x)是一个元素为x 的每列列和的行向量. sum(x,2) 得行和向量。