符號運算得到的是精確的解析解,但是有時需要進行數值轉換,主要通過以下幾個函數實現。
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