当前位置: 首页 > news >正文

C#,数值计算——用于积分函数与方法的Stiel类的计算方法与源程序

 

1 文本格式

using System;

namespace Legalsoft.Truffer
{
    public class Stiel
    {
        public class pp : UniVarRealValueFun, RealValueFun
        {
            public Stiel st { get; set; } = null;

            public pp()
            {
            }

            public double funk(double[] x)
            {
                double pval = st.p(x[0]);
                return pval * st.wt1(x[0], x[0]) * pval;
            }

            public double funk(double t)
            {
                double x = st.fx(t);
                double pval = st.p(x);
                return pval * st.wt2(x) * st.fdxdt(t) * pval;
            }
        }

        public class ppx : UniVarRealValueFun, RealValueFun
        {
            public Stiel st { get; set; } = null;

            public ppx()
            {
            }

            public double funk(double[] x)
            {
                return st.ppfunc.funk(new double[] { x[0], x[1] }) * x[0];
            }

            public double funk(double t)
            {
                return st.ppfunc.funk(t) * st.fx(t);
            }
        }

        public pp ppfunc { get; set; } = new pp();
        public ppx ppxfunc { get; set; } = new ppx();

        public int j { get; set; }
        public int n { get; set; }
        public double aa { get; set; }
        public double bb { get; set; }
        public double hmax { get; set; }
        public double[] a { get; set; }
        public double[] b;
        public Quadrature s1 { get; set; }
        public Quadrature s2 { get; set; }

        public double p(double x)
        {
            double pval = 0.0;
            double pj;
            double pjm1;
            if (j == 0)
            {
                return 1.0;
            }
            else
            {
                pjm1 = 0.0;
                pj = 1.0;
                for (int i = 0; i < j; i++)
                {
                    pval = (x - a[i]) * pj - b[i] * pjm1;
                    pjm1 = pj;
                    pj = pval;
                }
            }
            return pval;
        }

        public Stiel(int nn, double aaa, double bbb, double hmaxx)
        {
            this.n = nn;
            this.aa = aaa;
            this.bb = bbb;
            this.hmax = hmaxx;
            this.a = new double[nn];
            this.b = new double[nn];
            s1 = new DErule(ppfunc, aa, bb, hmax);
            s2 = new DErule(ppxfunc, aa, bb, hmax);
        }

        public Stiel(int nn, double aaa, double bbb)
        {
            this.n = nn;
            this.aa = aaa;
            this.bb = bbb;
            this.a = new double[nn];
            this.b = new double[nn];
            s1 = new Trapzd(ppfunc, aa, bb);
            s2 = new Trapzd(ppxfunc, aa, bb);
        }

        public double quad(Quadrature s)
        {
            const double EPS = 3.0e-11;
            double MACHEPS = float.Epsilon;
            const int NMAX = 11;
            double olds = 0.0;
            double sum;
            s.n = 0;
            for (int i = 1; i <= NMAX; i++)
            {
                sum = s.next();
                if (i > 3)
                {
                    if (Math.Abs(sum - olds) <= EPS * Math.Abs(olds))
                    {
                        return sum;
                    }
                }
                if (i == NMAX)
                {
                    if (Math.Abs(sum) <= MACHEPS && Math.Abs(olds) <= MACHEPS)
                    {
                        return 0.0;
                    }
                }
                olds = sum;
            }
            throw new Exception("no convergence in quad");
        }

        public void get_weights(double[] x, double[] w)
        {
            double amu0;
            double c;
            double oldc = 1.0;
            if (n != x.Length)
            {
                throw new Exception("bad array size in Stiel");
            }
            for (int i = 0; i < n; i++)
            {
                j = i;
                c = quad(s1);
                b[i] = c / oldc;
                a[i] = quad(s2) / c;
                oldc = c;
            }
            amu0 = b[0];
            GaussianWeights.gaucof(a, b, amu0, x, w);
        }

        public double wt1(double x, double del) { return -9999; }
        public double wt2(double x) { return -9999; }
        public double fx(double t) { return -9999; }
        public double fdxdt(double t) { return -9999; }
    }
}

2 代码格式

