99

牛顿迭代法。设f(x)=x3-y, 求f(x)=0时的解x,即为y的立方根。

根据牛顿迭代思想,xn+1=xn-f(xn)/f'(xn)即x=x-(x3-y)/(3*x2)=(2*x+y/x/x)/3;

#include

inline double abs(double x){return (x>0?x:-x);}

double cubert(const double y){

double x;

for(x=1.0;abs(x*x*x-y)>1e-7;x=(2*x+y/x/x)/3);

return x;

}

int main(){

for(double y;~scanf("%lf",&y);printf("%.1lf\n",cubert(y)));

return 0;

}

编辑于 2016-08-12 13:43:08

回复(25)

29

import java.util.*;

public class Main

{

// 使用二分查找算法

public static double getCubeRoot(double input)

{

double min = 0;

double max = input;

double mid = 0;

// 注意,这里的精度要提高一点,否则某些测试用例无法通过

while ((max - min) > 0.001)

{

mid = (max + min) / 2;

if (mid * mid * mid > input)

max = mid;

else if (mid * mid * mid < input)

min = mid;

else

return mid;

}

return max;

}

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

while (sc.hasNext())

{

double input = sc.nextDouble();

double result = getCubeRoot(input);

System.out.printf("%.1f\n", result);

}

sc.close();

}

}

发表于 2016-08-12 15:20:51

回复(17)

21

命f(x) = x^3 - a,求解f(x) = x^3 - a = 0。

利用泰勒公式展开,即f(x)在xo处的函数值为:

f(x) = f(xo) +f'(xo)(x-xo) = xo^3-a+3xo^2(x-x0) = 0,

解之得:x = xo - (xo^3 - a) / (3xo^2)。 #include

#include

double fun(double n) {

double x = 1.0;

while(fabs(x*x*x - n) > 1e-9)

x = x - ((x*x*x - n) / (3*x*x));

return x;

}

int main() {

int number;

scanf("%d", &number);

double ans = fun(number*1.0);

printf("%.1f", ans);

return 0;

}

求平方根用一个套路@_@:

命f(x) = x^2 - a,求解f(x) = x^2 - a = 0。

利用泰勒公式展开,即f(x)在xo处的函数值为:

f(x) = f(xo) +f'(xo)(x-xo) = xo^2-a+2xo(x-x0) = 0,

解之得:x = (x+a/xo) / 2。

编辑于 2019-03-07 21:48:46

回复(8)

8

采用二分l=1,r=输入数,结束条件是l-r<0.001即可。 #include

using namespace std;

int main(){

int a;

cin>>a;

double l=1,r=a;

double temp;

while((r-l)>0.001){

temp=(l+r)/2;

if(temp*temp*temp>a)r=temp;

else l=temp;

}

printf("%.1lf",temp);

return 0;

}

编辑于 2020-03-20 23:45:29

回复(5)

17

# 牛顿迭代

a = float(raw_input())

e = 0.0001

t = a

while abs(t*t*t - a) > e:

# x(i+1) = x(i) - f(xi)/f(xi)'

t = t - ( t*t*t - a )* 1.0 / (3 * t*t)

print "%.1f" %t

发表于 2016-08-05 23:44:14

回复(1)

4

感觉这个小题确实不需要牛顿出山吧。用查找方式

#include  using namespace std;

//查找方式

int main()

{

double dv;

while(cin>>dv){

for(double i=0; i!=dv; i+=1) {

if(i*i*i == dv) {

printf("%0.1f\n", i);

break;

} else if(i*i*i > dv) {

for(double j=i-1; j

if(j*j*j > dv) {

if((j-0.05)*(j-0.05)*(j-0.05) > dv)

printf("%0.1f\n", j-0.1);

else

printf("%0.1f\n", j);

goto _END;

}

}

}

}

_END:

dv=0;

}

}

编辑于 2019-08-09 22:32:17

回复(1)

3

#include

#include

