迭代法

本文详细介绍了数值分析中的两种基本方法——二分法和不动点迭代法。二分法通过不断缩小根所在的区间来求解方程的根,提供了先验误差估计,并给出了R语言的实现代码。不动点迭代法则通过构造适当的迭代公式来逼近方程的根。

(1)二分法

设f(x)是区间[a,b]上的连续函数,f(a)*f(b)<0,

  可知,在[a,b]上必有f(x)一根

 

  令p1=(a+b)/2,

             若f(p1)*f(a)<0,则[a,p1]必有一根,令b1=p1,a1=a,p2=(a1+b1)/2;

             若f(p1)*f(a)>0,则[p1,b]必有一根,令a1=p1,b1=b,p2=(a1+b1)/2;

  重复上述过程n次,可以发现pn必然越来越接近于真值p

 可以发现 先验误差 |pn-p|≤1/2n(b-a)

 若要求预先给定绝对误差ε,则1/2n(b-a)≤ε  =>  2n>(b-a)/ε  

  可以得出终止迭代次数n为(log(b-a)/ε ) /log2

 

 R代码实现: 

//二分迭代法
dichotomy<-function(f,a,b,m=100){

      //f为目标函数,a和b为初始区间,m为迭代次数
       if(f(a)*f(b)>0)
    stop("f(a) and f(b) must have different signs.")
  left<-min(a,b)
  right<-max(a,b)
  p<-(left+right)/2
  n<-1
  while(left<p&&p<right&&n<m){
    n=n+1
    if(sign(left)!=sign(right)&&left!=0&&right!=0){
      p=0
      if(f(p)==0){
        left<-right<-p
        break
      }
    }
    if(sign(f(left))!=sign(f(p))){
      right<-p
    }else{
      left=p
     }
    p=(left+right)/2

  }
  return(list(root=p,f.root=f(p),iter=n,prec=abs(right-left)/2))
}

 

 

 

 

 

(2) 不动点迭代法

 

转载于:https://www.cnblogs.com/renjian1995/p/7252146.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值