创建一个用二分法求近似根的函数

root <- function(){
  x = as.numeric(readline("please input the number"))
  if (x<0){
    cat("The number you input is illegal","\n")
    root()
  }
  else{
    epsilon = 0.001
    numGusses = 1
    low = 0
    if(x>1){
      high = x
      
    }
    else{
      high = 1
    }
    ans = (high+low)/2
    while(abs(ans*ans-x)>epsilon){
      numGusses = numGusses+1
      if(ans*ans < x){
        low=ans
      }
      else{
        high = ans
      }
      ans = (high+low)/2.0
    }
    cat("numGuesses = ",numGusses,"\n")
    cat (ans , "is close to square root of", x ,"\n")
  }  
}

时间: 2024-11-11 18:24:37

创建一个用二分法求近似根的函数的相关文章

c程序设计 8.12 用牛顿迭代法求根。方程为:ax^3+bx^2+cx+d=0 ,系数a,b,c,d由主函数输入。求X在1附近的一个实根。求出后由主函数输出.

//https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95/10887580?fr=aladdin#4 //百度牛顿迭代法 #include <stdio.h> #include <math.h> double solut(double a,double b,double c,double d) { double x1=1,x,f,f1; //迭代 do { x=x1; f=((a*x+b

二分法求一元三次方程的一个实数根

一元一次方程的一般形式是$ax+b=0$,很容易解得$x=-\frac{b}{a}$.对于一元二次方程,也有一个简单的求根公式可以解出方程的根.但是一元三次方程的求根公式较为复杂,需分情况,编写程序的复杂度比前两个要大得多. 你可能已经听说过二分查找法,在已排序的数组中查找某一个数的时间复杂度从$O(n)$降到了$O(lg n)$.类似地,我们可以用二分法来求解一个一元三次方程的实数根. 以下是非递归版本的实现.calc函数用于计算方程取某个$x$值时方程左端的值.因为这个函数只是返回一个计算表

Openjudge ch0111/t6253 用二分法求方程的根

这题只是考你最后有没有(r-l)/2而已…… 总时间限制: 1000ms 内存限制: 65536kB 描述 用二分法求下面方程在(-10, 10)之间的一个根. 2x3- 4x2+ 3x- 6 = 0 输入 一个小于1的非负实数e,它的值表示所能允许的误差 输出 一个实数,其值为求得的一个根,要求精确到小数点后8位.若该区间上没有根,则输出“No Solution” 样例输入 0 样例输出 2.00000000 提示 对于一个连续函数f(x),若f(a)*f(b) <= 0,则f(x)在区间[a

计算方法-C/C++牛顿迭代法求非线性方程近似根

把f(x)在x0附近展开成泰勒级数f(x) = f(x0)+f'(x0)(x-x0)+f''(x0)/2!*(x-x0)^2+...然后取其线性部分,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x) = f'(x0)x - x0*f'(x0) + f(x0) = 0f'(x0)x = x0*f'(x0) - f(x0)x = x0 - f(x0)/f'(x0)得到牛顿的一个迭代序列:->x(n+1) = x(n)-f(x(n))/f'(x(n)) 例:求方程f(x) =

二分法求三次方程的根

二分法求根 #include "stdio.h" #define f(x) a*x*x*x+b*x*x+c*x+d int main() { freopen("in.txt", "r", stdin); int a, b, c, d; double x1, x2, x, y1, y2, y; while (scanf("%d%d%d%d", &a, &b, &c, &d) != EOF) { x

链表实现二分法求根

#include<iostream>#include<iomanip>#include<cmath>using namespace std;class poly{public: double c; int e; poly*next;};poly*input();double f(poly*head,double x);double root(poly*head,double a, double b);int main(){ poly*head; double a, b;

42.C#--集合的使用,创建一个集合,里面添加一些数字,求平均值与和,以及最大值,最小值

static void Main(string[] args){//42.集合的使用,创建一个集合,里面添加一些数字,求平均值与和,以及最大值,最小值//创建一个集合ArrayList list = new ArrayList();//向集合添加一些数字list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });//新建sum变量来存储和int sum = 0;//新建一个max来存储最大值int max = (int)list[0];//新建一

用二分法求下面方程在(-10,10)之间的根。【谭浩强第四版课后习题】

用二分法求下面方程在(-10,10)之间的根:2x3-4x2+3x-6=0 编程思路:仿照二分查找,将区间划分为两部分,记录区间左右端点,得到中点.每次运算将中点带入方程: 结果>0:根应该向小一点的值拟合,high=mid; 结果<0:根应该向大一点的值拟合,low=mid; 对于跳出循环的条件,我首先是认为low和high应该无限逼近:while(fabs(low-high)>1e-5),当循环体内结果=0后,便使用break跳出循环:if(temp==0) break;但是没有得到

牛顿迭代法 求方程根

牛顿迭代法 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法.多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要. 方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根.牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根.复根,此时线性