using namespace std;

double gCR(double num);

int main()

{

double num;

cin>>num;

cout<

return 0;

}

double gCR(double num)

{

double x=0; //定义最终要返回的结果

double step = 1; //步长

while(1)

{

//如果将要大于输入值,改变步长

if((x+step)*(x+step)*(x+step)>num)

{

step /= 10;

//不知道为什么至少要有三位小数才能正确四舍五入到一位

//所以这里循环多了一点

if(step == 0.0001)

{

break;

}

continue;

}

x += step;

}

return x;

} 3ms还可以

编辑于 2020-07-16 12:59:41

回复(2)

3

#include

#include

//牛顿法

using namespace std;

double newton(double a){

double x = 1;

while (((x*x*x - a) >= 1e-7) || ((a - x*x*x) >= 1e-7)){

x = (x - x / 3 + a / (3 * x*x));

}

return x;

}

int main(){

double num;

while (cin >> num){

cout << setprecision(1) << fixed << newton(num) << endl;

}

return 0;

}

发表于 2017-06-05 09:37:03

回复(0)

4

#include

#include

#include

using namespace std;

int main()

{

double input;

cout << fixed; //小数点后一位

cout.precision(1);

while (cin >> input) //只考虑正数的情况

cout << (double)exp(1.0 / 3 * log(input)) << endl; //利用指数和对数相结合的思想

return 0;

}

发表于 2016-08-22 22:09:42

回复(3)

2

//二分法

#include

#include

using namespace std;

double getCubeRoot(double start, double end, double input){

double mid = (end+start)/2;

if(mid*mid*mid-input<0.0000001 && mid*mid*mid-input>-0.00000001)

return mid;

if(mid*mid*mid-input>0)

return getCubeRoot(start,mid,input);

return getCubeRoot(mid,end,input);

}

int main(){

double data;

while(cin>>data){

double res = getCubeRoot(0,data,data);

printf("%.1f",res);

}

}

编辑于 2020-02-28 22:58:03

回复(3)

2

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner cin = new Scanner(System.in);

while(cin.hasNext()) {

double input = cin.nextDouble();

double min = 0;

double max = input;

while(max - min > 0.00001) {

double temp = (min + max) / 2;

if(temp*temp*temp > input) {

max = temp;

} else {

min = temp;

}

}

min*=10;

double small = min - (int)min;

if(small >= 0.5) {

min++;

}

int n = (int)min;

min=(double)n/10;

System.out.println(min);

}

}

}

发表于 2016-03-28 10:24:47

回复(4)

3

求解给定值的立方根:

1、利用Scanner接收键入值。

2、利用牛顿迭代法求解立方根,牛顿迭代求解公式(1)所示,令键入值为y,定义函数

,则本题的迭代公式如(2),直至等式(3)成立停止迭代。

tips: 四舍五入保留1位小数位的做法可以利用String的静态方法format(“%.1f”, x),其中%表示小数点前的位数,1表示保留小数点后1位,f表示转换位float型(找过一下好像没有可以转换为double的)

(1)

(2)

(3)

import java.util.Scanner;

public class Main{

public static void main(String[] args){

Scanner input = new Scanner(System.in);

while (input.hasNextDouble()){

double num = input.nextDouble();

double x = 1.0;

for (; Math.abs(Math.pow(x,3)-num)>1e-3; x=x-((Math.pow(x,3)-num)/(3*Math.pow(x,2))));

System.out.println(String.format("%.1f", x));

}

}

}

发表于 2020-02-23 16:45:26

回复(1)

12

python one line: import math

print(round(math.pow(int(input()),1/3),1))

编辑于 2017-09-08 10:12:40

回复(5)

3

#include

using namespace std;

int main()

{

double n,m;

cin>>n;

m=pow(n,1.0/3);

printf("%.1f",m);

return 0;

}

发表于 2017-08-17 11:23:37

回复(5)

2

#include

#include

