matlab中符号函数如何求最大值的表达式_MATLAB自学笔记(二十):符号表达式与符号函数的操作...

一、符号表达式操作

1.显示

符号表达式显示时默认采用MATLAB的显示,除此之外还提供了显示函数pretty

Python

>> syms a b c d e f g x;

>> f = a*x^3 + b*x^2 + c*x + d + e*x^-1 + f*x^-2 +g*x^-3;

>> pretty(f)

3 2 e f g

d + c x + a x + b x + - + -- + --

x 2 3

x x

1

2

3

4

5

6

7

>>symsabcdefgx;

>>f=a*x^3+b*x^2+c*x+d+e*x^-1+f*x^-2+g*x^-3;

>>pretty(f)

32efg

d+cx+ax+bx+-+--+--

x23

xx

2.合并

R = collect(S):将表达式S中的相同次幂项合并。其中S是一个表达式,也可以是一个符号矩阵

R = collect(S, v):将S中的v次项合并。若v没有指定,则把所有相同次幂项合并

Python

>> sym x;

>> f1 = sym('(x-1)^3');

>> collect(f1)

ans =

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

1

2

3

4

5

6

7

>>symx;

>>f1=sym('(x-1)^3');

>>collect(f1)

ans=

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

Python

>> syms x y t;

>> f2 = x*cos(t) + y*sin(t) + (x^2 + 2*x*y + 3*y^2)*t;

>> collect(f2)

ans =

t*x^2 + (cos(t) + 2*t*y)*x + 3*t*y^2 + sin(t)*y

>> collect(f2,x)

ans =

t*x^2 + (cos(t) + 2*t*y)*x + 3*t*y^2 + sin(t)*y

1

2

3

4

5

6

7

8

9

10

11

12

13

>>symsxyt;

>>f2=x*cos(t)+y*sin(t)+(x^2+2*x*y+3*y^2)*t;

>>collect(f2)

ans=

t*x^2+(cos(t)+2*t*y)*x+3*t*y^2+sin(t)*y

>>collect(f2,x)

ans=

t*x^2+(cos(t)+2*t*y)*x+3*t*y^2+sin(t)*y

3.展开

R = expand(S):将表达式S各项展开。适用于多项式、三角函数、指数函数和对数函数

Python

>> syms x y;

>> f = tan(2*x^2 + y);

>> expand(f)

ans =

(tan(y) - (2*tan(x^2))/(tan(x^2)^2 - 1))/((2*tan(x^2)*tan(y))/(tan(x^2)^2 - 1) + 1)

>> pretty(f)

2

tan(2 x + y)

1

2

3

4

5

6

7

8

9

10

11

>>symsxy;

>>f=tan(2*x^2+y);

>>expand(f)

ans=

(tan(y)-(2*tan(x^2))/(tan(x^2)^2-1))/((2*tan(x^2)*tan(y))/(tan(x^2)^2-1)+1)

>>pretty(f)

2

tan(2x+y)

4.嵌套

R = horner(S):其中S是符号多项式矩阵,hoener函数可将其中的每个多项式转换成嵌套形式

Python

>> syms x y;

>> f = x^3 - 6*x^2 + 11*x - 6;

>> horner(f)

ans =

x*(x*(x - 6) + 11) - 6

1

2

3

4

5

6

7

>>symsxy;

>>f=x^3-6*x^2+11*x-6;

>>horner(f)

ans=

x*(x*(x-6)+11)-6

5.因式分解

factor(X):把X表示成系数为有理数的低阶多项式相乘的形式

Python

>> syms x y;

>> f = 2*x^2 - 7*x*y - 22*y^2 - 5*x +35*y - 3

f =

2*x^2 - 7*x*y - 5*x - 22*y^2 + 35*y - 3

>> factor(f)

ans =

[ 2*x - 11*y + 1, x + 2*y - 3]

1

2

3

4

5

6

7

8

9

10

11

12

>>symsxy;

>>f=2*x^2-7*x*y-22*y^2-5*x+35*y-3

f=

2*x^2-7*x*y-5*x-22*y^2+35*y-3

>>factor(f)

ans=

[2*x-11*y+1,x+2*y-3]

Python

>> f = sym('1242157912481');

>> factor(f)

ans =

[ 42013, 29566037]

1

2

3

4

5

6

>>f=sym('1242157912481');

>>factor(f)

ans=

[42013,29566037]

注:该矩阵中元素相乘即为原函数

二、符号表达式替换

符号表达式的替换类似于高数中的换元法,也叫变量代换法

MATLAB中提供了subs与subexpr函数进行变量代换,或者叫做符号表达式的替换

subs函数利用符号变量或符号表达式替换目标符号表达式中的符号变量(包括符号常量),即用指定符号替换符号表达式中某一特定符号

R = subs(S):用工作区中的变量值替换符号表达式S中的所有符号变量

