割线法求根

1. 绘图

在这里插入图片描述
从区间[-2, 2]的图像看出,在[-2, 2]至少有两个根,但在[-1, 1]之间是否有根难以判断,因此继续绘制[-1, 1]之间的图像,如下:
在这里插入图片描述
可以看到,函数在[-1,1]之间无根,为进一步确认,绘制[0, 0.4]区间上的图像,如下,确认[0, 0.4]间无根。
在这里插入图片描述
由上面三幅图,通过图表法,得知,f(x)=0仅有两个根,分别在(-2, -1.5)和(1, 1.5)内,且在(-1, 1)间无根。

2. 割线法求解

设置误差为1e-5,使用MATLAB的编程求解结果如下。
初始值 x 0 = − 2 , x 1 = − 1.95 x_0=-2, x_1=-1.95 x0=2,x1=1.95,共迭代8次找到零值点-1.5737;
初始值 x 0 = + 2 , x 1 = + 1.95 x_0=+2, x_1=+1.95 x0=+2,x1=+1.95,共迭代9次找到零值点1.2974。
它们的迭代图分别如下:
在这里插入图片描述
在这里插入图片描述

3. 确定收敛阶

f ′ ( x ) = 324 x 5 + 225 x 4 − 408 x 3 − 207 x 2 + 16 f'(x)=324x^5 + 225x^4 - 408x^3 - 207x^2 + 16 f(x)=324x5+225x4408x3207x2+16 f ′ ( − 1.5737 ) = − 653.5924 f'(-1.5737)= -653.5924 f(1.5737)=653.5924 f ′ ( 1.2974 ) = 604.8823 f'(1.2974)=604.8823 f(1.2974)=604.8823
在两根处的导数均不为0,故割线法在两根处的迭代求解均是超线性收敛。


clear 
close all
clc
tic
%% 定义函数句柄
f = @(x) 54*x.^6 + 45*x.^5 - 102*x.^4 - 69*x.^3 + 16*x - 4;
f_prime = @(x) 324*x.^5 + 225*x.^4 - 408*x.^3 - 207*x.^2 + 16;

%% 设置误差及初始值
eps = 1e-5;
x0 = 2;  %-2;
x1 = 1.95;  % -1.95;

%% 开始迭代
x_all = [x1];
cnt = 0;
while 1
    f1 = f(x1);
    if abs(f1) < eps
        break
    end
    x_tmp = x1;
    x1 = x1 - (x1 - x0) / (f1 - f(x0)) * f1;
    x0 = x_tmp;
    x_all = [x_all, x1];
    cnt = cnt + 1;
end
fprintf('迭代次数: %d, 解为%.4f\n', cnt, x1);
fprintf('根处的导数: %.4f\n', f_prime(x1));
toc

%% 
figure(1)
step = linspace(-2, 2, 10000);
plot(step, f(step), 'k', 'LineWidth',  1)
hold on
plot(x_all, f(x_all), 'ro', 'LineWidth',  1)
hold off
grid on
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值