C++ 求解a的立方根 二分法/牛顿迭代法

1. 二分法

我们二分法的循环终止条件while(right-left<0.001),接着中间是正常的二分法。

它要求立方根精确到小数点后一位,这里要注意。

注意输出的话,因为有要求,所以不能直接用cout,而是用printf(".1lf",mid)

#include<iostream>
using namespace std;
int main(){
    double a;
    cin>>a;
    double left=1.0,right=a,mid;
    while(right-left>0.001){
        mid=left+(right-left)/2;
       if(mid*mid<a/mid){
            left=mid;
        }
        else {
            right=mid;
        }
}
    printf("%.1lf",mid);
    return 0;
}

注意:这里的left=mid,right=mid;

 

2. 牛顿迭代法:

简言之最终就是有这么一个公式:x(n+1)=x(n)-f(xn)/f'(xn),当迭代到一定的程度,x(n+1)和x(n)相等,将它们统一当做根x的话,就有x=x-f(x)/f'(x).

那么我们要求立方根的话,就是f(x)=x^3-y,令f(x)=0,即为y的立方根。

代入上面的公式有:x=x-(x^3-y)/(x^3-y)'=(2*x+y/x/x)/3,这里用迭代法即可,这里的y即为题目要求的a

#include<iostream>
#include<cmath>
using namespace std;
int main(){
    double a;
    cin>>a;
    double x=1.0;
    for(x;abs(x*x*x-a)>1e-7;x=(2*x+a/x/x)/3){//不断迭代
}
    printf("%.1lf",x);
    return 0;
}

 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值