R = subs(S, New):用新的符号变量New替换原来符号表达式S中的默认变量。确定默认变量的规则与findsym相同

R = subs(S, old, new):用新的符号变量New替换原来符号表达式S中的变量old。

Python

>> syms x y;

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

>> subs(f)

ans =

x^2 + y*x + 2*y

>> x = a;

未定义函数或变量 'a'。

>> x = 'a';

>> subs(f)

ans =

a^2 + y*a + 2*y

>> subs(f, 'y', 'b')

ans =

x^2 + b*x + 2*b

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

>>symsxy;

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

>>subs(f)

ans=

x^2+y*x+2*y

>>x=a;

未定义函数或变量'a'。

>>x='a';

>>subs(f)

ans=

a^2+y*a+2*y

>>subs(f,'y','b')

ans=

x^2+b*x+2*b

注:记录错误瞬间,下次避免

subexpr替换函数利用符号变量替换目标符号表达式中的某个子符号表达式,

[Y, SIGMA] = subexpr(S, SIGMA):指定用变量SIGMA的值(必须为符号对象)来替换符号表达式(可以是矩阵)中重复出现的字符串。替换后结果由Y返回,被替换的字符串由SIGMA返回

[Y, SIGMA] = subexpr(S, ‘SIGMA’):这种形式和上一种形式的不同之处在于第二个输入参数是字符或字符串,其他与上面相同

Python

>> syms x a;

>> f = 2*x^2 + a*x + 3 + x^-1;

>> s = solve(f)

s =

root(z^3 + (a*z^2)/2 + (3*z)/2 + 1/2, z, 1)

root(z^3 + (a*z^2)/2 + (3*z)/2 + 1/2, z, 2)

root(z^3 + (a*z^2)/2 + (3*z)/2 + 1/2, z, 3)

>> [r,simga] = subexpr(s,'x')

r =

root(z^3 + (a*z^2)/2 + (3*z)/2 + 1/2, z, 1)

root(z^3 + (a*z^2)/2 + (3*z)/2 + 1/2, z, 2)

root(z^3 + (a*z^2)/2 + (3*z)/2 + 1/2, z, 3)

simga =

[ empty sym ]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

>>symsxa;

>>f=2*x^2+a*x+3+x^-1;

>>s=solve(f)

s=

root(z^3+(a*z^2)/2+(3*z)/2+1/2,z,1)

root(z^3+(a*z^2)/2+(3*z)/2+1/2,z,2)

root(z^3+(a*z^2)/2+(3*z)/2+1/2,z,3)

>>[r,simga]=subexpr(s,'x')

r=

root(z^3+(a*z^2)/2+(3*z)/2+1/2,z,1)

root(z^3+(a*z^2)/2+(3*z)/2+1/2,z,2)

root(z^3+(a*z^2)/2+(3*z)/2+1/2,z,3)

simga=

[emptysym]

三、符号函数的操作

MATLAB提供了把两个符号函数复合成一个符号函数的功能函数,同时也提供了对符号函数求函数表达式的逆功能函数等

1.复合函数操作(compose)

compose(f, g):返回复合函数f(g(y))。此处f = f(x),g = g(y)。x是findsym定义的f函数的符号变量;y是g函数的符号变量

compose(f, g, x, z):返回自变量为z的复合函数f(g(z)),并且使x成为f函数的独立变量

Python

>> syms x y;

>> f = x + x^-1;

>> g = sin(x);

>> h = 1 + y^2;

>> compose(f, g)

ans =

sin(x) + 1/sin(x)

>> compose(g, f)

ans =

sin(x + 1/x)

>> compose(f, h, 'x', 't')

ans =

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

>>symsxy;

>>f=x+x^-1;

>>g=sin(x);

>>h=1+y^2;

>>compose(f,g)

ans=

sin(x)+1/sin(x)

>>compose(g,f)

ans=

sin(x+1/x)

>>compose(f,h,'x','t')

ans=

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

2.反函数操作(finverse)

g = finverse(f):返回符号函数f的反函数g。其中f是一个符号函数表达式,变量为x。g是一个满足g(f(x)) = x 的符号函数

g = finverse(f, v):返回自变量为v的符号函数f的反函数。所求得的反函数g满足g(f(v)) = v 。当f包含不止一个符号变量时使用这种调用格式

Python

>> syms x y;

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

>> finverse(f)

ans =

x^(1/2) - y

>> finverse(f,y)

ans =

y^(1/2) - x

>> finverse(f,x)

ans =

x^(1/2) - y

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

>>symsxy;

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

>>finverse(f)

ans=

x^(1/2)-y

>>finverse(f,y)

ans=

y^(1/2)-x

>>finverse(f,x)

ans=

x^(1/2)-y

赞赏作者

微信赞赏支付宝赞赏

喜欢 (0)or分享 (0)

你可能感兴趣的:(matlab中符号函数如何求最大值的表达式_MATLAB自学笔记(二十):符号表达式与符号函数的操作...)