using System;namespace Legalsoft.Truffer
{public class Stiel{public class pp : UniVarRealValueFun, RealValueFun{public Stiel st { get; set; } = null;public pp(){}public double funk(double[] x){double pval = st.p(x[0]);return pval * st.wt1(x[0], x[0]) * pval;}public double funk(double t){double x = st.fx(t);double pval = st.p(x);return pval * st.wt2(x) * st.fdxdt(t) * pval;}}public class ppx : UniVarRealValueFun, RealValueFun{public Stiel st { get; set; } = null;public ppx(){}public double funk(double[] x){return st.ppfunc.funk(new double[] { x[0], x[1] }) * x[0];}public double funk(double t){return st.ppfunc.funk(t) * st.fx(t);}}public pp ppfunc { get; set; } = new pp();public ppx ppxfunc { get; set; } = new ppx();public int j { get; set; }public int n { get; set; }public double aa { get; set; }public double bb { get; set; }public double hmax { get; set; }public double[] a { get; set; }public double[] b;public Quadrature s1 { get; set; }public Quadrature s2 { get; set; }public double p(double x){double pval = 0.0;double pj;double pjm1;if (j == 0){return 1.0;}else{pjm1 = 0.0;pj = 1.0;for (int i = 0; i < j; i++){pval = (x - a[i]) * pj - b[i] * pjm1;pjm1 = pj;pj = pval;}}return pval;}public Stiel(int nn, double aaa, double bbb, double hmaxx){this.n = nn;this.aa = aaa;this.bb = bbb;this.hmax = hmaxx;this.a = new double[nn];this.b = new double[nn];s1 = new DErule(ppfunc, aa, bb, hmax);s2 = new DErule(ppxfunc, aa, bb, hmax);}public Stiel(int nn, double aaa, double bbb){this.n = nn;this.aa = aaa;this.bb = bbb;this.a = new double[nn];this.b = new double[nn];s1 = new Trapzd(ppfunc, aa, bb);s2 = new Trapzd(ppxfunc, aa, bb);}public double quad(Quadrature s){const double EPS = 3.0e-11;double MACHEPS = float.Epsilon;const int NMAX = 11;double olds = 0.0;double sum;s.n = 0;for (int i = 1; i <= NMAX; i++){sum = s.next();if (i > 3){if (Math.Abs(sum - olds) <= EPS * Math.Abs(olds)){return sum;}}if (i == NMAX){if (Math.Abs(sum) <= MACHEPS && Math.Abs(olds) <= MACHEPS){return 0.0;}}olds = sum;}throw new Exception("no convergence in quad");}public void get_weights(double[] x, double[] w){double amu0;double c;double oldc = 1.0;if (n != x.Length){throw new Exception("bad array size in Stiel");}for (int i = 0; i < n; i++){j = i;c = quad(s1);b[i] = c / oldc;a[i] = quad(s2) / c;oldc = c;}amu0 = b[0];GaussianWeights.gaucof(a, b, amu0, x, w);}public double wt1(double x, double del) { return -9999; }public double wt2(double x) { return -9999; }public double fx(double t) { return -9999; }public double fdxdt(double t) { return -9999; }}
}

http://www.lryc.cn/news/158587.html

相关文章:

  • 报错:为什么数组明明有内容但打印的length是0
  • go gin gorm连接postgres postgis输出geojson
  • 4. Java 的线程安全机制之`volatile`
  • ​Vue + Element UI前端篇(二):Vue + Element 案例 ​
  • Qt5中connect信号槽无效问题 C++
  • 服务端 TCP 连接的 TIME_WAIT 过多问题的分析与解决
  • 【Unity3D赛车游戏优化篇】【十】汽车粒子特效和引擎咆哮打造极速漂移
  • 肖sir__设计测试用例方法之编写测试用例12
  • Android 11.0 ota升级之Systemui下拉状态栏quick_settings_tiles_default值减少时更新的功能实现
  • Android Studio中创建java项目
  • 冠达管理:“旺季”来临,煤炭板块走高,云煤能源、陕西黑猫涨停
  • 【EI检索】第四届公共卫生与数据科学国际学术研讨会(ICPHDS 2023)
  • 对时序数据进行分类与聚类
  • Win10如何找回图片查看器
  • 【脑机接口】基于运动想象的康复指导在脑卒中偏瘫患者中的应用
  • vue-cli中vuex下$store”未在实例上定义
  • AutoSAR配置与实践(实践篇)12.1 BSW WatchDog功能的配置和实现
  • 【UI自动化测试】Jenkins配置
  • C#使用DataTable的Select方法来选择特定的字段
  • 总结梳理HTTP状态码
  • MySQL 8.0(winx64)安装笔记
  • vue封装wangEditor
  • 【Spring Boot 源码学习】深入 FilteringSpringBootCondition
  • docker 笔记6:高级篇 DockerFile解析
  • 微信小程序navigateTo进入页面后返回原来的页面需要携带数据回来
  • Python照片压缩教程详解
  • 软路由的负载均衡设置:优化网络性能和带宽利用率
  • CH06_第一组重构(上)
  • RHCSA-VMware Workstation Pro-Linux基础配置命令
  • YOLO-NAS详细教程-姿势估计实现