R语言自定义函数,实现二分法求根

  近期在数值分析中学习了非线性方称求根方法中的“二分法查找”,考虑用R语言实现。

例题是参考的【数值分析】二分法求方程的根(附matlab代码)_matlab二分法求方程根的程序-优快云博客

(侵删)

自编二分法查找函数的代码:

Bisecfunc <- function(funcexp, low, up, w = 0.001, n_max = 1000){
  f_1 = funcexp(low) # 左边界函数值
  f_2 = funcexp(up)  # 右边界函数值
  n = 0 # 迭代次数
  
  while(f_1 * f_2 != 0){
    if (f_1 * f_2 > 0){
      cat("提供的初始区间不包含零点")
    }else{
      mid = (low + up)/2  # 中点
      n = n + 1 # 进行了一次迭代,迭代次数加1
      result = f_1 * funcexp(mid)
      if (result  == 0){
        cat("迭代停止!\n","零点在:", mid, "\n", "共迭代:", n, "次")
        break  # 终止迭代
      }else{
        if (result < 0){
          up = mid # 更新上端点
        }else{
          low = mid  # 更新下端点
        }
      }
      if (abs(up - low) < w){   # 满足误差要求, 停止迭代
        cat("迭代停止!\n","找到满足近似解的x为:", mid, "\n", "共迭代:", n, "次")
        break
      }
    }
    if ( n > n_max){
      cat("已经达到最高迭代次数",n_max,  "\n", "当前找到的x的值为:", mid)
      break
    }
    cat("已经迭代次数:", n, "\n")
  }
}


 

例题1:找x^2 - x - 1 = 0的根,初始区间为0,1,要求根有三位小数

# 自定义目标函数
myfunc1 <- function(x_value){
  out = x_value**2 - x_value - 1
  return(out)
}
Bisecfunc(myfunc1, 1, 2, 0.05) # 调用自定义的二分法求根函数

运行结果:

例题2:

用二分法求方程 e^x + 10 ∗ x − 2 = 0的根,要求根有3位小数。

# 自定义函数

myfunc2 <- function(x_value){
  out = exp(x_value) + 10 * x_value - 2
  return(out)
}

# 调用二分法求根函数

Bisecfunc(myfunc2, 0, 1, 0.0005)

运行结果:


PS:目前这个函数在迭代次数统计等方面还有一些细节问题,欢迎指正交流~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值