【问题标题】:Approximating sin(x) using Taylor series until absolute value of a term goes below a certain real value使用泰勒级数逼近 sin(x) 直到项的绝对值低于某个实际值
【发布时间】:2020-02-25 00:43:16
【问题描述】:

我想用泰勒级数打印 sin(x) 的值。

我必须添加项直到项的绝对值变为

#include <stdio.h>
#include <math.h>
double val(double, double);
int main(void){

    double x,eps=10e-06;

    printf("\nEnter value of x: ");
    scanf("%lf",&x);

    printf("\nCalculated value: %lf\n",val(x, eps));

    return 0;

}

double val(double x, double eps){

    int i;
    double t=x, sum=0;
    if(fabs(x)<= eps) return 0;

    for(i=1;i<=20; i++){

        sum+=t;
        t*=-(x*x)/((2*i+1)*(2*i));
        if(fabs(t)>=eps) break;
    }
    return sum;
}

但我得到的输出与我的输入相同(即我在输出中得到 x)。

谁能告诉我哪里出了问题。

【问题讨论】:

  • 你从哪里得到泰勒级数的公式?
  • 如果 x 很大,我猜你只会循环一次,当你从 val 返回时 sum == x。
  • @klutt 对不起?我用泰勒级数
  • @Abhay 看起来一点也不像维基百科上的泰勒系列,但它似乎对我一定错过了一些东西。
  • @klutt 你的意思是 x - x^3/3! + x^5/5! - ...?好吧,将其重写为 x - x * x^2 / (2 * 3) + x * x^2 * x^2 / ((2 * 3) * (4 * 5)) - ...

标签: c taylor-series


【解决方案1】:

问题出在这里:

if(fabs(t)>=eps) break;

如果项大于 比 epsilon 值,您将跳出循环。你想检查它是否更少:

if(fabs(t)<eps) break;

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 2015-11-21
    • 2021-08-12
    • 1970-01-01
    • 2018-06-23
    • 2016-06-04
    • 2021-03-19
    • 2017-07-02
    • 2022-07-10
    相关资源
    最近更新 更多