将 Easy Language 代码转换为 C# 代码导致了一些问题

我正在尝试将用简单语言代码编写的数学函数转换为 C#,但我的代码中遇到一个非常简单但非常令人沮丧的错误,即我运行计算的值越多,值就会不断下降。我已附上代码的屏幕截图以及我所返回的内容。我确信这只是我的代码中的一个拼写错误,但我找不到它。如果您需要查看其他内容,请告诉我


这是我的代码:


public static (List<double>, List<double>) CalculateEhlersRoofingFilter(List<double> valuesList, int days)

    {

        List<double> highPassList = new List<double>();

        List<double> roofingFilterList = new List<double>();


        int lowerPeriod = days;

        int upperPeriod = Utils.MinOrMax((int)Math.Ceiling(lowerPeriod / 0.2083));


        double alphaArg = Utils.ToRadians((0.707 * 360) / upperPeriod);

        double alphaCos = Math.Cos(alphaArg);

        double alpha1;

        if (alphaCos != 0)

        {

            alpha1 = (alphaCos + Math.Sin(alphaArg) - 1) / alphaCos;

        }

        else

        {

            alpha1 = 0;

        }


        double a1 = Math.Exp((-1.414 * 3.14159) / lowerPeriod);

        double b1 = 2 * a1 * Math.Cos(Utils.ToRadians((1.414 * 180) / lowerPeriod));

        double c2 = b1;

        double c3 = (-1 * a1) * a1;

        double c1 = 1 - c2 - c3;


            for (int i = 0; i < valuesList.Count; i++)

            {

                double currentValue = valuesList.ElementAt(i);


                double prevValue1, prevValue2, prevFilter1, prevFilter2, prevHp1, prevHp2;

                if (i >= 1)

                {

                    prevValue1 = valuesList.ElementAt(i - 1);

                    prevFilter1 = roofingFilterList.ElementAt(i - 1);

                    prevHp1 = highPassList.ElementAt(i - 1);

                }

                else

                {

                    prevValue1 = currentValue;

                    prevFilter1 = currentValue;

                    prevHp1 = currentValue;

                }

                if (i >= 2)

                {

                    prevFilter2 = roofingFilterList.ElementAt(i - 2);

                    prevValue2 = valuesList.ElementAt(i - 2);

                    prevHp2 = highPassList.ElementAt(i - 2);

                }


我想在我的代码中实现什么:

http://img2.mukewang.com/64bbb0d600011b0605910520.jpg

公式返回什么:

http://img2.mukewang.com/64bbb0e200019c6c04320635.jpg

我正在使用的输入值:

http://img3.mukewang.com/64bbb0f500014d4902020684.jpg

四季花海
浏览 134回答 1
1回答

慕工程0101907

如前所述,如果不确切知道您要查找什么,则可能很难找到问题。但是,我建议将“lowerPeriod”和“upperPeriod”更改为 double 以保持计算的一致性(让值从右侧的 int 分配),并在每个常量后放置一个“D”以强制将它们视为 double 而不是潜在的 int 或 float 等...使用“2D”是“2 作为 double”而不是“2”,后者是“int”,您必须担心不同数字类型的交互,并希望规则按照您期望的方式工作。
打开App,查看更多内容
随时随地看视频慕课网APP