华为OJ(求解立方根)
2015-08-18 12:04
246 查看
描述:
计算一个数字的立方根,不使用库函数。
函数原型
输入:
待求解参数 double类型
输出:
输出参数的立方根,保留一位小数
样例输入:
样例输出:
设 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
计算一个数字的立方根,不使用库函数。
函数原型
double getCubeRoot(double input)
输入:
待求解参数 double类型
输出:
输出参数的立方根,保留一位小数
样例输入:
<code class="hljs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">216</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
样例输出:
<code class="hljs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">6.0</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li></li></ul>常见的用牛顿迭代法,即可解决。
设 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; double getCubeRoot(double); const double err=0.01; int main() { double m; cin>>m; double result = getCubeRoot(m); cout << fixed << showpoint << setprecision(1) << result << endl; //system("pause"); return 0; } double getCubeRoot(double m) { double x0,xn=1; double y=xn*xn*xn; while(y-m>err||y-m<-err) { x0=xn; xn=x0-(x0*x0*x0-m)/(3*x0*x0); y=xn*xn*xn; } return xn; }
相关文章推荐
- Mysql5.7.8安装文档(二进制安装)
- 163源
- hdu 1285 确定比赛名次(拓扑排序)
- Web API数据传输加密
- 【.Net码农】RDLC报表显示外部图片方法
- KVC KVO KVB
- 进程内存空间的划分(代码区,全局区,BSS段,栈区,堆区,只读常量区)
- PHP的命令行命令使用指南
- 自我效能感
- LeetCode Valid Parentheses
- java 之 面向对象
- gsonformat 快速编辑实体类(伪原创)
- LeetCode Valid Parentheses
- HTML5新api即pushState和replaceState实现无刷新修改url
- mongoDB分组
- 使用Acegi的标签库<authz:authorize>
- java.lang.IllegalAccessError: class com.google.protobuf.HBaseZeroCopyByteString
- ITIL该研究的结论(互联网思维的结合)
- java.lang.IllegalAccessError: class com.google.protobuf.HBaseZeroCopyByteString
- B/S简介