用中值定理求根

翻看了以前写的使用Newton-Raphson Method求一个数的开方,想到其实也可以用中值定理来实现。
中值定理:f(x)是一个连续性的函数,在[u,v]区间内,当c的值位于f(u)和f(v)之间时,至少存在一个点,满足f(x) = c
当f(u)和f(v)一正一负时,那么在[u,v]之间至少有一个根的存在,这个定理本来就是拿来证明根的存在的,但是其实也可以用来求解根。
把[u,v]的区间不断地缩小,就可以不断地逼近根的值,这不是人干的,但是适合计算机干,理论上,进行无穷次之后,便是根的准确值。当然不可能写个死循环,给定一个精度,当求解的根与实际值相差在精度范围内便退出循环,返回结果。
随手写了一段,可以拿来求根,就可以设计函数来求解无理数的有理数近似值,可以求解函数值等于某一值的x值,可以求解两个函数的交点等等。

bisect <- function(f, u, v, eps){
     if ( f(u) * f(v) > 0)
         stop (" error, select another value for u or v...")
     if ( f(u) < 0) {
         u1 <- u
         v1 <- v
     } else {
         u1 <- v
         v1 <- u
     }
     cnt <- 1
     step <- log2(abs(u1-v1)/eps)
     while ( cnt < step ){
         m <- (u1+v1)/2
         if ( f(m) == 0)
             break
         if ( f(m) < 0 ) {
             u1 <- m
         } else {
             v1 <- m
         }
         cnt <- cnt + 1
     }
     return (m)
 }

zv7qrnb

Related Posts

  1. 俺这学期上数值分析课,学的都是类似的东东。。就是用近似值迭代逼进。

    Reply

    ygc China Unknow Browser Unknow Os Reply:

    好玩不?我数学已经忘光了。。。荒废了太久。。。。。

    Reply

    azalea United States Unknow Browser Unknow Os Reply:

    哈哈 比较好玩啊。。我数学也忘光了。。

    Reply

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>