工程计算——二分法

二分法

理论基础:
  • 基本思想

将隔离区间进行对分,找出根所在的小区间,然后再对该小区间对分,依次类推,直到隔离区间的长度满足给定的精度为止。

  • 数学原理:介值定理

设f(x)在[a,b]上连续,且f(a)f(b)<0,则由介值定理可得,在(a,b)内至少存在一点ξ使得f(ξ)=0

  • 适用范围
  • 求隔离区间内的根,f(a)f(b)<0
  • 用二分法求根,通常先给出f(x)图像以确定有根区间
  • 解题思路:

①将方程转换为f(x)函数式,通过Matlab绘制函数图像,根据图像零点位置确定原方程的有根区间[a,b](f(a)f(b)<0)。
②利用设计好的Matlab二分法函数求解方程的近似解。

  • 函数定义
    主函数:
x=[0:0.01:10];
y=f(x);
Draw(x,y);
a=input('请输入有根区间左端点a的值:');
b=input('请输入有根区间右端点b的值:');
xi=input('请输入预定精度\xi\n:');
%delta=input('请输入精度\delta\n:');
x0=0;
k=0;
[k,x0]=CMTheFunOfDichotomy(a,b,xi);
disp('该方程的近似根为:');
disp(x0);
disp('该程序执行的总步数为:');
disp(k);

f:在该函数中定义待求解方程。

function y=f(x)
y=(cos(x)).*(cos(x))+6-x;
% y=log(x)+x.*x-3;
% y=1+5*x-6*(x^3)-exp(2*x);
% y=cos(x)-sin(x);
end

Draw:通过该函数绘制f(x)图像。

function Draw(x,y)
grid on;hold on;
plot(x,y);
title('f(x)图像')
xlabel('x')
ylabel('f(x)');
end

CMTheFunOfDichotomy:二分法的主体函数

思路①:直接对有根区间[a,b]二分

function [k,x0]=CMTheFunOfDichotomy(a,b,xi)
x0=(a+b)/2;%直接对有根区间二分
k=1;%记录步数
m=1+round(log(b-a)-log(2*xi)/log(2));
while k<=m
    y=f(x0);
    ya=f(a);
    yb=f(b);
    if y==0
        x0=x0;
    return;
    elseif ya*y<0
        b=x0;
    elseif y*yb<0
        a=x0;
    end
    x0=(a+b)/2;k=k+1;
end
end

思路②:利用几何关系(相似三角形对应线段成比例)进行二分

function [k,x0]=CMTheFunOfDichotomy(a,b,xi)
ya=f(a);
yb=f(b);
lambda=abs(ya)/(abs(yb)+abs(ya));
x0=lambda*b+(1-lambda)*a;
k=1;
m=1+round(log(b-a)-log(2*xi)/log(2));    
while k<=m
    y=f(x0);
    ya=f(a);
    yb=f(b);
    if y==0
        x0=x0;
    return;
    elseif ya*y<0
        b=x0;
    elseif y*yb<0
        a=x0;
    end
    x0=lambda*b+(1-lambda)*a;  k=k+1;
end
end

m=1+round(log(b-a)-log(2*xi)/log(2)); 1

(1)(cos(x))*(cos(x))+6=x
图形绘制函数结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xArpfA0y-1646553203911)(二分图一.png)]
由此可将[6,7]视为该函数的有根区间。即a=6,b=7。
当预设精度为0.005时:

  • 思路①下所得结果:

该方程的近似根为:
6.7754
该程序执行的总步数为:
9

  • 思路②下所得结果:

该方程的近似根为:
6.7749
该程序执行的总步数为:
9

(2)y=log(x)+x.*x-3;
图形绘制函数结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I5AYPhjA-1646553203911)(二分图二.png)]
由此可将[-2,-1]及[1,2]视为该函数的有根区间。
当预设精度为0.005时:

  • 思路①下所得结果

该方程的第一个近似根为:
-1.9980
对应执行的总步数为:
9

该方程的第二个近似根为:
1.5918
对应执行的总步数为:
9

  • 思路②下所得结果

该方程的第一个近似根为:
-1.9984
对应执行的总步数为:
9

该方程的第二个近似根为:
1.5932
对应执行的总步数为:
9

(3)y=1+5x-6(x^3)-exp(2*x);
图形绘制函数结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKLCX8CC-1646553203912)(二分图三.png)]
由此可将[-3,2]视为该函数的有根区间。即a=-3,b=2。
当预设精度为0.005时:

  • 思路①下所得结果:

该方程的近似根为:
-0.8174
该程序执行的总步数为:
10

  • 思路②下所得结果:

该方程的近似根为:
0.5042
该程序执行的总步数为:
10

由于该函数在[-1,1]区间上的图像几乎与x轴重叠,所以不同的二分思路得到的结果差值会比较大。此外所得值还会受到区间范围取值设置的影响。

(4)y=cos(x)-sin(x);
图形绘制函数结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MO3XxOR6-1646553203913)(二分图四.png)]
由此可将[0,1]及[3,4]视为该函数的有根区间。
当预设精度为0.005时:

  • 思路①下所得结果:

该方程的第一个近似根为:
0.7871
对应执行的总步数为:
9

该方程的第二个近似根为:
3.9277
对应执行的总步数为:
9

  • 思路②下所得结果:

该方程的第一个近似根为:
0.7967
对应执行的总步数为:
9

该方程的第二个近似根为:
3.9580
对应执行的总步数为:
9


  1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LKlDVPoA-1646553203908)(k的条件判断来源.png)]; ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值