求导然后牛顿迭代求调试
查看原帖
求导然后牛顿迭代求调试
86789
_WAlkingDead楼主2022/11/20 11:27
#include<iostream>
#include<cstring>
#include<iomanip>
#include<cstdio>
using namespace std;
double a[25],b[25];
double l,r;
int n;
double calc(double *A,double x)
{
    double ans=0;
    double c=1;
    for(int i=0;i<15;i++)
    {
        ans+=A[i]*c;
        c=c*x;
    }
    return ans;
}
int main()
{
    cin>>n>>l>>r;
    for(int i=n;i>=0;i--)
    {
        cin>>a[i];
    }
    for(int i=0;i<=n-1;i++)
    {
        b[i]=a[i+1]*(i+1);
    }
    for(int i=0;i<=n-2;i++)
    {
        a[i]=a[i+2]*(i+1)*(i+2);
    }
    a[n-1]=a[n-2]=0;//求原函数的导数 
    double x0=(l+r)/2;
    int T=9999;
    while(T--)
    {
        x0=x0-calc(b,x0)/calc(a,x0);
        if(x0<l)
        x0+=(l+r)/2;
        if(x0>r)
        x0-=(l+r)/2;
    }
    cout<<fixed<<setprecision(5)<<x0;
    return 0;
}
2022/11/20 11:27
加载中...