matlab符号计算
Matlab符号计算
- 符号计算
- syms
- 极限:limit
- 导数:diff
- 级数:symsum
- Taylor多项式
- 积分:int
- 表达式展开:expand
- 因式分解:factor
- 合并同类项:collect
- 霍纳法则重排:horner
- 化简表达式:simplify
- 变量替换:subs
- 线性方程组求解:solve
- ODE的符号求解:dsolve
符号计算
syms
在进行符号运算之前,必须用syms
函数指定符号变量。
syms x y z
变量不需要用''
包裹,不同变量之间以空格隔开。
pretty()
函数可以以更容易阅读的形式显示符号函数
极限:limit
语法:
limit(f, x, a)
limit(f, x, a, 'left')
limit(f, x, a, 'right')
- f表示符号函数
- x和a表示求函数f在x趋于a时的极限
left
和right
指定单侧极限,没有指定则求一般极限
**示例:
>> syms x
>> limit(sin(x)/x, x, 0)ans =1>> limit(sin(x)/x, x, 0, 'left')ans =1>> limit(sin(x)/x, x, 0, 'right')ans =1
导数:diff
语法:
diff(f, t, n)
求符号函数f对变量t的n阶导数
示例:
>> syms x
>> diff(sin(x)/x, x, 1)ans =cos(x)/x - sin(x)/x^2
级数:symsum
语法:
symsum(f, t, a, b)
求级数f中符号变量t从第a项到第b项的和
示例:
>> syms n
>> symsum(1/n^2, n, 1, inf) ans =pi^2/6
Taylor多项式
语法:
taylor(f, a, n)
求函数f在a点的n-1阶Taylor多项式
示例:
>> taylor(sin(x), x, 6)ans =sin(6) - (sin(6)*(x - 6)^2)/2 + (sin(6)*(x - 6)^4)/24 + cos(6)*(x - 6) - (cos(6)*(x - 6)^3)/6 + (cos(6)*(x - 6)^5)/120
taylortool
可调出求taylor多项式的GUI
积分:int
语法:
int(f, t, a, b)
求符号函数f对变量t从a到b的积分,也可嵌套求多重积分
示例:
>> syms x y
>> int(x+y, x, 1, 2)ans =y + 3/2>> int(int(x+y, x, 1, 2), y, 3, 6)ans =18
积分无解析表达式
例如:
>> int(sin(x)/x, x, 1, 2)ans =sinint(2) - sinint(1)
令I表示积分表达式,此时可以使用:
double(I), eval(I)
:求数值解,且结果为数值型vap(I,n)
:求有效数字为n位的数值解,结果仍为syms
型
表达式展开:expand
>> expand((x + 1)^3)ans =x^3 + 3*x^2 + 3*x + 1
因式分解:factor
>> factor(x^2 - 1)ans =[x - 1, x + 1]
合并同类项:collect
>> collect(x^2 + 2*x + x^2)ans =2*x^2 + 2*x
霍纳法则重排:horner
>> horner(x^3 + 3*x^2 + 3*x + 1)ans =x*(x*(x + 3) + 3) + 1
化简表达式:simplify
>> simplify(sin(x)^2 + cos(x)^2)ans =1>> simplify(x^2 + 2*x + x^2)ans =2*x*(x + 1)
变量替换:subs
语法:
subs(f, old, new)
在f中用符号new替代原本f中的符号old
示例:
>> subs(x^2 + y, [x, y], [2, 3])ans =7>> syms s t
>> subs(x^2 + y, [x, y], [s, t])ans =s^2 + t
线性方程组求解:solve
>> solve(x^2 - 4 == 0, x)ans =-22>> solve([x + y == 3, x - y == 1], [x, y])ans = 包含以下字段的 struct:x: 2y: 1>>
ODE的符号求解:dsolve
语法:
dsolve(eqn, condition, var)
求解微分方程组eqn在初值condition下的解,若不给出初值,则求通解
示例:
>> syms x(t) y(t)
>> eqns = [diff(x, t) == x + y, diff(y, t) == x - y];
>> conds = [x(0) == 1, y(0) == 0];
>> sol = dsolve(eqns, conds)sol = 包含以下字段的 struct:y: (2^(1/2)*exp(2^(1/2)*t))/4 - (2^(1/2)*exp(-2^(1/2)*t))/4x: (2^(1/2)*exp(2^(1/2)*t)*(2^(1/2) + 1))/4 + (2^(1/2)*exp(-2^(1/2)*t)*(2^(1/2) - 1))/4