数值分析1

方程求根

**题目:**用二分法、不动点迭代、牛顿法求解以下非线性方程。
(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值