MATLAB符号计算目录
一、符号变量与符号表达式
M A T L A B MATLAB MATLAB符号运算处理的主要对象
符号变量
一种新的数据类型
符号表达式
创建符号表达式的方法:
符号 ′ ′ '' ′′
>> f = 'sin(x)' f = sin(x)
s y m sym sym函数
s y m sym sym函数
一次只能创建一个符号
>> g = sym('cos(x) + exp(x)') g = cos(x) + exp(x)
s y m s syms syms函数
一次能够创建多个符号
>> syms a b x y t >> f = a * sin(x) + b * cos(x) f = a * sin(x) + b * cos(x)
为了了解符号函数引用过程中使用的符号变量个数及变量名
可使用 f i n d s y m findsym findsym函数 查询
f i n d s y m findsym findsym函数:
使用格式:
findsym(f,n)
其中,
## 初始定义 >> syms a b x y >> f = sin(a * x + t) + b * log(y) + c f = sin(a * x + t) + b * log(y) + c
f f f :用户定义的符号函数
n n n :正整数,表示查询变量的个数
>> findsym(f) ans = a,b,c,t,x,y
n n n值省略时表示查询符号函数中全是系统默认变量
>>findsym(f,1) ans = x
得到精确的数值解
对得到的解析解进行数值转化
>> syms x y >> y = 2*x^2-exp(x) >> s = solve(y,0) s = -2*lambertw(0, -2^(1/2)/4) -2*lambertw(0, 2^(1/2)/4)
转换函数
d i g i t s ( D ) digits(D) digits(D)
表示函数设置有效数字个数为D的近似解精度
v p a ( S , D ) vpa(S,D) vpa(S,D)
表示符号表达式S在 d i g i t s ( D ) digits(D) digits(D)精度下的数值解
>> vpa(s) ans = 1.4879620654981771562543701209326 -0.53983527690282004921180390836334
>> vpa(s,8) ans = 1.4879621 -0.53983528
s u b s ( S , x , a ) subs(S,x,a) subs(S,x,a)
表示将变量 a a a替换符号表达式 S S S中的 x x x变量, x x x与 a a a可互换位置
>> syms x y a >> f = sin(a*x + y)-x; >> subs(f,x,pi) ans = sin(y + pi*a) - pi
>> subs(f,x,-5) ans = 5 - sin(5*a - y)
二、符号微积分
1、导数
-
d i f f diff diff函数
d i f f ( S , v , n ) diff(S,v,n) diff(S,v,n)
-
S S S 表达式
若只有S,表示系统对默认变量求一阶导数
-
v v v 变量
若v省略,表示对默认变量求n阶导数
-
n n n n阶导数
若n省略,表示求1阶导数
例 1 — 23 : 使 用 d i f f 函 数 计 算 z = 2 y s i n x 2 关 于 x 的 一 阶 、 二 阶 偏 导 数 。 例1—23:使用diff函数计算z=2ysinx^2关于x的一阶、二阶偏导数。 例1—23:使用diff函数计算z=2ysinx2关于x的一阶、二阶偏导数。
>> syms x y >> s = y*sin(x^2); >> diff(s) ans = 2*x*y*cos(x^2)
>> diff(s,2) ans = 2*y*cos(x^2) - 4*x^2*y*sin(x^2)
当导数运算作用于符号矩阵时
>> syms a b x >> A=[sin(a*x),cos(a*x);-cos(b*x),-sin(b*x)] A = [ sin(a*x), cos(a*x)] [ -cos(b*x), -sin(b*x)]
-
2、积分
-
i n t 函 数 int函数 int函数
- i n t ( S ) int(S) int(S):对符号表达式S关于默认变量求不积分
- i n t ( S , v ) int(S,v) int(S,v):对符号表达式S关于指定变量v求不积分
- i n t ( S , a , b ) int(S,a,b) int(S,a,b):对符号表达式S关于默认变量在区间[a,b]求不积分
- i n t ( S , v , a , b ) int(S,v,a,b) int(S,v,a,b):对符号表达式S关于指定变量v在区间[a,b]求不积分
无穷区间 i n f inf inf
例 1-24 使用int函数计算以下积分:
( 1 ) ∫ d x x 2 1 + x 2 ; ( 2 ) ∫ e x cos 3 x d x ; ( 3 ) ∫ 0 π 2 x sin 3 x d x ; ( 4 ) ∫ − ∞ + ∞ 1 1 + 9 x 2 d x . (1)\int{\frac{dx}{x^2\sqrt{1+x^2}}}; (2)\int{e^x\cos{3x}}dx; (3)\int_{0}^{\frac{\pi}{2}}{x\sin{3x}dx}; (4)\int_{-\infty}^{+\infty}{\frac{1}{1+9x^2}dx}. (1)∫x21+x2dx;(2)∫excos3xdx;(3)∫02πxsin3xdx;(4)∫−∞+∞1+9x21dx.
第一题:
>> syms x y
>> s1 = 1/(x^2*sqrt(1+x^2));
>> int(s1,x)
ans =
-(x^2 + 1)^(1/2)/x
第二题:
>> s2 = exp(x)*cos(3*x);
>> int(s2,x)
ans =
(exp(x)*(cos(3*x) + 3*sin(3*x)))/10
第三题:
>> s3 = x*sin(x)^2;
>> int(s3,x,0,pi/2)
ans =
pi^2/16 + 1/4
第四题:
>> s4 = 1/(1+9*x^2);
>> int(s4,x,-inf,inf)
ans =
pi/3
当不定积分无解析表达式时
可用 d o u b l e double double函数或 e v a l eval eval函数计算其数值
例如:
>> s = exp(-x^2);
>> z = int(s,0,1)
z =
(pi^(1/2)*erf(1))/2
>> eval(z)
ans =
0.7468
3、极限
-
l i m i t limit limit函数
- l i m i t ( S , x , a ) : limit(S,x,a): limit(S,x,a):计算符号表达式 S S S在 x → a x\rightarrow a x→a时的极限
- l i m i t ( S , a ) : limit(S,a): limit(S,a):计算符号表达式 S S S在默认变量趋向于 a a a时的极限
- l i m i t ( S ) : limit(S): limit(S):计算符号表达式 S S S在默认变量趋向于 0 0 0时的极限
- l i m i t ( S , x , a , ′ r i g h t ′ ) : limit(S,x,a,'right'): limit(S,x,a,′right′):计算符号表达式 S S S在 x → a x\rightarrow a x→a时的右极限
- l i m i t ( S , x , a , ′ l e f t ′ ) : limit(S,x,a,'left'): limit(S,x,a,′left′):计算符号表达式 S S S在 x → a x\rightarrow a x→a时的左极限
例1-25 计算下列问题的极限:
( 1 ) lim x → 2 x 2 − 4 x − 2 ; ( 2 ) lim x → 0 sin x x ; ( 3 ) lim x → + ∞ ( 1 + a x ) x ; ( 4 ) lim x → π 2 + tan x . (1)\lim_{x\rightarrow2}{\frac{x^2-4}{x-2}};(2)\lim_{x\rightarrow0}{\frac{\sin{x}}{x}};(3)\lim_{x\rightarrow+\infty}{(1+\frac{a}{x})^x};(4)\lim_{x\rightarrow{\frac{\pi}{2}^+}}{\tan{x}}. (1)x→2limx−2x2−4;(2)x→0limxsinx;(3)x→+∞lim(1+xa)x;(4)x→2π+limtanx.
第一题:
>> syms x a
>> f1 = (x^2-4)/(x-2);
>> limit(f1,x,2)
ans =
4
第二题:
>> f2 = sin(x)/x;
>> limit(f2)
ans =
1
第三题:
>> f3 = (1 + a/x)^x;
>> limit(f3,x,inf)
ans =
exp(a)
第四题:
>> f4 = tan(x);
>> limit(f4,x,pi/2,'right')
ans =
-Inf
4、级数求和
-
s y m s u m symsum symsum函数
-
s y m s u m ( S ) : symsum(S): symsum(S):对符号表达式S关于默认变量 k k k从0到 k − 1 k-1 k−1求和
-
s y m s u m ( S , v ) : symsum(S,v): symsum(S,v):对符号表达式S关于指定变量 v v v从0到 k − 1 k-1 k−1求和
-
s y m s u m ( S , v , a , b ) : symsum(S,v,a,b): symsum(S,v,a,b):对符号表达式S关于指定变量 v v v从 a a a到 b b b求和
-
s y m s u m ( S , a , b ) : symsum(S,a,b): symsum(S,a,b):对符号表达式S关于默认变量 k k k从 a a a到 b b b求和
-
例 1-26 求下列级数的和:
( 1 ) ∑ k = 0 k − 1 k ; ( 2 ) ∑ n = 0 n − 1 1 2 n ; ( 3 ) ∑ n = 1 ∞ ( − 1 ) n − 1 n x n ; ( 4 ) ∑ k = 1 ∞ 1 k 2 . (1)\sum_{k=0}^{k-1}{k};(2)\sum_{n=0}^{n-1}{\frac{1}{2^n}};(3)\sum_{n=1}^{\infty}{\frac{(-1)^{n-1}}{n}{x^n}};(4)\sum_{k=1}^{\infty}{\frac{1}{k^2}}. (1)k=0∑k−1k;(2)n=0∑n−12n1;(3)n=1∑∞n(−1)n−1xn;(4)k=1∑∞k21.
第一题:
>> syms k n x
>> f1 = k;
>> symsum(f1)
ans =
k^2/2 - k/2
第二题:
>> f2 = 1/2^n;
>> symsum(f2,n,0,n-1)
ans =
2 - 2*(1/2)^n
第三题:
>> f3 = (-1)^(n-1)*x^n/n;
>> symsum(f3,n,1,inf)
ans =
piecewise(x == -1, -Inf, abs(x) <= 1 & x ~= -1, log(x + 1))
第四题:
>> f4 = 1/k^2;
>> symsum(f4,k,1,inf)
ans =
pi^2/6
5、幂级数展开
- t a y l o r ( S ) : taylor(S): taylor(S):对符号函数S关于默认变量的6次麦克劳林展开式,这里6次指余项次数大于等于6,以下同;
- t a y l o r ( S , n ) : taylor(S,n): taylor(S,n):对符号函数S关于默认变量的 n n n次麦克劳林展开式
- t a y l o r ( S , n , x , a ) : taylor(S,n,x,a): taylor(S,n,x,a):对符号函数S关于指定变量 x x x在 a a a点 n n n次泰勒展开式
具体使用方法可以有所出入
例 1-27 对下列函数经行幂级数展开:
( 1 ) y = sin x 的 6 次 与 15 次 麦 克 劳 林 展 开 式 ; (1)y = \sin{x}的6次与15次麦克劳林展开式; (1)y=sinx的6次与15次麦克劳林展开式;
( 2 ) y = cos x 在 x = π 3 处 展 开 成 幂 级 数 ( 次 数 为 7 ) (2)y = \cos{x}在x=\frac{\pi}{3}处展开成幂级数(次数为7) (2)y=cosx在x=3π处展开成幂级数(次数为7)
( 3 ) y = x l n ( 2 + 3 x ) 展 开 成 x − 2 的 幂 级 数 ( 次 数 为 8 ) (3)y =xln(2+3x)展开成x-2的幂级数(次数为8) (3)y=xln(2+3x)展开成x−2的幂级数(次数为8)
第一题:
>> syms x
>> taylor(sin(x))
ans =
x^5/120 - x^3/6 + x
>> taylor(sin(x),'Order',15)
ans =
x^13/6227020800 - x^11/39916800 + x^9/362880 - x^7/5040 + x^5/120 - x^3/6 + x
第二题:
>> taylor(cos(x),x,pi/3,'Order',7)
ans =
(3^(1/2)*(x - pi/3)^3)/12 - (3^(1/2)*(x - pi/3))/2 - (3^(1/2)*(x - pi/3)^5)/240 - (x - pi/3)^2/4 + (x - pi/3)^4/48 - (x - pi/3)^6/1440 + 1/2
第三题:
>> f3 = x*log(2+3*x);
>> taylor(f3,x,2,'Order',8)
ans =
2*log(8) + (log(8) + 3/4)*(x - 2) + (15*(x - 2)^2)/64 - (9*(x - 2)^3)/256 + (63*(x - 2)^4)/8192 - (81*(x - 2)^5)/40960 + (729*(x - 2)^6)/1310720 - (1215*(x - 2)^7)/7340032