MATLAB基础(三)符号运算

                                                                  符号对象的建立

 符号对象的建立:sym syms

sym 函数用来建立单个符号变量,一般调用格式为:符号变量 = sym(A) 参数 A 可以是一个数或数值矩阵,也可以是字符串

例如:a=sym('a')    a 是符号变量

b=sym(1/3)          b 是符号常量

C=sym('[1 ab; c d]')             C 是符号矩阵

syms 命令用来建立多个符号变量,一般调用格式为:

syms 符号变量1 符号变量2 ... 符号变量n

syms a b c;  等价  

>> a=sym('a');

>> b=sym('b');

>> c=sym('c');

建立符号表达式通常有以下2种方法:

(1)sym 函数直接建立符号表达式。
(2) 使用已经定义的符号变量组成符号表达式。

例如:  y=sym('sin(x)+cos(x)')

>> x=sym('x');

>>  y=sin(x)+cos(x)

 

>> syms x;

>>  y=sin(x)+cos(x)

                                                                              符号表达式的替换

 用给定的数据替换符号表达式中的指定的符号变量

 subs(f,x,a)

a 替换字符函数 f  中的字符变量  x
 a 是可以是 /数值变量/表达式字符变量/表达式   

x 是一个由多个字符变量组成的数组或矩阵

a 应该具有与 x 相同的形状的数组或矩阵

>> f=sym('2*u');

>> subs(f,'u',2)

>> f2=subs(f,'u','u+2')

>> a=3;

>> subs(f2,'u',a+2)

>> subs(f2,'u','a+2')

>> syms x y

>> f3=subs(f,'u',x+y)

>> subs(f3,[x,y],[1,2])

                                                                                        符号矩阵

 使用 sym 函数直接生成

>> 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) % 引用

                                                                                因式分解

factor() 也可用于正整数的分解

>> factor(sym('12345678901234567890'))     l 大整数的分解要转化成符号常量

                                                                               函数展开

expand(f)

l多项式展开

>> syms x; f=(x+1)^6;

>> expand(f)

 三角函数展开

>> syms x y; f=sin(x+y);

>> expand(f)

                                                                                 合并同类项

collect(f,v): 按指定变量 v 进行合并

collect(f): 默认变量进行合并

syms x y;

>> f= x^2*y + y*x - x^2 + 2*x ;

>> collect(f)

>> collect(f,y)

                                                                                 函数简化

y=simple(f):    f  尝试多种不同的算法进行简化,返回其中最简短的形式

[How,y]=simple(f):   y f 的最简短形式,How 中记录的为简化过程中使用的方法。

f

R

HOW

2*cos(x)^2-sin(x)^2

3*cos(x)^2-1

simplify

(x+1)*x*(x-1)

x^3-x

combine(trig)

x^3+3*x^2+3*x+1

(x+1)^3

factor

cos(3*acos(x))

4*x^3-3*x

expand

y=simplify(f):    f  进行简化

>> syms x; f=sin(x)^2 + cos(x)^2 ;

>> simplify(f)

>> syms c alpha beta;

>> f=exp(c*log(sqrt(alpha+beta)));

>> simplify(f)

例:简化 

>> syms x;

>> f=(1/x^3+6/x^2+12/x+8)^(1/3);

>> y1=simplify(f)

g1=simple(f)

>> g2=simple(g1)

l 多次使用 simple 可以达到最简表达。

                                                                             分式通分

[N,D]=numden(f):   

             N 为通分后的分子,D 为通分后的分母

>> syms x y;

>> f=x/y+y/x;

>> [N,D]=numden(f)

>> [n,d]=numden(sym(112/1024))

                                                                               horner 多项式

 horner 多项式:嵌套形式的多项式

列:MATLAB基础(三)符号运算_第1张图片

>> syms x;

>> f=x^4+2*x^3+4*x^2+x+1;

>> g=horner(f)

                                                                           计算导数

g=diff(f,v)求符号表达式  f 关于 v 的导数

g=diff(f)求符号表达式  f 关于默认变量的导数

g=diff(f,v,n)  f 关于 v n 阶导数

>> syms x;

>> f=sin(x)+3*x^2;

>> g=diff(f,x)

                                                                            计算积分

int(f,v,a,b): 计算定积分 

int(f,a,b): 计算关于默认变量的定积分

int(f,v): 计算不定积分

int(f): 计算关于默认变量的不定积分

例:计算   

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

>> I=int(f,x)

>> K=int(exp(-x^2),x,0,inf)

                                                                            符号求和

symsum(f,v,a,b): 求和  

symsum(f,a,b): 关于默认变量求和
例:计算级数 及其前100项的部分和

>> syms n; f=1/n^2;

>> S=symsum(f,n,1,inf)

>> S100=symsum(f,n,1,100)

                                                                           微分方程求解

dsolve

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

其中 y 为输出的解, eq1eq2. . . 为微分方程,
cond1cond2...为初值条件, v 为自变量

例 1:求微分方程的通解,并验证。

>>  y=dsolve('Dy+2*x*y=x*exp(-x^2)','x')

>> y= C2*exp(-x^2) + (x^2*exp(-x^2))/2

例2:求微分方程满足初值条件
的特解,并画出解函数的图形

>>  y=dsolve('x*Dy+y-exp(x)=0', ...
            '
y(1)=2*exp(1)', 'x')

>> ezplot(y);

 

 

例3:求微分方程组MATLAB基础(三)符号运算_第2张图片 在初值条件 MATLAB基础(三)符号运算_第3张图片

下的特解,并画出解函数的图形。

[x,y]=dsolve('Dx+5*x+y=exp(t)','Dy-x-3*y=0', ...  

             'x(0)=1', 'y(0)=0', 't')

ezplot(x,y,[0,1.3]);

你可能感兴趣的:(MATLAB)