幂级数泰勒逮捕标准问题

问题描述

大家好,我创建了一个 c 程序来处理 taylor taylor 系列的余弦和插值,但我有一个问题。问题是关于函数余弦(通过使用泰勒方法计算),因为程序总是给我 3 或 1 的度数。我的老师说我应该使用这个逮捕标准

x^(2k)/(2k!)<t 其中 t 在我的代码中是 tau ,即容差。真的感谢任何可以帮助我的人!

#include<stdio.h>
#include<math.h>



double read_tolerance();
double put_x();
void cosine(double,double,int &,double);
double Li(int,int,double[],double);
double Pn(int,double);
void interpo_Lagrange(int);


int main()
{
    
    int k=1;
    double cos_initial=1,a=1;
   
    double tau=read_tolerance();
    double x=put_x();   
    cosine (cos_initial,a,k,x,tau);
    interpo_Lagrange(k+1);
return 0;
}
    
double read_tolerance() 
{
    double t;
    
        printf("\n choose the value of tolerance: ");
        scanf("%lf",&t);
    
    return t;
}

double put_x()
{
    double x;
    
    printf("\nput value of  x: ");
    scanf("%lf",&x);
    
    return x;
}

void cosine(double coseno,double a,int &k,double x,double tau)
{
     do {
    a *= pow(-1,k)*((x*x) / (2*k));
    coseno += a;
    k=k+2;
    
}while (a> tau);

printf("value of cosine of %lf is %lf\n",coseno);
printf("degree with taylor is ' %d\n",k);
return ;
}

double Li(int i,int n,double x[],double X){
    int j;
    double prod=1;
    for(j=0;j<=n;j++){
        if(j!=i)
            prod=prod*(X-x[j])/(x[i]-x[j]);
    }
        return prod;
}

double Pn(int n,double y[],double X){
    double sum=0;
    int i;
    for(i=0;i<=n;i++){
        sum=sum+Li(i,n,X)*y[i];
    }
    return sum;
}


void interpo_Lagrange(int n)
{
     int i;  
    printf("the number of data-points are %d:\n",n);
      
    
    
    double x[n];
    double y[n];
    printf("Enter the x data-points:\n");
    for(i=1;i<=n;i++){
        x[i]=Pi*i/(8);
        printf("%lf\n",x[i]);
    }
     
    printf("Enter the y data-points:\n");
    for(i=1;i<=n;i++){
    
    y[i]=cos(Pi*i/(8));
        printf("%lf\n",y[i]);
    }
     
    double X;  
    printf("Enter the value of x for which you want the interpolated value of y(x):\n");
    scanf("%lf",&X);
    printf("The interpolated value is %lf",Pn(n,y,X));
}


解决方法

泰勒级数的实现不正确,这里是正确的

do {
    a *= -((x * x) / ((2 * k - 1) * (2 * k)));
    coseno += a;
    k = k + 1;
} while (fabs(a) > tau);

我希望这能解决您的问题

,

第一个问题是该术语可以是否定的。所以停止标准 必须使用它的绝对值。

另一个问题是使用的公式不正确。分母(阶乘)的计算不正确。

最后一个问题是函数返回计算值更好一点:更清楚。

输出:

cos calculated = 0.707107
Error = -1.14623e-010
#include <iostream>
#include <cmath>

double cosine (double x,double tolerance) {
    double x2 = x*x;
    double term = 1;
    double y = 1;
    int sign = -1;
    int k = 2;
    do {
        term *= x2/(k*(k-1));
        y += sign * term;
        k += 2;
        sign = -sign;
    } while (term > tolerance);
    
    return y;
}

int main() {
    double tolerance = 1.0e-6;
    double angle = 3.141592/4;
    double calculated = cosine (angle,tolerance);
    double exact = cos(angle);
    double err = calculated - exact;
    std::cout << "cos calculated = " << calculated << std::endl;
    std::cout << "Error = " << err << std::endl;
    return 0;
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...