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

news2024/9/21 22:09:51

 

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.coloradmin.cn/o/987171.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索数据库管理的利器 - PHPMyAdmin

有一个项目&#xff0c;后端由博主独自负责&#xff0c;最近需要将项目交接给另一位同事。在项目初期&#xff0c;博主直接在数据库中使用工具创建了相关表格&#xff0c;并在完成后利用PhpMyAdmin生成了一份数据字典&#xff0c;供团队使用。然而&#xff0c;在随后的开发过程…

JDK1.8下载、安装和环境配置使用

JDK1.8下载、安装和配置 下载安装包解压文件配置测试安装 下载安装包 链接地址 https://pan.baidu.com/s/1RF7-ulq0_qAelpXskDxdvA 提取码 d1y0解压文件 jdk1.8.0_181 配置 右击我的电脑&#xff0c;选择属性 2.点击高级系统设置 在系统变量区里点击&#xff1a;新建…

听书网站模板源码 懒人书院网站源码 苹果cms手机听书网站模版源码 支持手机端

苹果cms超漂亮UI高仿芒果TV听书网站模板带手机端。 手机版修改logo&#xff0c;ting_wap/images/logo.png 电脑版修改logo&#xff0c;ting_pc/img/logo.png 编辑推荐后台推荐5颗星。 新势力/热播榜单后台推荐9颗星。

3D基础:Y-Up和Z-Up

推荐&#xff1a;用 NSDT编辑器快速搭建可编程3D场景 所有 3D 工具都包含具有 X、Y 和 Z 轴的 3 维环境。 这些工具中的 X 轴方向相同&#xff0c;即使用前视图时从左到右的水平线。 但是&#xff0c;不同的 3D 工具可能具有不同的 Y 轴和 Z 轴方向。 有些3D工具是Y-Up的&…

西门子S7-200 SMART软件的下载安装步骤

文章目录 1、软件下载2、软件安装 1、软件下载 访问西门子官网&#xff1a;https://www.siemens.com/cn/zh.html&#xff0c;进入后在左上角产品与服务&#xff0c;依次进入该目录&#xff1a; 实在找不到在右上角放大镜直接搜索smart200 点击进入即可&#xff0c;然后就进入…

浅谈安科瑞ADL200仪表在爱尔兰工厂的应用

摘要&#xff1a;用户端消耗着整个电网80%的电能&#xff0c;用户端智能化用电管理对用户可靠、安全、节约用电有十分重要的意义。构建智能用电服务体系&#xff0c;推广用户端智能多功能仪表、智能用电管理终端等设备用电管理解决方案&#xff0c;实现电网与用户的双向良性互动…

第 2 章 线性表 (线性表的静态单链表存储结构(一个数组可生成若干静态链表)实现)

1. 背景说明 静态单链表实现类似于单链表&#xff0c;只是指针域变成了数组下标。 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE …

从策略到执行:实施战略定位的实战手册

有了完美的战略定位蓝图&#xff0c;但如果不知道如何执行&#xff0c;那一切都是徒劳。今天&#xff0c;我们将揭示从策略到执行的战略定位秘密路径。首先我们先明确一下战略定位的相关概念以及实施战略定位的用途。 战略定位是什么意思? 战略定位可以视为企业在市场或竞争环…

Jetpack Compose 教程

一、简介 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API&#xff0c;可以帮助您简化并加快 Android 界面开发。 在本教程中&#xff0c;您将使用声明性的函数构建一个简单的界面组件。您无需修改任何 XML 布局&am…

读高性能MySQL(第4版)笔记04_操作系统和硬件优化

1. 从软件本身和它运行的典型工作负载来看&#xff0c;MySQL通常也更适合运行在廉价硬件上 2. 基本资源 2.1. CPU 2.2. 内存 2.3. 磁盘 2.4. 瓶颈 2.5. 网络资源 3. CPU 3.1. 最常见的瓶颈是CPU耗尽 3.2. 检查CPU使用率来确定工作负载是否受CPU限制 3.3. 低延迟&…

