一、题目描述

描述:

  • 计算一个数字的立方根,不使用库函数。
  • 函数原型double getCubeRoot(double input)

输入:

待求解参数 double类型

输出:

输出参数的立方根,保留一位小数

样例输入:

216

样例输出:

6.0

二、解题报告

本题要求一个数的立方根的近似值,精确到小数点后的一位。这里使用 牛顿迭代法 求近似值。

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

设 r 是的根,选取 x0 作为 r 的初始近似值:

  • 过点(x0,f(x0))做曲线y=f(x)的切线L,L的方程为 y=f(x0)+f′(x0)(x−x0),求出L与x轴交点的横坐标 x1=x0−f(x0)f′(x0),称 x1为 r 的一次近似值。

  • 过点 (x1,f(x1)) 做曲线 y=f(x) 的切线,并求该切线与x轴交点的横坐标 x2=x1−f(x1)f′(x1),称 x2 为 r 的二次近似值。

  • 重复以上过程,得 r 的近似值序列。其中, xn+1=xn−f(xn)f′(xn) 称为 r 的 n+1 次近似值,上式称为牛顿迭代公式


首先确定我们的函数 f(x):

f(x)=x3−m

其中 m 是一个常数,程序的输入。求导函数:

f′(x)=3x2

代码如下:

#include <iostream>
#include <iomanip>
using namespace std;
#define E 0.01 double f(double x, double num) // 函数
{
return x*x*x-num;
} double _f(double x) // 导函数
{
return 3*x*x;
} double getCubeRoot(double input)
{
double x0;
double r = 1;
do
{
x0 = r;
r = x0 - f(x0,input)/_f(x0);
} while(f(r,input) > E || f(r,input) < -E); return r;
} int main()
{
double x;
cin >> x;
double result = getCubeRoot(x);
cout << fixed << showpoint << setprecision(1) << result << endl;
return 0;
}

个人站点:http://songlee24.github.com

华为OJ1964-求解立方根(牛顿迭代法)的更多相关文章

  1. NOIP2001 一元三次方程求解[导数+牛顿迭代法]

    题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...

  2. Java实现牛顿迭代法求解平方根、立方根

    一.简介 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. ...

  3. 牛客网 python 求解立方根

    •计算一个数字的立方根,不使用库函数 详细描述: •接口说明 原型: public static double getCubeRoot(double input) 输入:double 待求解参数 返回 ...

  4. Atitit 迭代法  “二分法”和“牛顿迭代法 attilax总结

    Atitit 迭代法  "二分法"和"牛顿迭代法 attilax总结 1.1. ."二分法"和"牛顿迭代法"属于近似迭代法1 1. ...

  5. 牛顿迭代法解指数方程(aX + e^x解 = b )

    高中好友突然问我一道这样的问题,似乎是因为他们专业要做一个计算器,其中的一道习题是要求计算器实现这样的功能. 整理一下要求:解aX + e^X = b 方程.解方程精度要求0.01,给定方程只有一解, ...

  6. 牛顿迭代法(Newton's Method)

    牛顿迭代法(Newton's Method) 简介 牛顿迭代法(简称牛顿法)由英国著名的数学家牛顿爵士最早提出.但是,这一方法在牛顿生前并未公开发表. 牛顿法的作用是使用迭代的方法来求解函数方程的根. ...

  7. sqrt()平方根计算函数的实现2——牛顿迭代法

    牛顿迭代法: 牛顿迭代法又称为牛顿-拉夫逊方法,它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法.多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特 ...

  8. 牛顿迭代法(Newton's Method)

    牛顿迭代法(Newton's Method) 简介 牛顿迭代法(简称牛顿法)由英国著名的数学家牛顿爵士最早提出.牛顿法的作用是使用迭代的方法来求解函数方程的根.简单地说,牛顿法就是不断求取切线的过程. ...

  9. 牛顿迭代法(Newton&#39;s Method)

    牛顿迭代法(简称牛顿法)由英国著名的数学家牛顿爵士最早提出.可是,这 一方法在牛顿生前并未公开发表(讨厌的数学家们还是鼓捣出来了) 牛顿法的作用是使用迭代的方法来求解函数方程的根. 简单地说,牛顿法就 ...

随机推荐

  1. swift 即使不使用oc的动态派发机制也应该借鉴isa类型识别机制

    目前的消息派发机制真的很鸡肋. 简直是一堆狗屎. 类型信息中包含所有需要动态派发的函数:这个包含两类:类和protocol: 在编译时,首先搜索动态派发列表: 动态派发列表没有,在搜索静态派发列表: ...

  2. CSS3 radio 或checkbox 自定义 样式

    .style-radio {position:relative;width:15px;height:15px;outline:none;} .style-radio:after {position:a ...

  3. C# 设置系统环境变量

    using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; ...

  4. 梦想CAD控件,用于浏览和编辑DWG文件,在脱离AUTOCAD的情况下独立运行,相当于简易CAD

    (百度百科连接) 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 2010开发,最早从2007年第一个版本完成,经过多年的累积已经非常 ...

  5. 计算机内存数据存储基本原理----寄存器和RAM的电路基础

    计算机里存储数据主要有这几个部件:CPU里的寄存器和缓存.内存(内存条)和磁盘,这里我们主要简单讲下寄存器和内存条的基础实现电路. 在前面的文章<CPU怎么计算1+1----CPU计算的电路基础 ...

  6. 根据截至日期格式获取倒计时&&时间戳转日期格式

    //时间戳转日期格式,传入时间戳必须为数字类型function currentDate(shijianchuo) { var date = new Date(shijianchuo); var y = ...

  7. Java随机数使用

    JAVA取随机数的三种方式: Math.random() System.currentTimeMillis() random.nextInt() 废话不多说,看代码: /** *取单个随机数 *Mat ...

  8. 基础知识:if条件、while循环、for循环 相关练习

    1.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败! while True: name = input('请输入用户名:') psw = inpu ...

  9. python 网络编程基础

    1. 内容回顾补充 [] [^] 带有特殊意义的元字符到字符组内大部分都会取消它的特殊意义. 会取消的: [()+*.] -[(-)] -的位置决定了它的意义,写在字符组的第一个位置/最后一个位置就表 ...

  10. HTML5中手势原理分析与数学知识的实践

    摘要:在这触控屏的时代,人性化的手势操作已经深入了我们生活的每个部分.现代应用越来越重视与用户的交互及体验,手势是最直接且最为有效的交互方式,一个好的手势交互,能降低用户的使用成本和流程,大大提高了用 ...