01
符號對象
?? 符號運算使用--種特殊的數(shù)據(jù)類型,稱為符號對象(SymbolicObject),用字
符串形式表達,但又不同于字符串( Char Array).符號運算中的變量、函數(shù)和表達式都是符號對象.
% 這是數(shù)值表達式
n = pi^2
% 數(shù)值轉(zhuǎn)化為符號對象
a = sym(n)
% 定義符號變量以及符號計算表達式
syms x y c
d = x^3+2*y^2;
% 定義符號矩陣
A = [x,y;2*x,2*y]
% 符號變量x用符號c替代
A = subs(A,x,c)
從上面可以看出萬物皆可符號,定義單個符號使用sym,多個使用syms
計算精度和數(shù)據(jù)類型轉(zhuǎn)換
% s為圓周率
s=pi
% 將數(shù)值計算精度設置為8位
digits(8)
% 求s的數(shù)值結果
x=vpa(s)
% 采用n位計算精度求s的數(shù)值結果
x=vpa(s,n)
%符號對象轉(zhuǎn)換為雙精度
double(s)
%符號對象轉(zhuǎn)換為字符串
char(s)
輸出結果:
s =
3.1416
x =
3.1415927
x =
3.141592654
ans =
3.1416
ans =
02
符號矩陣和符號函數(shù)
?? MATLAB大部分矩陣和數(shù)組運算符及指令都可以應用于符號矩陣,大部分MATLAB數(shù)學函數(shù)和邏輯關系運算也可用于符號對象.另外還有
符號矩陣
clear;
% 符號矩陣A
A = sym('[a,b;c,d]');
% B為A矩陣的逆
B = inv(A)
% 矩陣的運算
A./B
B.\A
A/B
B\A
% 求符號矩陣的特征值和特征向量
eig(A)
輸出結果:
B =
[ d/(a*d - b*c), -b/(a*d - b*c)]
[ -c/(a*d - b*c), a/(a*d - b*c)]
ans =
[ (a*(a*d - b*c))/d, b*c - a*d]
[ b*c - a*d, (d*(a*d - b*c))/a]
ans =
[ (a*(a*d - b*c))/d, b*c - a*d]
[ b*c - a*d, (d*(a*d - b*c))/a]
ans =
[ a^2 + b*c, b*(a + d)]
[ c*(a + d), d^2 + b*c]
ans =
[ a^2 + b*c, b*(a + d)]
[ c*(a + d), d^2 + b*c]
ans =
a/2 + d/2 - (a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)/2
a/2 + d/2 + (a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)/2
符號函數(shù)
% f(x,y)=(x-y)^3
% g(x,y)=(x+y)^3
% 定義符號變量
syms x y;
%定義函數(shù)
f=(x-y)^3;
g=(x+y)^3;
%兩個函數(shù)相乘
h = f*g
%展開多項式
hs = expand(h)
% 因式分解
hf = factor(hs)
%定義符號函數(shù),自變量是x,y
fun = symfun(f*g,[x,y])
%符號計算替換無需使用subs方法
s = fun(x,x^2+x+1)
%合并同類項,變量x
scol = collect(s,x)
%化簡
ssim = simplify(scol)
%最簡形式
ssim =simple(scol)
% 數(shù)學公式的Latex輸出
latex(ssim)
% 數(shù)學公式的C語言代碼
ccode(ssim)
% 數(shù)學公式的matlab匿名函數(shù)代碼
輸出結果:
h =
(x + y)^3*(x - y)^3
hs =
x^6 - 3*x^4*y^2 + 3*x^2*y^4 - y^6
hf =
(x - y)^3*(x + y)^3
fun(x, y) =
(x + y)^3*(x - y)^3
s =
-(x^2 + 1)^3*(x^2 + 2*x + 1)^3
scol =
- x^12 - 6*x^11 - 18*x^10 - 38*x^9 - 63*x^8 - 84*x^7 - 92*x^6 - 84*x^5 - 63*x^4 - 38*x^3 - 18*x^2 - 6*x - 1
ssim =
-(x^2 + 1)^3*(x + 1)^6
ssim =
-(x^2 + 1)^3*(x + 1)^6
ans =
- {\left(x^2 + 1\right)}^3\, {\left(x + 1\right)}^6
ans =
t0 = -pow(x*x+1.0,3.0)*pow(x+1.0,6.0);
ans =
@(x)-(x.^2+1.0).^3.*(x+1.0).^6
符號微積分
% 定義符號變量
syms n x;
%定義表達式
f = (1+x/n)^n;
g = (-1)^n*x^n/n;
% 符號極限的計算,變量n趨于無窮
limit(f,n,inf)
% 離散求和,變量n從1到無窮
symsum(g,n,1,inf)
計算結果:
ans =
exp(x)
ans =
piecewise([x == -1, Inf], [abs(x) <= 1 and x ~= -1, -log(x + 1)])