如果a,b,c是已知的,或者说是某个确定的数值,那么我们就可以直接用roots函数进行求根——数值解:
p=[1 2 1]
roots(p)
返回结果是:
ans =
-1
-1
显然这里的a,b,c是未知的,我们想要求出x的表达式——符号解。那么我么可以用solve函数来实现:
syms a b c x % 声明参数
eqn = a*x^2 + b*x + c == 0;
solx = solve(eqn, x)
返回结果是:
solx =
-(b + (b^2 - 4*a*c)^(1/2))/(2*a)
-(b - (b^2 - 4*a*c)^(1/2))/(2*a)
其中,solve(eqn,x)表示对等式eqn关于x的求解(同样地,也可以求解关于a或b或c的解)。eqn可以是一个等式,也可以是一个表达式,如果是一个表达式,则默认是对eqn=0求解。
syms x
solx = solve(cos(x) == -sin(x), x)
返回结果是:
solx =
-pi/4
[solx, param, cond] = solve(cos(x) == -sin(x), x, 'ReturnConditions', true)
返回结果是:
solx =
pi*k - pi/4
param =
k
cond =
in(k, 'integer')
如上所示,返回值有三个参数,分别是解、解的参数、解的条件。
solx =pi*k - pi/4
param =k
cond =in(k, ‘integer’)
matlab实现:
syms x
[solx, param, cond] = solve(cos(x) == -sin(x), x, 'ReturnConditions', true)
matlab实现:
assume(cond)
solk = solve(-2*pi
matlab实现:
xvalues = subs(solx, solk)
xvalues = vpa(xvalues) % 把符号解转换成数字解
绘制 c o s ( x ) = = − s i n ( x ) cos(x) == -sin(x) cos(x)==−sin(x)的解:分别绘制cos(x)和 -sin(x),再标记出两个曲线的交点。
matlab实现:
fplot(cos(x))
hold on
grid on
fplot(-sin(x))
title('Both sides of equation cos(x) = -sin(x)')
legend('cos(x)','-sin(x)','Location','best','AutoUpdate','off')
yvalues = cos(xvalues) % 计算交点的纵坐标
scatter(xvalues, yvalues) % 标出交点的位置