当前位置: 首页 > 知识库问答 >
问题:

辛泰勒级数递推逼近

黄丰
2023-03-14

我需要对我的递归方法的一些洞察力来计算辛泰勒级数,它不能正常工作。该方法调用了另外两个递归方法,即递归pow方法和递归阶乘方法。我将我的发现与迭代罪方法进行了比较,给了我正确的解决方案。我的递归罪方法中缺少什么?

sin(x)= x - x^3/3的近似值!x^5/5!-x^7/7!...

public class SinApprox
    {
        public static void main (String [] args)
        {
            Out.println(sinx(1, 1, 2, 1, 1, 0, 1));
            Out.print(sinIT(2));
        }

    static double sinIT(double x)
    {
        double sin = 0;
        double a = x;
        double b = 1;
        double term = a/b;
        double vz = 1;
        double i = 1;

    while(term > 0.000001)
    {
        i = i +2;
        sin = sin + (term*vz);
        a= rekursivPow(x,i);
        b = rekursivN(i);
        term = a/b;
        vz = -1 * vz;
    }
    return sin;
}

static double rekursivN(double n)
{
    if(n==1)
    {
        return 1;
    }
    return n * rekursivN(n-1);
}

static double rekursivPow(double x , double y)
{
    if(y  == 1)
    {
        return x ;
    }
    return x * rekursivPow(x , y  - 1);
}

static double sinx(double i ,double n, double x, double y, double vz, double sum, double pow)
{


    double term = pow / n;

    if(term > 0.000001)
    {
        sum = sum + (term * vz);
        vz = -1 * vz;
        i = i +2;
        n = rekursivN(i);
        y = y +2;
        pow = rekursivPow(x ,y);

        return sinx(i, n, x , y , vz, sum, pow);
    }
    return sum;


   }
}

共有1个答案

穆旭尧
2023-03-14

第一步是以使递归关系清晰的方式写出函数(您不能为不清晰的内容编写代码),因此,不要从以下内容开始:

sin(x)= x - x^3/3! + x^5/5! -x^7/7!+ ...

相反,你应该问“我如何才能让所有带有< code>x的术语看起来都一样”:

sin(x)= x^1/1! - x^3/3! + x^5/5! + ...

好的开始,但是如果我们递归,我们真正需要的是只计算其中一个项,然后用更新的参数调用自己来计算下一个项。理想情况下,我们想要这样的东西:

doThing(args) {
  return simpleComputation() + doThings(updatedargs);
}

然后递归完成剩下的工作。因此,让我们首先确保我们只需要处理而不是混合 和 -

sin(x)= (-1)^0 * x^1/1! + (-1)^1 * x^3/3! + (-1)^2 * x^5/5! + ...

现在你有了一个可以用递归关系表示的东西,因为:

sin(x,n) {
  return (-1)^n * x^(2n+1) / (2n+1)! + sin(x, n+1);
}

使用“快捷方式”功能:

sin(x) {
  return sin(x,0); 
}

这就是提示停止的地方,您应该能够自己实现剩下的部分。只要你记得停止递归,因为泰勒级数是无穷的,而计算机程序和资源不是。

 类似资料:
  • 这是我的代码: 但它不起作用并显示此错误:

  • 在数学中,泰勒级数对于用低次多项式逼近函数是很重要的。 我想看看这样的近似如何有帮助,例如为了加快计算速度。让我们使用著名的泰勒级数: 从道德上讲,计算2次多项式的值应该比计算快得多。 因此,一个测试代码: 为什么多项式法比实际测井慢10倍?我期待的正好相反。 PS:这个问题可能在SO和math.SE.

  • 我使用泰勒级数来计算< code>sin()。对原罪的泰勒级数是: 我使用的实现如下所示: 据我所知,该代码是多项式的项的近似(换句话说,该近似是从零到 系列编写相同类型的实现。 你能帮我理解一下吗?

  • 我有一个作业,教授要我们用泰勒级数计算sin(x)。他希望我们在两个连续分数之间的差小于10^-6时停止迭代。 最后,我说,例如x^5/5!与(x^3/3!)*相同(x^2/4*5),所有分数都是如此。所以我可以保留之前计算的分数,并在下一次迭代中使用。问题是,我最终得到的数字与它的实际罪过有点偏差,我不知道为什么。提前谢谢。这是我的代码:

  • 我试着做x正弦的泰勒展开,但是如果x大于150度,函数就会发散。 这是我的代码: 在这里,我将自治领绑定为[0,2pi]。 这里,我定义了一个阶乘函数 这是sin(x)的Taylor(Maclaurin)级数展开式 } 问题是它必须在[0,2pi]中为x定义,所以我不知道该怎么做。 谢谢

  • 目前,我们正在将我们的软件与Thales Payshield 9000 HSM集成,存在以下问题: 我们在使用GK(RSA公钥下的导出密钥)命令时遇到困难。我们使用A0命令成功地生成了DEK密钥。我们还使用EO命令成功地将公钥导入HSM。现在我们想使用导入的公钥导出DEK密钥。为此,我们使用GK命令。在向HSM发送命令后,我们从HSM得到响应,错误代码为15(表示“输入数据无效…”)。我们无法找到