搜索
 找回密码
 立即注册
查看: 503|回复: 0

【冰封MATLAB】笔记二:符号运算

[复制链接]
  • TA的每日心情

    前天 19:36
  • 签到天数: 431 天

    [LV.9]以坛为家II

    115

    主题

    1113

    帖子

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    15299

    荣誉会员学者

    QQ
    发表于 2017-10-4 15:30:46 | 显示全部楼层 |阅读模式
    1.控制符号精度的函数:digits()和vpa()

    使用:>>digits(10);%放到语句前,控制下面数据的精度位数。

    而p=vpa(Q,n)则用于控制Q的输出精度,n代表精度的位置。

    case_01:

    >> digits(15);
    >> p=vpa(pi)

    p =

    3.14159265358979

    case_02:

    >> p=vpa(pi,8);
    >> p

    p =

    3.1415927

    2.符号多项式的分解与展开

    factor(S):对符号多项式S分解因式

    expand(S):对符号多项式S进行展开

    collect(S):对符号多项式S按照默认变量x合并同类项

    collect(S,v):对符号多项式S按变量v合并同类项,注意这个变量v必须是个符号变量。如v='y'。

    horner(f):将一般的符号多项式f转换成嵌套形式

    case_01:

    >> f=sym('a^3-1');
    >> factor(f)

    ans =

    (a - 1)*(a^2 + a + 1)

    case_02:

    >> f=sym('(exp(x)+x)*(x+2)*(y+1)');

    >> collect(f)

    ans =

    (y + 1)*x^2 + ((exp(x) + 2)*(y + 1))*x + 2*exp(x)*(y + 1)

    >> collect(f,'y')  %这里y加了双单引号,是因为前面没有定义x,y为sym。而是直接用sym()来定义的符号函数。因此这里需要用单引号标记y是符号。

    ans =

    ((x + exp(x))*(x + 2))*y + (x + exp(x))*(x + 2)

    >> collect(f,'exp(x)')

    ans =

    ((x + 2)*(y + 1))*exp(x) + x*(x + 2)*(y + 1)

    case_03:

    3.反函数求解

    finverse(f,v):返回自变量v的符号函数f的反函数,若v省略,得到的反函数自变量与原函数相同。

    case_01:

    >> syms x y;
    >> finverse(1/tan(x))

    ans =

    atan(1/x)

    >> f=x^2+y;
    >> finverse(f,y)

    ans =

    - x^2 + y

    >> finverse(f)

    ans =

    (x - y)^(1/2)

    4.符号矩阵的创建

    4.1 sym直接创建

    4.2 以数值矩阵创建方法创建

    4.3 由数值矩阵转换为符号矩阵

    case_01:

    >> A=sym('[a,b;c,d]')

    A =

    [ a, b]
    [ c, d]

    case_02:

    >> B=sym('[x+3*x,5*z+6*z;y-y,z/z]');
    >> B

    B =

    [ 4*x, 11*z]
    [   0,    1]

    5.符号矩阵的运算

    符号矩阵的转置:

    A':如果A是普通矩阵,表示转置,如果A是复数矩阵,则变成其共轭转置。

    A.':不管A是不是复数矩阵,都仅仅是转置,不涉及到共轭。

    6. 符号极限

    limit函数:求符号函数的极限。

    lmint(F,x,a)  计算符号表达式F在x->a的条件下的极限。

    limit(F,a) 计算符号表表达式F中由默认自变量趋向于a条件下的极限。

    limit(F) 计算符号表达式F在默认自变量趋向于0条件下的极限。

    limit(F,x,a,'right') or limit(F,x,a,'left') 计算符号表达式F在x->a条件下的右极限和左极限。

    >> syms x a;
    >> F=1/x;
    >> limit(F,x,0,'right')

    ans =

    Inf

    其中inf表示无穷,前面可加正负号。

    7.符号微分

    diff函数

    diff(S)求解符号表达式S对于默认自变量的微分

    diff(S,'v')求解符号表达式S对于自变量v的微分

    diff(S,n)求解符号表达式S对于默认自变量的n次微分

    diff(S,'v',n)求解符号表达式S对于自变量v的n次微分

    case_01:

    >> S1=sym('6*x^3-4*x^2+b*x-5');
    >> diff(S1)

    ans =

    18*x^2 - 8*x + b

    >> diff(S1,2)

    ans =

    36*x - 8

    8.符号积分

    int函数表示积分

    int(S)求解表达式S对于默认自变量的不定积分

    int(S,'v')求解表达式S对于自变量v的不定积分

    int(S,a,b)求解表达式S对于默认自变量从a到b的定积分

    int(S,'v',a,b)求解符号表达式S中自变量v计算从a到b的定积分

    case_01:

    >> f=-2*x/(1+x^2)^2;
    >> int(f)

    ans =

    1/(x^2 + 1)
    case_02:
    >> f=x/(1+z)^2;
    >> int(f)

    ans =

    x^2/(2*(z + 1)^2)

    >> int(f,z)

    ans =

    -x/(z + 1)

    >> f=x/(1+z^2);
    >> int(f)

    ans =

    x^2/(2*(z^2 + 1))

    >> int(f,z)

    ans =

    x*atan(z)

    9.符号积分变换

    傅里叶变换:

    F=fourier(f)正变换

    f=ifourier(F)逆变换

    调用格式:

    F=fourier(f) 对单值函数f中的缺省变量x求解其Fourier变换,缺省的输出结果F是变量w的函数,若f=f(w),则fourier(f)返回变量为t的函数。

    F=fourier(f,v)指定Fourier变换结果F是变量v的函数,函数f的自变量为x。

    F=fourier(f,u,v)指定函数f为变量u的函数,F为变量v的函数。

    ----

    f=ifourier(F) 函数f=f(x)为函数F(w)的逆Fourier变换,若F=F(x),ifourier(F)返回变量t的函数。
    f=ifourier(F,u),使函数f为变量u(u为标量符号对象)的函数

    f=ifourier(F,v,u) 使F为变量v的函数,f为变量u 的函数。

    拉普拉斯变换

    调用格式与傅里叶一致,函数名为laplace和ilaplace

    L=laplace(F) or (F,t) or (F,w,z)

    F=ilaplace(L) or (L,y) or (L,y,x)

    case_01:

    >> syms x s t v a;
    >> f=exp(-a*t);
    >> L=laplace(f,x)

    L =

    1/(a + x)

    >> f=1-sin(t*v);
    >> L=laplace(f,v,x)

    L =

    1/x - t/(t^2 + x^2)

    10.符号方程求解

    10.1 solve函数(代数方程)

    g=solve(eq),求解代数方程eq=0,自变量为默认的自变量

    g=solve(eq,var),求解代数方程eq=0,自变量为var

    g=solve(eq1,eq2...eqn,var1,var2,...varn) 方程组,g是结构变量

    case_01:

    >> f=sym('a*x^2+b*x+c');
    >> solve(f)

    ans =

    -(b + (b^2 - 4*a*c)^(1/2))/(2*a)
    -(b - (b^2 - 4*a*c)^(1/2))/(2*a)

    >> solve(f,a)
    未定义函数或变量 'a'。

    >> solve(f,'a')

    ans =

    -(c + b*x)/x^2

    10.2 微分符号方程

    dsolve函数

    r=dsolve('eq1,eq2...','cond1,cond2,...','v')

    求解由eq1和eq2等指定的微分方程的符号解参数cond1和cond2等为指定常微分方程的边界条件和初始条件。

    v为指定的自变量。若不指定,将采用t为默认自变量

    微分方程中用D表示依次微分,D2和D3分别表示二次和三次微分,D后的字符为因变量。

    case_01:

    >> g=dsolve('Dy=a*y');
    >> g

    g =

    C2*exp(a*t)

    >> g=dsolve('Dy=a*y','y(0)=b','x');
    >> g

    g =

    b*exp(a*x)

    11.符号无穷级数求和

    无穷级数求和,不能使用sum函数,而需要使用符号求和函数,即symsum()

    调用格式: symsum(a,v,m,n)

    其中,a是一个级数的通项,是一个符号表达式,v是求和变量,m和n分别是求和的开始项和末项number。对于无穷级数来说,末项显然是inf(无穷)

    case_01:

    >> syms n x;
    >> s=symsum((n^3)*x^(n-1),n,1,inf)

    s =

    piecewise([abs(x) < 1, (x^3 + 4*x^2 + x)/(x*(x - 1)^4)])
    % piecewise表示分段函数
    >> syms n x;
    >> s=symsum((n^3)/(5^n),n,1,inf)

    s =

    115/128

    流场,温度场,低温等离子体

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则