using namespace std;

int main()

{

double d;

double x=10000.0;

cin>>d;

while(abs(x*x*x-d)>0.000001)

{

x=x-(x*x*x-d)/(3*x*x);

}

printf("%.1lf\n",x);

return 0;

} 可以拓展为,求一元3次方程ax^3+bx^2+cx+d=0的解:↓

比如 x^3-27=0,我们就可以输入1 0 0 -27,这样我们就可以得到一个解 #include

#include

using namespace std;

int main()

{

double diedai(double a,double b,double c,double d,double x);

double a,b,c,d;

double x=10000.0;

cout<

cin>>a>>b>>c>>d;

x=diedai(a,b,c,d,x);

cout<

return 0;

}

double diedai(double a,double b,double c,double d,double x)

{

while(abs(a*x*x*x+b*x*x+c*x+d)>0.000001)

{

x=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);

}

return x;

}

编辑于 2020-02-27 19:11:52

回复(0)

1

# 牛顿迭代法求解立方根的思路:

# 令f(x) = x^3 - a,求解f(x) = x^3 - a = 0。

# 利用泰勒公式展开,即f(x)在x0处的函数值为:

# f(x) = f(x0) +f'(x0)(x-x0) = (x0^3-a) + (3x0^2)(x-x0) = 0,

# 解之得:x = x0 - (x0^3 - a) / (3x0^2)。

#     即 x = x - ((x*x*x - n) / (3*x*x));

# 拓展:求平方根用一个套路:

# 令f(x) = x^2 - a,求解f(x) = x^2 - a = 0。

# 利用泰勒公式展开,即f(x)在x0处的函数值为:

# f(x) = f(x0) +f'(x0)(x-x0) = (x0^2-a) + 2x0(x-x0) = 0,

# 解之得:x = x0 - (x0^2 - a) / 2x0

#     即 x = x - (x*x-a)/2x 可进一步化简为:=(x+a/x) / 2。

# 总结:

# 平方根与立方根的求解迭代公式:

# 新x = 旧x - f(x)/f'(x)

# 新x = 旧x - (x平方或者立方与输入数a的差)/f(x)求导数

# 法一:牛顿迭代法

a = float(input().strip())  # 获取输入的实数a

e = 0.0001  # 设定一个精度值

t = a  # 初始化立方根t的值为输入的值a

while abs(t*t*t - a) > e:  # 差值没有达到精度,便一直更新立方根

# x(i+1) = x(i) - f(xi)/f'(xi)

# 更新后的x = 原x - (原x的立方-a)/f(原x)导数

t = t - (t*t*t - a) * 1.0 / (3 * t*t)

print("%.1f" % t)  # 当精度达到要求时,此时的立方根t便为输入实数的立方根解。

# 法二:二分法

a = float(input().strip())

epsilon = 0.0001

low = min(-1.0, a)

high = max(1.0, a)

ans = (low + high)/2

while abs(ans**3 - a) >= epsilon:

if ans**3 < a:

low = ans

else:

high = ans

ans = (low + high)/2.0

print('%.1f' % ans)

编辑于 2020-12-25 11:36:13

回复(0)

1

java二分查找

import java.util.Scanner;

public class Main{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

double target = sc.nextDouble();

double left = 0, right = target, mid;

while(right - left > 0.01){

mid = left + (right - left) / 2;

if(mid * mid * mid < target)

left = mid;

else

right = mid;

}

System.out.printf("%.1f", right);

}

}

发表于 2020-07-28 16:59:33

回复(0)

1

#include

#include

int main()

{

double input;

scanf("%lf",&input);

double low=0,high=input;

double mid = (low+high)/2.0;

while(fabs(input-mid*mid*mid)>0.001)

{

if(mid*mid*mid > input)

{

high = mid;

}else

{

low = mid;

}

mid = (low+high)/2.0;

}

printf("%.1f",mid);

return 0;

}

发表于 2020-07-22 00:20:45

