%方法一:多项式球根函数roots
p = [1, -3, 1]; % x^2 - 3*x + 1 = 0
x = roots(p) %多项式求根函数roots
%求出:x = 2.6180 和 0.3820
%方法二:绘制函数图像可以知道解的大致位置
% x^2 - 3*x + 1 = 0
x = -5: 0.1: 5; %产生x向量,x从-5变化到5,步长为0.1
y1 = x.*x - 3*x + 1; %求函数值向量y1
y2 = zeros(size(x)); %产生一个同x向量同大小的零向量
plot(x, y1, x, y2); %绘制函数曲线y1,和x轴
%从生成的图像可以看出,图像在x = 0.5和x = 2.5附近通过零点
%方法二:求单变量非线性方程根的函数:fzero
%可以求函数在某个初始点附近的实根
f = @(x) x*x - 3*x + 1; %利用matlab的函数来定义f
x1 = fzero(f, 0.5); %求函数在x = 0.5附近的实根
%x1 = 0.3820
x2 = fzero(f, 2.5);
%x2 = 2.6180
%方法三:在MATLAB最优化工具箱中,提供了一个功能更强的方程求根函数:fsolve
f = @(x) x*x + 3*x + 1;
x1 = fsolve(f, 0.5, optimset('Display','off')) %optimset参数用于设置优化参数,
%可以调用optimset函数来完成
%把Display选项设置为off,
%表示不显示迭代的中间结果
% x1 = 0.3820
x2 = fsolve(f, 2.5, optimset('Display','off'))
% x2 = 2.6180
%方法四:利用solve函数求函数的符号解,求得的解是一个表达式
%符号求根函数:solve
syms x %定义一个符号变量x
x = solve(x^2 - 3*x + 1) %用solve函数求根
%输出:x = 3/2 - 5^(1/2)/2
5^(1/2)/2 + 3/2
x = eval(x) %用eval函数,可以将符号解抓换成数值解
%输出:x = 0.3820
2.6180