JavaScipt中如何实现函数缓存?函数缓存有哪些场景?

1、函数缓存是什么&#xff1f; 函数缓存就是将函数运行的结果进行缓存。本质上就是用空间&#xff08;缓存存储&#xff09;换时间&#xff08;计算过程&#xff09; 常用于缓存数据计算结果和缓存对象。 缓存只是一个临时的数据存储&#xff0c;它保存数据&#xff0c;以便将…

异步编程 - 09 Spring框架中的异步执行_@Async注解异步执行原理源码解析

文章目录 概述小结好文推荐 概述 在Spring中调用线程将在调用含有Async注释的方法时立即返回&#xff0c;Spring是如何做到的呢&#xff1f;其实是其对标注Async注解的类做了代理&#xff0c;比如下面的类Async-AnnotationExample。 public class AsyncAnnotationExample {As…

Qt 5.15集成Crypto++ 8.8.0(MSVC 2019)笔记

一、背景 笔者已介绍过在Qt 5.15.x中使用MinGW&#xff08;8.10版本&#xff09;编译并集成Crypto 8.8.0。 但是该编译出来的库&#xff08;.a和.dll&#xff09;不适用MSVC&#xff08;2019版本&#xff09;构建环境&#xff0c;需要重新编译&#xff08;.lib或和.dll&#xf…

C++11新特性② | 左值、左值引用、右值与右值引用

目录 1、引言 2、值类别及相关概念 3、左值、右值 4、左值引用、右值引用 5、移动语义 5.1、为什么需要移动语义 5.2、移动语义定义 5.3、转移构造函数 5.4、转移赋值函数 6、标准库函数 std::move 7、完美转发 std::forward VC常用功能开发汇总&#xff08;专栏文章…

Mybatis 使用typeHandler自定义类型转换

之前我们介绍了使用Mybatis完成数据的增删改查操作&#xff1b;本篇我们介绍使用Mybatis提供的typeHandler自定义类型转换。 如果您对Mybatis的增删改查操作不太了解&#xff0c;可以参考&#xff1a; Mybatis 查询数据https://blog.csdn.net/m1729339749/article/details/13…

explain 实战-----查看hive sql执行计划

目录 1.join/left join/full join 语句会过滤关联字段 null 的值吗&#xff1f; &#xff08;1&#xff09;join &#xff08;2&#xff09; left join /full join 2.group by 分组语句会进行排序吗&#xff1f; 1.join/left join/full join 语句会过滤关联字段 null 的值吗…

Qt 5.15编译(MinGW)及集成Crypto++ 8.8.0笔记

一、背景 为使用AES加密库&#xff08;AES/CBC加解密&#xff09;&#xff0c;选用Crypto 库&#xff08;官网&#xff09;。   最新Crypto C库依次为&#xff1a;8.8.0版本&#xff08;2023-6-25&#xff09;、8.7.0&#xff08;2022-8-7&#xff09;和8.6.0&#xff08;202…

绘图系统三:支持散点图、极坐标和子图绘制

文章目录 新增散点图绘制绑定与回调极坐标功能子图绘制功能源代码 &#x1f4c8;一 三维绘图系统&#x1f4c8;二 多图绘制系统 新增散点图绘制 同一坐标系中绘制多个图像是很常见的需求&#xff0c;比如数据拟合的时候&#xff0c;用散点图表示原始数据&#xff0c;用曲线图…

vue3 webpack打包流程及安装 (1)

npm run build 也可以打包 如果没有特殊需求 可以使用 效果其实是差不多的 --------------------------------------------------------------------------------------------------------------------------------- webpack网址 &#xff1a; 起步 | webpack 中文文档 (docsc…

记录docker 部署nessus

1、开启容器 docker run -itd --nameramisec_nessus -p 8834:8834 ramisec/nessus 2、登录 &#xff1a;注意是https https://ip8843 3、修改admin密码 #进入容器 docker exec -it ramisec_nessus /bin/bash#列出用户名 /opt/nessus/sbin/nessuscli lsuser#修改密码&a…