方程求根
**题目:**用二分法、不动点迭代、牛顿法求解以下非线性方程。
(1)sin 𝑥 = 6𝑥 + 5
(2)ln 𝑥 + 𝑥 ^2 = 3
(3)𝑒^𝑥 + 𝑥 = 7
1、牛顿法的迭代公式
x1 = x0 - f(x0) / f’(x0)
2、matlab代码:
clc;
clear;
f1 = @(x) sin(x) - 6 * x - 5;
df1 = @(x) cos(x) - 6;
f2 = @(x) log(x) + x * x - 3;
df2 = @(x) 1 / x + 2 * x;
f3 = @(x) exp(x) + x - 7;
df3 = @(x) exp(x) + 1;
%方程1
a = -1;
b = 0;
eps = 0.001;
x0 = -1;
x11 = div(f1, a, b, eps);
x12 = iter1(x0, eps, f1);
x13 = newton(x0, eps, f1, df1);
disp("方程1:依次为二分法,不动点法,牛顿法");
disp(x11);
disp(x12);
disp(x13);
%方程2
a = 1;
b = 2;
x0 = 2;
x21 = div(f2, a, b, eps);
x22 = iter2(x0, eps, f2);
x23 = newton(x0 , eps, f2, df2);
disp("方程2:依次为二分法,不动点法,牛顿法");
disp(x21);
disp(x22);
disp(x23);
%方程3
a = 1;
b = 2;
x0 = 1;
x31 = div(f3, a, b, eps);
x32 = iter3(x0, eps, f3);
x33 = newton(x0, eps, f3, df3);
disp("方程3:依次为二分法,不动点法,牛顿法");
disp(x31);
disp(x32);
disp(x33);
% dichotomy
function x = div(f, a, b, eps)
if abs(f(a)) <= eps
x = a;
elseif abs(f(b)) <= eps
x = b;
else
x = (a + b) / 2;
while b - a > eps
if f(x) * f(b) < 0
a = x;
else
b = x;
end
x = (a + b) / 2;
end
end
end
% Fixed point
function x = iter1(x0, eps, f)
x = x0;
while abs(f(x)) > eps
x = (sin(x0) - 5) / 6;
x0 = x;
end
end
function x = iter2(x0, eps, f)
x = x0;
while abs(f(x)) > eps
x = sqrt(3 - log(x0));
x0 = x;
end
end
function x = iter3(x0, eps, f)
x = x0;
while abs(f(x)) > eps
x = log(7 - x);
x0 = x;
end
end
%Newton method
function x = newton(x0, eps, f, df)
f0 = f(x0);
df0 = df(x0);
x = x0 - f0 / df0;
while abs(f(x)) > eps
x0 = x;
f0 = f(x0);
df0 = df(x0);
x = x0 - f0 / df0;
end
end