首页 符号函数即相关运算

符号函数即相关运算

举报
开通vip

符号函数即相关运算 符号函数即相关运算 一、MATLAB提供了两个建立符号对象的函数,sym和 syms,现分别介绍两个函数用法如下: (1)..sym函数 sym函数用来建立单个符号量,一般调用格式为: 符号变量名=sym(' 符号字符串 ') 该函数可以建立一个符号量,符号字符串可以是常量,变量,函数或表达式.应用 sym 函数还可 以定义符号常量. (2).syms函数 函数 sym一次只能定义一个符号变量,使用不方便.MATLAB提供了另一个函数 syms,一次可 以定义多个符号变量.一般调用格式为:...

符号函数即相关运算
符号函数即相关运算 一、MATLAB提供了两个建立符号对象的函数,sym和 syms,现分别介绍两个函数用法如下: (1)..sym函数 sym函数用来建立单个符号量,一般调用 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 为: 符号变量名=sym(' 符号字符串 ') 该函数可以建立一个符号量,符号字符串可以是常量,变量,函数或 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式.应用 sym 函数还可 以定义符号常量. (2).syms函数 函数 sym一次只能定义一个符号变量,使用不方便.MATLAB提供了另一个函数 syms,一次可 以定义多个符号变量.一般调用格式为: Syms 符号变量名 1 符号变量名 2 ........ 符号变量名 n 用这种格式定义符号变量时不要在变量名上加定界符('),变量间用空格,不要用逗号分隔. 含有符号对象的表达式称为符号表达式,其建立方法有以下 3种: A.利用单引号生成符号表达式; B.用 sym函数建立符号表达式; C.使用已经定义的符号变量组成符号表达式. 例 1.符号表达式创建实例. U=sym('3*x^2+5*y+2*x*y+6') %定义符号表达式:3*x^2+5*y+2*x*y+6 Syms x y; %定义符号变量 x,y V=3*x^2+5*y+2*x*y+6 %定义符号表达式 V: V=3*x^2+5*y+2*x*y+6 2*U-V+6 %求符号表达式值,结果为 12253 2 +++ xyyx (3).符号矩阵 符号矩阵也是一种符号表达式,函数作用于符号矩阵时,是分别作用于矩阵的每一个元素.可 以通过 sym函数创立符号矩阵,矩阵的任何元素可以是任何不带等号的表达式,各符号表达式 的长度可以不同,矩阵元素之间可以用空格,也可以用逗号分隔. 例如:在命令窗口中输入 A=sym('[a ,2*b;3*a ,0]'),就完成了矩阵 A= 的创建. ⎥⎦ ⎤⎢⎣ ⎡ 03 2 a ba 注意:符号矩阵的每一行两端都有方括号,这与Matlab数值矩阵有区别. 在 MATLAB 中数值矩阵不能直接参与符号运算,如果要与符号矩阵运算,必须先将数值矩阵 转为符号矩阵. A.将数值矩阵转化为符号矩阵函数调用格式为: sym(数值矩阵); B.将符号矩阵转化为数值矩阵: numeric(符号矩阵) 由于符号矩阵是矩阵,所以也能进行有关矩阵的运算.MATLAB 还有专门的符号矩阵函数,这 些函数作用于单个数据无意义. Determ(s) 返回 s的行列式的值 Factor(s) 对 s进行因式分解 Expand(s) 对 s进行展开 Collect(s) 对 s合并同类项 Collect(s,v) 对 s按变量 v合并同类项 Simplify(s) 应用函数规则对 s进行化简 Simple(s) 调用 matlab 的其他函数对表达式进行综合化 简,并显示化简过程 limit 求极限函数符号函数 Diff(f,x,n) 求微分最常用的符号函数(表示 f关于 x求 n阶 导数) Int(f,r,x0,x1) 求积分最常用的符号函数(f 为积分表达式,r 为 积分变量,若为定积分,x0和 x1为积分上下限) Symsum(fk,k,k0,kn) 级数求和的符号函数(fk 为级数通项,k 为级数 自变量,k0 和 kn 为级数的初项和末项,可设为 inf) dsolve 求常微分方程的符号函数 fsolve 求解非线性方程组 例 1:极限和极值的符号运算实例。求极限 ] )1( 1 ln 1[limf 2211 −−= +→ xxxx 和求和 . ])1(f 50 0n 23 2 ∑ = −+= naan 解: 输入 matlab如下程序代码: syms x a n %定义符号变量 a和 x y=1/(x*(log(x)^2))-1/(x-1)^2; f1=limit(y,x,1,'right') %求极限 f=a*n^3+(a-1)*n^2 f2=symsum(f,n,0,50) %求级数的和 运行结果 f1=1/12 f2=1668550*a-42925 例 2:微分的符号运算实例.(1)求已知表达式: )sin(f ax= ,分别对其中的 x和 a求导;(2)已 知表达式 )1log(f xx += ,求对 x的积分和 x在(0,1)上的积分值. 解:输入如下 matlab程序代码: syms a x %定义符号变量 a和 x f=sin(a*x) %创建函数 f dfx=diff(f,x) %对 x求导 dfa=diff(f,a) %对 a求导 f1=x*log(1+x) %创建函数 f1 Int1=int(f1,x) %对 f1的 x积分 Int2=int(f1,x,0,1) %对 f1在[0,1]上积分 运行结果: f =sin(a*x) dfx =cos(a*x)*a dfa =cos(a*x)*x f1 =x*log(1+x) Int1 =1/2*(1+x)^2*log(1+x)+3/4+1/2*x-1/4*x^2-(1+x)*log(1+x) Int2 =1/4 例 3:常微分方程符号运算实例.(1)计算常微分方程 23dy xxexydx −=+ 的通解;(2)计算 微分方程 在初始条件02xy =−+ xey ex 2y 1 == 下的特解;(3)求 的 通解. 02y ''' =++ xey 解:输入如下 matlab程序代码: f1=dsolve('Dy+3*x*y=x*exp(-x^2)','x') f2=dsolve('x*Dy+2*y-exp(x)=0','y(1)=2*exp(1)','x') f3=dsolve('D2y+2*Dy+exp(x)=0','x') 运行结果: f1 =exp(-x^2)+exp(-3/2*x^2)*C1 f2 =(exp(x)*x-exp(x)+2*exp(1))/x^2 f3 =-1/3*exp(x)-1/2*exp(-2*x)*C1+C2 可知 ,(1)的通解为 1 2 3 *ey 2 2 ce xx += − ,其中 C1 为任意常数 ;(2)的通解为 2 2y x eexe xx +−= ;(3)的通解为 212 *2 1 3 1y CCee xx +−= − ,其中 C1,C2为任意常数. 偏导数和梯度 函数的偏导数定义如下: x yxfyxxfyxf x x Δ −Δ+=∂ ∂ →Δ ),(),(lim),( 0 全微分可借助梯度(Gradient)定义为: ⎥⎦ ⎤⎢⎣ ⎡∇=∂ ∂+∂ ∂= dy dx fdy y fdx x fyxdf ),( 梯度:基本语法: [FX,FY]=gradient(F,h) 求二元函数的梯度 [FX,FY,FZ,…] = gradient(F,h1, h2, …) 【例 5.3.3】 对函数作梯度图 v = -2:0.2:2; [x,y] = meshgrid(v); z = x .* exp(-x.^2 - y.^2); subplot(1,2,1);surf(x,y,z), subplot(1,2,2); [px,py] = gradient(z,.2,.2); contour(x,y,z), hold on, quiver(x,y,px,py) 方向法线的绘图命令:基本语法为: quiver3(Z,U,V,W) quiver3(X,Y,Z,U,V,W) quiver3(...,scale) quiver3(...,LineSpec) 这里:X,Y,Z: 为曲线上的点。 U,V,W: 为每一点上切面的法线方向。 scale: 为实数值,可正可负。表示方向箭头的指向。 【例 5.3.4】求函数的曲面图,且作出每点的切面法向量图形。 [X,Y] = meshgrid(-2:0.25:2,-1:0.2:1); % 产生网格点 Z = X.* exp(-X.^2 - Y.^2); % 计算每个网格点的函数值 [U,V,W] = surfnorm(X,Y,Z); % 计算每个点的法向量分量 quiver3(X,Y,Z,U,V,W,0.5); % 作法向量的图形 hold on surf(X,Y,Z);colormap hsv view(-35,45) axis ([-2 2 -1 1 -.6 .6]) 【例 5.3.5】综合应用。我们来作一个旋转抛物面上某点的切面和该切面的法线。这里用到 了作方向法线的命令。 x=0:0.1:1;y=sqrt(2*x); % 旋转曲面的“母线” [X,Y,Z]=cylinder(y,20); % 形成旋转曲面 [U,V,W] = surfnorm(X,Y,Z); Z1=Z(4)-(U(4)*(X-X(4))+V(4)*(Y-Y(4)))/W(4) % 求点 X(4),Y(4),Z(4)的切平面 surf(X,Y,Z); % 在曲面上画法线 hold on;surf(X,Y,Z1);hold on %在上面点处画切平面 plot3(X(4),Y(4),Z(4),'r.','MarkerSize',30) % 将该点突出放大并用红色表示 U(1:3)=NaN;U(5:end)=NaN hold on;quiver3(X,Y,Z,U,V,W,-4) % 作该点处的法线,长度为 4,反方向 axis equal % 该命令是必须的,使得视觉正确 5.3.3 数值积分 对于形如的积分 积分的一般命令为: q = quad(fun,a,b) q = quad(fun,a,b,tol) q = quad(fun,a,b,tol,trace) q = quad(fun,a,b,tol,trace,p1,p2,...) [q,fcnt] = quadl(fun,a,b,...) 其中 fun表示被积函数,系数 a,b为积分的上下限,tol为用户给定的误差限,如不给出则 系统内定的值为 0.0000001。 【例 5.3.6】以下是一个比较著名的例子,计算积分 ∫ − + 1 1 2251 1 dx x Q = quad('1./(1+25*x.^2)',-1,1) ans = 0.5494 也可以使用内联函数定义被积函数 F = inline('1./(1+25*x.^2)'); % 定义一个内联函数 Q = quad(F,-1,1); ans = 0.5494 【例 5.3.7】对空间曲线求积分,设空间曲线的参数方程为: t = 0:pi/50:10*pi; x = t.*sin(t), y = t.*cos(t), z=t; plot3(t.*sin(t),t.*cos(t),t,'LineWidth',2) f = inline('sqrt(4*(t.*sin(t)).^2 + (t.*cos(t)).^2 … + 1)'); len = quad(f,0,pi) 计算结果为: len = 8.5191 5.3.4 二重积分 二重积分的原理与一重积分一样,使用也很方便。其语法为: q = dblquad(fun,xmin,xmax,ymin,ymax) q = dblquad(fun,xmin,xmax,ymin,ymax,tol) q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method) ∫ ∫− − +−11 11 )( 22 dxe yx【例 3.3.8】求积分 q=dblquad('exp(-x.^2.-y^2)',-1,1,-1,1) q = 2.2310 求一元函数的 0点命令 fzero 其基本语法为: x = fzero(fun,x0) x = fzero(fun,x0,options) x = fzero(fun,x0,options,P1,P2,...) [x,fval] = fzero(...) [x,fval,exitflag] = fzero(...) [x,fval,exitflag,output] = fzero(...) 这里 fun: 被求解的函数,可用 inline或字符串定义 x0: 为初初始值,可以是一个数,也可以是一个区间 fval: 目标函数值 options:输出显示项,可选择 display: 'off' : 没有输出 'iter': 将每一步的迭代结果都输出来 'notify': 只有当迭代不收敛时才输出警告信息(系统内定值) TolX: 迭代终止精度。 【例 5.4.2】在[1,2]范围 sinx^2的根并显示详细迭代步骤。 options=optimset('Display','iter') x = fzero('sin(x*x)',[1 2],options) 结果为: Func-count x f(x) Procedure 1 1 0.841471 initial 2 2 -0.756802 initial 3 1.52649 0.725271 interpolation 4 1.75821 0.0502804 interpolation 5 1.77439 -0.00687537 interpolation 6 1.77245 3.0226e-005 interpolation 7 1.77245 1.62826e-008 interpolation 8 1.77245 -1.2098e-015 interpolation 9 1.77245 1.89882e-015 interpolation Zero found in the interval: [1, 2]. x = 1.7725 对于任意 f(x) 可能有 0点,可能没有,可能有多个 0点,甚至可能有无穷的 0点。因此找 不到一个通解,我们可以通过人机对话,将函数显示在屏幕上,在可能的点上用鼠标采样得 到 5.4.2 求多元非线性方程组的根 求多元非线性方程组的根,算法较为复杂,我们可以利用 fsolve命令来求解,其命令语法为: x = fsolve(fun,x0) x = fsolve(fun,x0,options) x = fsolve(fun,x0,options,P1,P2, ... ) [x,fval] = fsolve(...) [x,fval,exitflag] = fsolve(...) [x,fval,exitflag,output] = fsolve(...) [x,fval,exitflag,output,jacobian] = fsolve(...) 这里 fun:多元非线性方程组 x0: 一向量,初始值 fval: 目标函数值 output: 输出内容控制 iterations:迭代次数输出 初始点,然后让计算机根据这些点自动分别地求出每一个根。 funcCount: 计算函数值 algorithm: 算法使用 cgiterations: PCG迭代次数(仅对大型问题) stepsize:: 最终步长的选择(仅对中型问题)firstorderopt options: 输出显示项,可选择 Diagnostics: 输出诊断信息 display: 'off' : 没有输出 'iter': 将每一步的迭代结果都输出来 'notify': 只有当迭代不收敛时才输出警告信息(系统内定值) Jacobian: 雅克比方法 'on' : 精确雅克比方法 'off': 近似雅克比方法 MaxFunEvals:函数的最大上限 MaxIter: 最大迭代次数 TolFun: 终止容忍函数值 TolX: 终止迭代容忍度 exitflag: 退出条件 > 0 表示函数收敛到某解,正常退出 达到最大给定迭代次数,退出 < 0 求解过程不收敛 【例 5.4.4】求解二元函数方程组 ( )⎩⎨ ⎧ =−+−= =−−= − − 02, 02),( 2 1 212 211 x x exxyxf exxyxf 在[-5,-5]为初始值的零点。 F = '[2*x(1) - x(2) - exp(-x(1)), -x(1) + 2*x(2) - exp(-x(2))]'; x0 = [-5; -5]; % 初始值 options=optimset('Display','iter'); % 为 Option 设置值 [x,fval] = fsolve(F,x0,options) % 求零点 x = 0.5671 0.5671 fval = 1.0e-008 * -0.5319 -0.5319 注: 已知函数表达式, 想输入参数后得到结果, 可以可以使用匿名函数的方法得到, 现举例 如下: 函数名=@(参数表列) 表达式 例如: 已知表达式 y=sin x+cos y ,x=pi/4 ,y=pi/5 ,要求计算此时的 y值. >> f=@( x,y) sin(x)+cos(y) f = @(x,y)sin(x)+cos(y) >> f(pi/4,pi/5) ans = 1.516 solve 函数主要是用来求解线性方程组的解析解或者精确解。对于得出的结果是符号变 量,可以通过 vpa()得出任意位数的数值解! 语法定义主要有以下四种: solve(eq) solve(eq, var) solve(eq1, eq2, …, eqn) g = solve(eq1, eq2, …, eqn, var1, var2, …, varn) eq代表方程,var代表的是变量。 例 1: syms a b c x; solve(‘a*x^2 + b*x + c’) 当没有指定变量的时候 matlab默认求解的是关于 x的一元二次方程的解,求解的结果为: ans = -(b + (b^2 – 4*a*c)^(1/2))/(2*a) -(b – (b^2 – 4*a*c)^(1/2))/(2*a) 当指定变量为 b的时候: syms a b c x; solve(‘a*x^2 + b*x + c’,'b’) 求解的结果为: ans = -(a*x^2 + c)/x 从上面的例子很容易理解语法 1,2。 例 2:对于方程组的情况 syms x; S = solve(‘x + y = 1′,’x – 11*y = 5′); S = [S.x S.y] 求解的结果为: S = [ 4/3, -1/3] 例 3: syms a u v; A = solve(‘a*u^2 + v^2′, ‘u – v = 1′, ‘a^2 – 5*a + 6′) 的求解结果为 A = a: [4x1 sym] u: [4x1 sym] v: [4x1 sym] 对于查看具体的数值可以通过 Aa = A.a Au = A.u Av = A.v 命令来查看。 PS:对于 solve求解的方程,默认的为 eq=0,eq1=0,eq2=0….eqn=0 SUBS函数的调用: ),,( newoldfsuby = 用(new)新变量替换 中的(old)旧变量后得到f y ),( newfsuby = y 用(new)新变量替换 中由 返回的变量 得到 f )1,( ffindsym 常用的实例: 用)6/,,( pixfsuby = 6 π 替换 中的 old后得到f y。 })3,2,6/{},,,{,( pibaxfsuby = 分别用 6 π ,2,3替换 中的 x,a,b后赋给 y. f
本文档为【符号函数即相关运算】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_095189
暂无简介~
格式:pdf
大小:208KB
软件:PDF阅读器
页数:11
分类:理学
上传时间:2012-08-26
浏览量:102