Matlab符号对象、符号变量及符号表达式介绍
时间:2021-11-19 05:28:00
看到文章的名字,大概很多人都没懂意义,假如叫它的另一个名字:代数运算,或者你就懂了;与失常的数值计较对数值处置有点不一样,标记运算处置的是标记;标记除了能够代表数之外,还能够代表多项式、函数、数学布局等等,MATLAB的标记数学工具箱(Symbolic Math Toolbox简称sym)拥有厚实的内容,工具箱中标记表达式的计较都是在Maple内核下运转。Maple是一款数学软件,详细我也没懂得过,横竖标记运算性能很强就对了,本篇将对标记工具、标记变量以及标记表达式举行一些应用先容,下一篇再对标记矩阵、标记微积分、标记积分变更以及标记方程求解举行记载。
注:应用的是MATLAB R2019B的版本
建立标记工具
建立标记工具
标记工具在MATLAB中的应用也很好懂得,间接应用sym或许syms函数天生其相干的变量或表达式,花样以下:
S=sym(x)S=syms var1,var2,var3...%var代表变量名
S便是天生的标记工具,x代表字符、字符串、表达式等等,假如x代表的是一个数,则S为该数的一个标记暗示;假如x是字符串,则S为一个标记变量或许标记表达式,以下示例:
s1=sqrt(2)%对数值2举行开方运算s2=sym(sqrt(2))%将根号2转为字符表达式即“根号2”s22=double(s2)%将对应的标记工具s2转为对应的运算效果
sym(2)/sym(5)+sym(1)/sym(2)
ans = 9/10
注:旧版本(测试了下r2016a)就没有str2sym这个函数了间接应用sym就能。
x=sym('x')y=sym(str2sym('hello_world'))z=sym(str2sym('(1+sqrt(3))/2'))s=sym(str2sym('a*x^2+b*x+c'))
syms函数用于建立标记变量而后再将天生标记变量使用在标记表达式上,这个就不需求再像方才那样举行字符串的转化了,举例:
syms a b c x f=a*x^2+b*x+c f-a举行标记表达式的运算
以上首要先容标记变量标记表达式建立,接下来标记方程举行建立起首晓得,方程和表达式差别就在于表达式是由数字和变量构成的代数式,方程则在此基础上多了个等式以是建立体式格局天生标记表达式近似:
s=sym(str2sym('a*x^2+b*x+c=0'))
既然创建了标记工具,当然需求拿来使用了详细能够怎样如下举行先容。 symvar用于当初表达式追寻所有的自变量或许指定数目自力自变量花样以下:
-
-
至于为何默许追寻邻近标记变量,就不清晰另有要知道一点假如找到两个标记变量间隔沟通,就ASCII码者大的优先,i、j、pi不做标记变量简略的示例演示:
-
-
-
-
-
-
-
digts和vpa函数用于操纵标记运算的精度。
digts(n)代表标记计较的精度设置成n,即小数位数假如没有配置这个应用默认值32;
vpa即"variable precision arithmetic应用要领:fv=vpa根据digits指定的精度举行计较而后将值赋给fv能够fv=vpa(f,n),即在n位精度失掉计较效果,并赋值给fv。
-
-
-
-
digits(10)f1=vpa(sin(sym('pi')/6))f2=vpa(pi)f3=vpa(str2sym('(1+sqrt(3))/2'))
四则运算
这个就和一般的算术表达式同样,加减乘除间接举例效果:
-
-
-
-
-
syms x y a b f1=sin(x)+cos(y)f2=a+b f3=f1*f2 f3=f1/f2
多项式操纵
先看下几种标记多项式相干的函数及其应用花样:
-
-
-
-
-
因式分化 多项式睁开
看完花样间接如下的各个举例操纵:
-
-
-
因式分化f=sym(str2sym('x^3-1')) 因式分化效果:(x-1)*(x^2+x+1)
-
-
-
-
-
-
%多项式睁开syms x y f=(x+1)^5 expand(f)f=cos(x+y)expand(f)
-
-
-
-
-
-
syms x y f=(exp(x)+x)*(x+2)*(y+1)c1=collect(f)c2=collect(f,y)c3=collect(f,exp(x))
-
-
-
f=sym(str2sym('x^3-5*x^2+6*x-7'))horner(f)
[n,d]=numden(s)
举例:
-
-
-
syms x y f=x/y+y/x [n,d]=numden(f)
多项式基础操纵就到这,接下来先容标记表达式的化简咱们懂得的表达式化简一个意义
化简有两个函数,simplify和simple(注:R2015a的版本把这个函数移掉了),simplify应用的是Maple的化简划定规矩标记表达式举行化简,会用到少量的代数恒等式和函数恒等式比方乞降、开方、整数幂、三角函数、指数函数、对数函数多少漫衍、伽马函数等等力图失掉效果。 举例:
-
-
-
-
f=sym(str2sym('sin(x)^2+cos(x)^2'));%三角公式s=sym(str2sym('exp(c*log(sqrt(a+b)))')); f1=simplify(f)s1=simplify(s)
simple函数能够应用分歧的化简要领而后应用要领与化简效果一路输入假如没有指定进项,就会将所有使用到的化简要领和化简效果输入。
-
[ ]=simple(s)%r为化简效果,how应用的化简要领标记表达式
MATLAB标记工具箱供应了两个替代函数,subs和subexpr;
subs替代替代标记变量都可以本人指定如下的三种挪用体式格局
-
-
-
subs(s,old,new)subs(s,new)subs(s)
举例:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
%exam1syms a b e1a=subs(a+b替代ae1b=subs(cos(a)+sin(b),{a,b},{sym('alpha'),2})%多重替代,将alpha分手替代a和b%exam2f=sym(str2sym('x^2+3*x+1建立标记暗示e2=subs(f,'x',2)%将表达式中的x替换为2,即求解x=2时,f的值%exam3syms x y e3=symvar输出old的变量默许替代标记表达式中的‘x’%exam4syms x y=x^2; x=2;%将x的值设为2e4a=y%依旧是标记表达式x^2e4b=subs应用暗示y
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
%exam1e1a = b + 3 e1b = sin(2) + cos(alpha) %exam2f = x^2 + 3*x + 1 e2 = 11 %exam3e3 = x %exam4e4a = x^2 e4b = 4
subexpr:这个标记表达式中重复涌现的字符串标记变量替代,未指定标记变量应用默许的变量,从而简化标记表达式应用花样有这么如下三种:
-
-
-
[ ] = subexpr(expr)['var') ] = subexpr(expr,[var) ] = subexpr(expr,
r是简化后的表达式;
sigma和vari都是代表重复的字符串便是被替换掉谁人字符串,而写成这两个花样,是为了区别是不是指定变更标记变量,若无默许以sigma这个变量对表达式举行简化如有指定的就按指定举行简化了能够看下面的举例;
expr代表含有重复字符串标记表达式,var和‘var实际上是等效无非条件是var必需要有界说或存在于事情变量是以‘var’就相当于var界说应用步调。
举例:
-
-
-
-
syms a b c x solutions = solve(a*x^2 + b*x + c == 0, x)%求解二次方程[ ] = subexpr(solutions)['var') ] = subexpr(solutions,
从上面的效果能够清晰的看出,简化后的表达式方式以及替代的重复字符串哪一个假如遇到庞杂的一串表达式时间,用用简化不是很香吗?
反函数求解
反函数懂得简略许多间接应用花样:finverse(f,var),f代表自变量是var标记函数,var若没写前往的反函数自变量和原函数自变量沟通如下简略举例:
-
-
-
-
syms x y f=tan(x)+tan(y); f1=finverse(f)%未指定反函数自变量f2=finverse(f,y)%指定反函数自变量为y
复合函数
-
-
-
-
compose前往f=f(x)和g=g(y)的复合函数f(g(y)),自变量为ycompose(f,g,z=f(x)和g=g(y)的复合函数f(g(z)),自变量为zcompose(f,g,x,z=f(x)和g=g(y)的复合函数f(g(y)),x为函数自力变量,自变量为zcompose(f,g,x,y,z=f(x)和g=g(y)的复合函数f(g(z)),自变量为x和y分别为自力变量,自变量为z
-
-
-
-
-
-
-
-
-
-
-
-
syms x y z u t f=1/(1+x^2)g=sin(y)h=x^u s=exp(-y/t)e1=compose(f,g)e2=compose(h,g,z)e3=compose(h,g,u,z)e4=compose(h,s,x,y,z)e5=compose(h,s,u,t,z)
本次记载到此完结大概由于版本题目,会有一些敕令不兼容,这些就需要或许谷歌之类的来给你们解决了
至于为何默许追寻邻近标记变量,就不清晰另有要知道一点假如找到两个标记变量间隔沟通,就ASCII码者大的优先,i、j、pi不做标记变量简略的示例演示:
digts和vpa函数用于操纵标记运算的精度。
digts(n)代表标记计较的精度设置成n,即小数位数假如没有配置这个应用默认值32;
vpa即"variable precision arithmetic应用要领:fv=vpa根据digits指定的精度举行计较而后将值赋给fv能够fv=vpa(f,n),即在n位精度失掉计较效果,并赋值给fv。
digits(10)f1=vpa(sin(sym('pi')/6))f2=vpa(pi)f3=vpa(str2sym('(1+sqrt(3))/2'))
四则运算
这个就和一般的算术表达式同样,加减乘除间接举例效果:
syms x y a b f1=sin(x)+cos(y)f2=a+b f3=f1*f2 f3=f1/f2
多项式操纵
先看下几种标记多项式相干的函数及其应用花样:
因式分化 多项式睁开
看完花样间接如下的各个举例操纵:
因式分化f=sym(str2sym('x^3-1')) 因式分化效果:(x-1)*(x^2+x+1)
%多项式睁开syms x y f=(x+1)^5 expand(f)f=cos(x+y)expand(f)
syms x y f=(exp(x)+x)*(x+2)*(y+1)c1=collect(f)c2=collect(f,y)c3=collect(f,exp(x))
f=sym(str2sym('x^3-5*x^2+6*x-7'))horner(f)
[n,d]=numden(s)
举例:
syms x y f=x/y+y/x [n,d]=numden(f)
多项式基础操纵就到这,接下来先容标记表达式的化简咱们懂得的表达式化简一个意义
化简有两个函数,simplify和simple(注:R2015a的版本把这个函数移掉了),simplify应用的是Maple的化简划定规矩标记表达式举行化简,会用到少量的代数恒等式和函数恒等式比方乞降、开方、整数幂、三角函数、指数函数、对数函数多少漫衍、伽马函数等等力图失掉效果。 举例:
-
-
-
-
f=sym(str2sym('sin(x)^2+cos(x)^2'));%三角公式s=sym(str2sym('exp(c*log(sqrt(a+b)))')); f1=simplify(f)s1=simplify(s)
simple函数能够应用分歧的化简要领而后应用要领与化简效果一路输入假如没有指定进项,就会将所有使用到的化简要领和化简效果输入。
-
[ ]=simple(s)%r为化简效果,how应用的化简要领标记表达式
MATLAB标记工具箱供应了两个替代函数,subs和subexpr;
subs替代替代标记变量都可以本人指定如下的三种挪用体式格局
-
-
-
subs(s,old,new)subs(s,new)subs(s)
举例:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
%exam1syms a b e1a=subs(a+b替代ae1b=subs(cos(a)+sin(b),{a,b},{sym('alpha'),2})%多重替代,将alpha分手替代a和b%exam2f=sym(str2sym('x^2+3*x+1建立标记暗示e2=subs(f,'x',2)%将表达式中的x替换为2,即求解x=2时,f的值%exam3syms x y e3=symvar输出old的变量默许替代标记表达式中的‘x’%exam4syms x y=x^2; x=2;%将x的值设为2e4a=y%依旧是标记表达式x^2e4b=subs应用暗示y
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
%exam1e1a = b + 3 e1b = sin(2) + cos(alpha) %exam2f = x^2 + 3*x + 1 e2 = 11 %exam3e3 = x %exam4e4a = x^2 e4b = 4
subexpr:这个标记表达式中重复涌现的字符串标记变量替代,未指定标记变量应用默许的变量,从而简化标记表达式应用花样有这么如下三种:
-
-
-
[ ] = subexpr(expr)['var') ] = subexpr(expr,[var) ] = subexpr(expr,
r是简化后的表达式;
sigma和vari都是代表重复的字符串便是被替换掉谁人字符串,而写成这两个花样,是为了区别是不是指定变更标记变量,若无默许以sigma这个变量对表达式举行简化如有指定的就按指定举行简化了能够看下面的举例;
expr代表含有重复字符串标记表达式,var和‘var实际上是等效无非条件是var必需要有界说或存在于事情变量是以‘var’就相当于var界说应用步调。
举例:
-
-
-
-
syms a b c x solutions = solve(a*x^2 + b*x + c == 0, x)%求解二次方程[ ] = subexpr(solutions)['var') ] = subexpr(solutions,
从上面的效果能够清晰的看出,简化后的表达式方式以及替代的重复字符串哪一个假如遇到庞杂的一串表达式时间,用用简化不是很香吗?
反函数求解
反函数懂得简略许多间接应用花样:finverse(f,var),f代表自变量是var标记函数,var若没写前往的反函数自变量和原函数自变量沟通如下简略举例:
-
-
-
-
syms x y f=tan(x)+tan(y); f1=finverse(f)%未指定反函数自变量f2=finverse(f,y)%指定反函数自变量为y
复合函数
compose前往f=f(x)和g=g(y)的复合函数f(g(y)),自变量为ycompose(f,g,z=f(x)和g=g(y)的复合函数f(g(z)),自变量为zcompose(f,g,x,z=f(x)和g=g(y)的复合函数f(g(y)),x为函数自力变量,自变量为zcompose(f,g,x,y,z=f(x)和g=g(y)的复合函数f(g(z)),自变量为x和y分别为自力变量,自变量为z
syms x y z u t f=1/(1+x^2)g=sin(y)h=x^u s=exp(-y/t)e1=compose(f,g)e2=compose(h,g,z)e3=compose(h,g,u,z)e4=compose(h,s,x,y,z)e5=compose(h,s,u,t,z)
本次记载到此完结大概由于版本题目,会有一些敕令不兼容,这些就需要或许谷歌之类的来给你们解决了