matlab把符号数,Matlab 符号与数值之间的转换

符号运算得到的是精确的解析解,但是有时需要进行数值转换,主要通过以下几个函数实现。

1.digits 函数

调用方法:digits(D)

函数设置有效数字个数为D的近似解精度。

2.vpa 函数

vpa

Variable-precision arithmetic

Syntax

R = vpa(A)

R = vpa(A,d)

Description

R = vpa(A) uses variable-precision arithmetic (VPA) to compute

each element of A to at least d decimal digits of accuracy, where d

is the current setting of digits.

R = vpa(A,d) uses at least d significant (nonzero) digits,

instead of the current setting of digits.

注:vpa中的精度是指有效值,即vpa(1.2345,2)=1.2;vpa(0.2345,2) = 0.23

3.subs函数

subs

Symbolic substitution

Syntax

g = subs(f,old,new)

g = subs(f,new)

g = subs(f)

g = subs(f,old,new,0)

Description

g = subs(f,old,new) replaces all occurrences of old with new in

f, and then evaluates f.

g = subs(f,new) replaces all occurrences of the default variable

in f (defined by symvar) with new , and then evaluates f.

g = subs(f) replaces symbolic variables in f with their values

obtained from the calling function and the MATLAB workspace, and

then evaluates f. Variables with no assigned values remain as

variables.

g = subs(f,old,new,0) prevents switching the arguments old and

new if subs(f,old,new) returns f. Without this additional argument,

the toolbox also tries subs(f,new,old) if subs(f,old,new) returns

f. This approach provides backwards compatibility with previous

versions and eliminates the need to remember the order of the

arguments.

例1:求方程3*x^2-exp(x) = 0 的精确解和各种精度的近似解

>> s = solve('3*x^2-exp(x) =

0')

s =

-2*lambertw(0, 3^(1/2)/6)

-2*lambertw(0, -3^(1/2)/6)

>> vpa(s)

ans =

-0.45896226753694851459857243243406

0.91000757248870906065733829575937

>> vpa(s,6)

ans =

-0.458962

0.910008

例2:设函数为f(x) = x – cos(x) 。求此函数在x = pi点的值的各种精度的数值近似形式。

>> x = sym('x');

>> f = x - cos(x)

f =

x - cos(x)

>> f1 = subs(f,x,pi)

f1 =

4.1416