C#,数值计算——函数计算,Eulsum的计算方法与源程序

1 文本格式

using System;

namespace Legalsoft.Truffer

{

public class Eulsum

{

private double[] wksp { get; set; }

private int n { get; set; }

private int ncv { get; set; }

public bool cnvgd { get; set; }

private double sum { get; set; }

private double eps { get; set; }

private double lastval { get; set; }

private double lasteps { get; set; }

public Eulsum(int nmax, double epss)

{

this.wksp = new double[nmax];

this.n = 0;

this.ncv = 0;

this.cnvgd = false;

this.sum = 0.0;

this.eps = epss;

this.lastval = 0.0;

}

public double next(double term)

{

if (n + 1 > wksp.Length)

{

throw new Exception("wksp too small in eulsum");

}

if (n == 0)

{

sum = 0.5 * (wksp[n++] = term);

}

else

{

double tmp = wksp[0];

wksp[0] = term;

for (int j = 1; j < n; j++)

{

double dum = wksp[j];

wksp[j] = 0.5 * (wksp[j - 1] + tmp);

tmp = dum;

}

wksp[n] = 0.5 * (wksp[n - 1] + tmp);

if (Math.Abs(wksp[n]) <= Math.Abs(wksp[n - 1]))

{

sum += (0.5 * wksp[n++]);

}

else

{

sum += wksp[n];

}

}

lasteps = Math.Abs(sum - lastval);

if (lasteps <= eps)

{

ncv++;

}

if (ncv >= 2)

{

cnvgd = true;

}

return (lastval = sum);

}

}

}

2 代码格式

cs 复制代码
using System;

namespace Legalsoft.Truffer
{
    public class Eulsum
    {
        private double[] wksp { get; set; }
        private int n { get; set; }
        private int ncv { get; set; }
        public bool cnvgd { get; set; }
        private double sum { get; set; }
        private double eps { get; set; }
        private double lastval { get; set; }
        private double lasteps { get; set; }

        public Eulsum(int nmax, double epss)
        {
            this.wksp = new double[nmax];
            this.n = 0;
            this.ncv = 0;
            this.cnvgd = false;
            this.sum = 0.0;
            this.eps = epss;
            this.lastval = 0.0;
        }

        public double next(double term)
        {
            if (n + 1 > wksp.Length)
            {
                throw new Exception("wksp too small in eulsum");
            }
            if (n == 0)
            {
                sum = 0.5 * (wksp[n++] = term);
            }
            else
            {
                double tmp = wksp[0];
                wksp[0] = term;
                for (int j = 1; j < n; j++)
                {
                    double dum = wksp[j];
                    wksp[j] = 0.5 * (wksp[j - 1] + tmp);
                    tmp = dum;
                }
                wksp[n] = 0.5 * (wksp[n - 1] + tmp);
                if (Math.Abs(wksp[n]) <= Math.Abs(wksp[n - 1]))
                {
                    sum += (0.5 * wksp[n++]);
                }
                else
                {
                    sum += wksp[n];
                }
            }
            lasteps = Math.Abs(sum - lastval);
            if (lasteps <= eps)
            {
                ncv++;
            }
            if (ncv >= 2)
            {
                cnvgd = true;
            }
            return (lastval = sum);
        }
    }
}
相关推荐
不二狗5 分钟前
每日算法 -【Swift 算法】Two Sum 问题:从暴力解法到最优解法的演进
开发语言·算法·swift
LabVIEW开发7 分钟前
LabVIEW中样条插值实现及应用
算法·labview知识
LabVIEW开发12 分钟前
LabVIEW机械振动信号分析与故障诊断
算法·labview知识·labview开发案例
炯哈哈13 分钟前
【上位机——WPF】Window标签常用属性
开发语言·c#·wpf·上位机
小白学大数据19 分钟前
Python爬虫如何应对网站的反爬加密策略?
开发语言·爬虫·python
Akiiiira20 分钟前
【数据结构】队列
java·开发语言·数据结构
程序媛学姐25 分钟前
Java级联操作:CascadeType的选择与最佳实践
java·开发语言
啊我不会诶34 分钟前
CF每日5题(1300-1500)
算法·深度优先·图论
芒果量化1 小时前
量化交易 - 网格交易策略实现与原理解析
python·算法·机器学习·金融
LetsonH1 小时前
Python工具链UV整合环境管理
开发语言·python·uv