回复(0)

1

工程代码写多了,变笨了,我首先想的是为了稳定,先把特殊情况的处理逻辑写了,然后在根据需求,划分出四种情况,(-∞,-1),(-1,0),(0,1),(1,+∞),然后先用二分法写1到+∞的情况,然后其他情况就是改一下左右边界与更新中间点的逻辑了。

double getCubeRoot(double input)

{

if(input == 0)

return 0;

if(input == 1)

return 1;

if(input == -1)

return -1;

if(input > 1)

{

return getCubeRootGreaterThan1(input);

}

if(input < -1)

{

return getCubeRootSmallerThan_1(input);

}

if((input > 0) && (input < 1))

{

return getCubeRoot01(input);

}

if((input > -1) && (input < 0))

{

return getCubeRoot_10(input);

}

}

#define NUMS (0.0001)

double getCubeRootGreaterThan1(double input)

{

double left,right,middle;

left = 1;

right = input;

start:;

middle = (left + right) / 2;

double temp = middle * middle * middle;

temp = temp - input;

if((temp < NUMS) && (temp > (-NUMS)))

{

return middle;

}

if(temp < 0)

{

left = middle;

goto start;

}

if(temp > 0)

{

right = middle;

goto start;

}

}

发表于 2020-07-20 10:48:44

回复(1)

1

import java.util.Scanner;

public class Main{

public static void main(String[] args){

Scanner scanner = new Scanner(System.in);

while(scanner.hasNext()){

try{

double dou = scanner.nextDouble();

System.out.printf("%.1f\n",getCubeRoot(dou,1.0));

//System.out.printf("%.1f\n",getCubeRoot2(dou,0,dou));

}catch(Exception e){

System.out.println("输入类型错误!");

}

}

scanner.close();

}

//方法一:牛顿迭代法

//命f(x) = x^3 - a,求解f(x) = x^3 - a = 0。

//利用泰勒公式展开,即f(x)在xo处的函数值为:

//f(x) = f(xo) +f'(xo)(x-xo) = xo^3-a+3xo^2(x-x0) = 0,

//解之得:x = xo - (xo^3 - a) / (3xo^2)。

public static double getCubeRoot(double target, double Num){

if(Math.abs(Num*Num*Num-target)>1e-9){

Num = Num - (Num*Num*Num-target)/(3*Num*Num);

return getCubeRoot(target,Num);

}

return Num;

}

//方法二:二分查找法

public static double getCubeRoot2(double target, double min, double max){

if((max-min)>1e-9){

double mid = (max+min)/2;

if(mid*mid*mid>target){

return getCubeRoot2(target,min,mid);

}else if(mid*mid*mid

return getCubeRoot2(target,mid,max);

}else{

return mid;

}

}else{

return max;

}

}

}

发表于 2020-07-09 10:32:39

回复(0)

