当前位置:文档之家› matlab运算函数与命令

matlab运算函数与命令

Matlab符号运算介绍Matlab符号运算是通过符号数学工具箱(Symbolic Math Toolbox)来实现的. Matlab符号运算(二)符号对象的建立:sym 和syms例:>> syms x y z>> x=sym('x');>> y=sym('y');>> z=sym('z');符号对象建立时可以附加属性:real,positive 和unreal>> k=sym('k','positive')>> x=sym('x','real')>> x=sym('x','unreal')表明x 是实的Matlab符号运算(二)表明k 是正的去掉x 的附加属性符号表达式的建立>> f2=sym('sin(x)+cos(x)')>> syms x>> f1=sin(x)+cos(x)>> f3='sin(x)+cos(x)'用这种方法创建的符号表达式对空格很敏感,不要在字符间随意添加空格! Matlab符号运算(二)推荐!符号变量与符号常量>> a=sym('a');>> b=sym('5');>> c=sym(5);b,c有区别吗hint:help sym相关函数findsym: 查找符号表达式中的符号变量findsym(f)按字母顺序列出符号表达式 f 中的所有自由变量findsym(f,N)列出f 中距离x 最近的N 个自由变量(i,j 除外)默认自变量=findsym(f,1)Matlab符号运算(二)>> a=sym('a');x=sym('x');k=sym('3');>> f=k*x+a;>> findsym(f)例:ans=a,x相关函数subs:符号替换Matlab符号运算(二)subs(f): 用当前工作空间中存在的变量值,替换f中所有出现的相同的变量,并进行简化计算. subs(f,x,a):用a 替换f 中的x ;a 是可以是数/数值变量/表达式或符号变量/表达式.若x与a为相同大小的向量或矩阵,则用a中相应的元素替换x中的元素;若f,x为标量,而a是向量或矩阵,则f与x将扩展为与a相同形状的向量或矩阵.例:>> syms x y>> f=2*x+y;>> x=3,y=4;>> subs(f)>> subs(f,x,'a')Matlab符号运算(二)>> syms x y a b>> f=2*x+y;>> subs(f,[x,y],[3,4])>> subs(f,{x,y},{3,4})>> subs(f,x,[1:3])>> subs(f,{x,y},{[1:3],[5:7]})>> subs(f,{x,y},{a+b,a-b})>> subs(f,{x,y},{x+y,x-y})ans=10ans=2*x+yans=10ans=[2+y,4+y,6+y]ans=[7 10 13]ans=3*a+b符号矩阵使用sym函数直接生成Matlab符号运算(二)>> A=sym('[1+x, sin(x); 5, exp(x)]')将数值矩阵转化成符号矩阵>> B=[2/3, sqrt(2); 5.2, log(3)]>> C=sym(B)符号矩阵中元素的引用和修改>> A=sym('[1+x, sin(x); 5, exp(x)]')>> A(1,2)>> A(2,2)=sym('cos(x)')能否用sym('B')符号矩阵的基本运算符号矩阵的基本运算与数值矩阵的基本运算相类似.1) 基本运算符:+,-,*,\,/,^,.*,.\,./,.^,' ,.'2) 三角函数与反三角函数:sin,cos,tan,… …3) 指数,对数函数:sqrt,exp,log,… …4) 复数函数:real,imag,conj, abs5) 矩阵函数:det,inv,rank, … … (没有norm)Matlab符号运算(二)6) 矩阵元素的抽取:diag,tril,triu六大常见符号运算因式分解,展开,合并,简化及通分等Matlab符号运算(二)因式分解:factor>> syms x>> f=x^6 +1>> s=factor(f)s =(1+x^2)*(x^4-x^2+1)factor 也可用于正整数的分解大整数的分解Matlab符号运算(二)展开函数: expand多项式展开Matlab符号运算(二)三角函数展开该函数经常用于多项式展开,也常用于三角函数,指数函数和对数函数的展开中. 合并同类项: collectcollect(f,v): 按指定变量v 的次数合并系数;collect(f): 合并f 中的默认自变量的各项系数.Matlab符号运算(二)findsym(f,1)简化函数: simple 和simplifysimple(f): 对f 尝试多种不同的算法简化,返回其中最短的简化形式;[R,HOW]=simple(f): R为f的最短简化形式,HOW中记录的为简化过程中使用的主要方法.Matlab符号运算(二)simplify3*cos(x)^2-12*cos(x)^2-sin(x)^2combine(trig)x^3-x(x+1)*x*(x-1)factor(x+1)^3x^3+3*x^2+3*x+1expand4*x^3-3*xcos(3*acos(x))HOWRfsimple函数示例simplify(f): 简化函数Matlab符号运算(二)注:多次使用simple 可以达到最简表达.例:化简Matlab符号运算(二)分式通分: numden[N,D]=numden(f): N为通分后的分子,D为通分后的分母Matlab符号运算(二)horner多项式:嵌套形式的多项式Matlab符号运算(二)例:六大常见符号运算因式分解,展开,合并,简化及通分等Matlab符号运算(二)计算极限limit(f,x,a): 计算limit(f,a): 计算默认自变量趋向于a时f的极限limit(f): 计算a=0 时的极限limit(f,x,a,'right'):右极限limit(f,x,a,'left'):左极限例:求极限>> syms h n x>> L=limit((log(x+h)-log(x))/h,h,0)>> M=limit((1-x/n)^n,n,inf)Matlab符号运算(二)L=1/xM=exp(-x)>> syms x>> L=limit(abs(x)/x,x,0,'left')>> R=limit(abs(x)/x,x,0,'right')L=-1M=1六大常见符号运算因式分解,展开,合并,简化及通分等Matlab符号运算(二)计算极限计算导数diff(f): 计算f 关于默认自变量的导数diff(f,'v'): 计算f 关于变量v 的导数diff(f,n),diff(f,'v',n),diff(f,n,'v'): n次求导例:设y=sin(ax),求>> syms a x>> y=sin(a*x)>> A=diff(y,x)>> B=diff(y,a)>> C=diff(y,x,2)>> D=diff(y,a,2)Matlab符号运算(二)A=cos(a*x)*aB=cos(a*x)*xC=-sin(a*x)*a^2D=-sin(a*x)*x^2六大常见符号运算因式分解,展开,合并,简化及通分等Matlab符号运算(二)计算极限计算导数计算积分int(f,v,a,b):计算定积分int(f,a,b): 计算f 关于默认自变量的定积分int(f,v):计算不定积分int(f):计算f 关于默认自变量的不定积分例:求积分>> syms x>> f=(x^2+1)/(x^2-2*x+2)^2;>> I=int(f)>> g=cos(x)/(sin(x)+cos(x));>> J=int(g,x,0,pi/2)>> h=exp(-x^2);>> K=int(h,x,0,inf)Matlab符号运算(二)I=3/2*atan(x-1)+1/4*(2*x-6)/(x^2-2*x+2)J=1/4*piK=1/2*pi^(1/2)六大常见符号运算因式分解,展开,合并,简化及通分等Matlab符号运算(二)计算极限计算导数计算积分符号求和symsum(f,v,a,b): 求和symsum(f,a,b): 关于默认自变量求和.例:求级数,以及其前10项的部分和.>> syms n>> S=symsum(1/n^2,n,1,inf)>> S10=symsum(1/n^2,n,1,10)Matlab符号运算(二)S=1/6*pi^2S10=1968329/1270080例:求函数级数>> syms n x>> S=symsum(x/n^2,n,1,inf)S=1/6*x*pi^2六大常见符号运算因式分解,展开,合并,简化及通分等Matlab符号运算(二)计算极限计算导数计算积分符号求和解代数方程和微分方程(见实验三,六)其它运算复合函数计算:composeMatlab符号运算(二)compose(f,g): 返回f(g(y)),其中f=f(x),g=g(y),x,y 分别是f 和g 的默认自变量.compose(f,g,z):返回f(g(z)),其中x,y 分别是f,g的默认自变量,最后用符号变量z代替y.compose(f,g,v,z):返回f(g(z)),v为f中指定的自变量, 令v=g(z),代入f=f(v).compose(f,g,v,w,z):返回f(g(z)),其中v,w分别为f,g的指定自变量,即将v=g(w)代入f(v),最后用z代替w. 例:>> syms x y z u t>> f=cos(x/t); y=sin(y/u);>> compose(f,g)>> compose(g,f)>> compose(f,g,z)>> compose(f,g,x,z)>> compose(f,g,t,z)>> compose(f,g,t,y,z)>> compose(f,g,t,u)>> compose(f,g,t,u,z)Matlab符号运算(二)ans=cos(sin(y/u)/t)ans=sin(cos(x/t)/u)ans=cos(sin(z/u)/t)ans=cos(x/sin(z/u))ans=cos(x/sin(y/u))ans=cos(x/sin(y/z))其它运算复合函数计算:composeMatlab符号运算(二)计算反函数:finversefinverse(f): 返回f关于默认自变量的反函数,若f的反函数g存在,则有g(f(x))=x.finverse(f,v): 返回f关于自变量v的反函数g,即g(f(v))=v.例:>> syms x t>> f=x^2+2*t;>> finverse(f)>> finverse(f,y)Matlab符号运算(二)ans=(-2*t+x)^(1/2)ans=-1/2*x^2+1/2*tWarning: finverse(x^2+2*t) is not unique作业:>> syms a b x X Y>> k=sym('3');>> z=sym('c*sqrt(delta)+y*sin(theta)');>> f=a*z*X+(b*x^2+k)*Y;Matlab符号运算(二)1.化简exp(i*x)2.试写出下面命令的结果,上机验证,并说明理由:>> findsym(f)>> findsym(f,1)>> findsym(f,2)>> findsym(f,3)作业:>>syms a b t u v x y;>>A=[a+b*x,sin(t)+u; x*exp(-t),log(y)+v];Matlab符号运算(二)3.设A是一个符号矩阵(定义如下),试指出findsym(A,1) 的输出结果,并由此得出结论: findsym 确定自由变量时,是对整个矩阵进行的,还是对各个矩阵元素分别进行4.(1)设求复合函数f(g(z));(2)设求复合函数f(g(z)).思考:本题除了用compose函数外,是否有其它方法作业:>> a=sym('12345678901234567890');>> b=sym(12345678901234567890);Matlab符号运算(二)5.设a,b定义如下,试上机输出factor(a)和factor(b)的结果,并指出那个结果才是12345678901234567890的因式分解,为什么作业:syms a x;f=a*sin(x)+5;f1=subs(f,'sin(x)',sym('y'))f2=subs(f,{a,x},{2,sym(pi/3)})f3=subs(f,{a,x},{2,pi/3})f4=subs(subs(f,a,2),x,0:pi/6:pi)f5=subs(f,{a,x},{0:6,0:pi/6:pi})Matlab符号运算(二)6.替换函数subs的使用.(1)试指出下面程序中的f1,f2,f3,f4,f5的值.>> syms x y; f=2*x+y;>> subs(f,{x,y},{x+y,x-y})(2)试指出下面替换的结果,并说明理由.。

相关主题