创建符号变量
用符号而不是数值表示数字。
存储数字符号
% 你可以把一个数存储为数值格式,就像我们经常做的那样
x = 3;
% 你也可以把这个数存储为符号格式,使用sym()函数
xsym = sym(3);
% 数值和符号的区别在于,你定义了一个x,它的值是数字3;你用一个符号xsym来表示数字3
% 当使用数值格式存储的时候,matlab会根据它存储数字的精度,自动四舍五入
% 当使用符号格式存储的时候,他只是代表这个数字的一个符号,会保留这个数字最原始的样子
y = 2/3
ysym = sym(2/3)
符号变量
符号变量的名字是对应于我们常用的数值变量(x=3)的。
% 使用syms命令定义符号变量
syms a b c x
% 对符号变量执行计算的输出不再是数值,而是符号表达式
x+3
x^2
sqrt(x)
用符号变量表示数学表达式
创建符号表达式
只需要保证你所用到的变量都是符号变量就可以了。
syms x
expr = x^2+5*x+6
syms a b c
y = a*x^2+b*x+c
z = expr*pi
x = expr*4+5*y
给定义的符号变量带入值
使用subs()函数完成这一功能。v = subs(expression,variable,value)
所有可能出现的关于subs()函数的使用情况都在下面了
syms x a b c
expr = x^2 + x + 1
y = a*x^2 + b*x + c
s = subs(expr, x, 2)
ys = subs(y, a, 3)
ymult = subs(y, [a b c], [3 2 1])
subs(y, a, [1 2 3])
画表达式图像
可以使用fplot(expression)函数,画出表达式的图像。fplot()的使用与plot()一样。基本的使用情况都在下面给出
syms x
yLinear = (3/2)*x + 4
yCubic = x^3/8-2*x+3
fplot(yLinear)
hold on
fplot(yCubic)
hold off
定义和解符号方程
定义符号方程
使用“==”定义符号方程。
syms x
eqn = x^2-4==0 % 把x^2=0这个符号方程,存储在eqn中。
syms m v g h const
KE = (1/2)*m*v^2
PE = m*g*h
consE = KE+PE==const
解符号方程
使用solve(equation, variable)函数,从方程equation中解出变量variable的表达式。而且还可以解方程组,使用方法见下代码。
syms x a b c
eqn = x/3 + 2 == 7 % 定义一个符号方程eqn
xsol = solve(eqn,x) % 解这个方程中的变量x
eqn2 = x^2 - 4 == 0
xsol2 = solve(eqn2,x) % 如果是方程有多个根,会返回一个列向量
syms a b
eqnMult = a*b == 12
eqnAdd = a + b == 7
quadsol = solve(a*x^2+b*x+c==0,x) % 如果是方程有多个根,会返回一个列向量
[asol, bsol] = solve([eqnMult, eqnAdd], [a, b]) % 也可以解方程组
sol = solve([eqnMult eqnAdd],[a b]) % 如果只定义一个输出,会返回一个结构体
注意:无论这个方程的解是一个数还是一个含有未知参量的表达式,这个解都是一个sym,而不是一个数值。
函数处理与化简
有一些函数可以处理变量和系数。
newexpression = expand(expression)函数能实现对函数表达式的展开。
newexpression = simplify(expression)函数能找到更简洁的表达式。
f = factor(expression)函数能够对表达式分解因子。
设置条件
规定符号变量的取值范围
使用assume(variable, assumption)函数可以规定符号变量variable的取值范围。
使用asmp = assumptions(variable)函数能够查看符号变量variable的取值范围
syms x % 定义符号变量x
y = x^3-8;
fplot(y) % 可以看到图像中只有一个零点
eqn = y==0
sol = solve(eqn, x) % 而实际求解却又三个根,一个实数两个复数
assume(x, 'real'); % 将x的取值范围设置为实数
check = assumptions(x) % 查看x的取值范围
realsol = solve(eqn, x) % 重解x,根只剩一个实数根
% 清除对x的限制,因为只有使用assumptions函数才会显示其取值范围
% 在计算过程中并不会显示x的取值范围,所以不需要是,一定记得清除
assume(x, 'clear')
设置多个条件
使用solve()函数可以同时对多个变量设置限定条件。使用solveAlso()函数还可以在原有限制条件上追加新的条件。
syms a b
pyth = a^2 + b^