python求解立方根_求解立方根相关推荐

  1. java中求立方根_求解立方根

    0 夹逼法==二分法 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scan ...

  2. 割线法求解过程_求解稀疏优化问题2——临近点方法+半光滑牛顿法

    这篇文章是我之前一篇文章的兄弟篇,没看过的可以看下面这个. 邓康康:求解稀疏优化问题--半光滑牛顿方法​zhuanlan.zhihu.com 我们考虑的问题仍然是如下的一般问题: 其中 ,并且 特别大 ...

  3. python解矩阵方程_用Python代写的Numpy求解线性方程组

    在本文中,您将看到如何使用Python的Numpy库解决线性方程组. 什么是线性方程组? 维基百科将线性方程组定义为: 在数学中,线性方程组(或线性系统)是两个或多个涉及同一组变量的线性方程的集合. ...

  4. pythonchar中的拟合方法_在python中利用numpy求解多项式以及多项式拟合的方法

    构建一个二阶多项式:x^2 - 4x + 3 多项式求解 >>> p = np.poly1d([1,-4,3]) #二阶多项式系数 >>> p(0) #自变量为0时 ...

  5. python解常微分方程龙格库_求解二阶常微分方程的RungeKutta四阶方法

    我试着做一个简谐振子的例子,它将用龙格-库塔四阶法求解.要求解的二阶常微分方程(ODE)和初始条件为: y''+y=0 y(0)=0和y'(0)=1/pi 范围在0到1之间,共有100步.我用u作为辅 ...

  6. 用python解矩阵方程_用Python的Numpy求解线性方程组

    原文链接:拓端数据科技 / Welcome to tecdat​tecdat.cn 在本文中,您将看到如何使用Python的Numpy库解决线性方程组. 什么是线性方程组? 维基百科将线性方程组定义为 ...

  7. 如何用python求解方程组_用Python的Numpy求解线性方程组

    在本文中,您将看到如何使用Python的Numpy库解决线性方程组. 什么是线性方程组? 维基百科将线性方程组定义为:在数学中,线性方程组(或线性系统)是两个或多个涉及同一组变量的线性方程的集合. 解 ...

  8. python调用cplex求解装箱问题_装箱问题的CPLEX求解

    装箱问题(Bin Packing Problem) 装箱问题即搬家公司问题.一个搬家公司有无限多的箱子,每个箱子的承重上限为W,当搬家公司进入一个房间时,所有物品都必须被装入箱子,每个物品的重量为wi ...

  9. em算法python代码_EM 算法求解高斯混合模型python实现

    注:本文是对<统计学习方法>EM算法的一个简单总结. 1. 什么是EM算法? 引用书上的话: 概率模型有时既含有观测变量,又含有隐变量或者潜在变量.如果概率模型的变量都是观测变量,可以直接 ...

最新文章

  1. SAP携欧洲众巨头建立“工业4.0开放联盟”
  2. SAP采购订单抬头、行项目屏幕增强的两种方法
  3. Coursera吴恩达《神经网络与深度学习》课程笔记(3)-- 神经网络基础之Python与向量化
  4. Html5做webapp中界面适配的问题总结
  5. 解决ASP.NET Core部署到IIS,更新项目另一个程序正在使用此文件,进程无法访问...
  6. android照片编辑软件,照片编辑免费软件下载-照片编辑软件app下载 v7.45最新版_5577安卓网...
  7. java 实现验证码功能
  8. Predictably Irractional - 所有权的高昂代价
  9. Java 反射和映射
  10. java数据采集_基于Java的数据采集(终结篇)
  11. vue项目IE浏览器中打不开,为空白页
  12. 圆的内接正n边形的周长
  13. 上偏续关系哈斯图_A={a,b,c}定义在P(A)上的包含关系是一个偏序关系,哈斯图怎么画?...
  14. 如何拿下头条号原创标?这里有份6000字的指南
  15. 绝了!一个妹子 rm -rf 把公司整个数据库删没了...
  16. 如何给微信公众号增加留言功能?
  17. SpringSecurity 安全框架
  18. AE制作粒子飘雪效果
  19. cad二次开发c#学习记录4——导出图纸标注的尺寸
  20. linux下mv命令参数详解,linux下的mv命令使用详解

热门文章

  1. siesta在Linux运行,并行版的SIESTA不能运行
  2. paddle 图标注_安卓|尺寸标注工具,让标注更加方便
  3. php开启sockets模块,wdlinux 增加php的sockets模块
  4. 【HTML】【JS】【CSS】实现可移动div窗体,超出浏览器大小将返回边缘。
  5. 数据结构 找树根和孩子(树)
  6. 浅谈JdbcDaoSupport
  7. 天创速盈:拼多多商家提升投产比有什么技巧?
  8. 【转载】SQL Server dateTime类型 模糊查询
  9. 数学建模美赛写作技巧
  10. VS 2010错误提醒: 必需属性“VSInstallDir”缺失或为空 以及 error MSB8008