C#,数值计算——插值和外推,BaryRat_interp的计算方法与源程序

1 文本格式

using System;

namespace Legalsoft.Truffer
{
    /// <summary>
    /// 重心有理插值对象
    /// Barycentric rational interpolation object. 
    /// After constructing the object, 
    /// call interp for interpolated values.
    /// Note that no error estimate dy is calculated.
    /// </summary>
    public class BaryRat_interp : Base_interp
    {
        private double[] w { get; set; }
        private int d { get; set; }

        /// <summary>
        /// Constructor arguments are x and y vectors of length n, 
        /// and order d of desired approximation.
        /// </summary>
        /// <param name="xv"></param>
        /// <param name="yv"></param>
        /// <param name="dd"></param>
        /// <exception cref="Exception"></exception>
        public BaryRat_interp(double[] xv, double[] yv, int dd) : base(xv, yv[0], xv.Length)
        {
            this.w = new double[n];
            this.d = dd;
            if (n <= d)
            {
                throw new Exception("d too large for number of points in BaryRat_interp");
            }
            for (int k = 0; k < n; k++)
            {
                int imin = Math.Max(k - d, 0);
                int imax = k >= n - d ? n - d - 1 : k;
                double temp = (imin & 1) != 0 ? -1.0 : 1.0;
                double sum = 0.0;
                for (int i = imin; i <= imax; i++)
                {
                    int jmax = Math.Min(i + d, n - 1);
                    double term = 1.0;
                    for (int j = i; j <= jmax; j++)
                    {
                        if (j == k)
                        {
                            continue;
                        }
                        term *= (xx[k] - xx[j]);
                    }
                    term = temp / term;
                    temp = -temp;
                    sum += term;
                }
                w[k] = sum;
            }
        }

        /// <summary>
        /// Use equation(3.4.9) to compute the 
        /// barycentric rational interpolant.
        /// Note that jl is not used since 
        /// the approximation is global; 
        /// it is included only
        /// for compatibility with Base_interp.
        /// </summary>
        /// <param name="jl"></param>
        /// <param name="x"></param>
        /// <returns></returns>
        public override double rawinterp(int jl, double x)
        {
            double num = 0;
            double den = 0;
            for (int i = 0; i < n; i++)
            {
                double h = x - xx[i];
                //if (h == 0.0)
                if (Math.Abs(h) <= float.Epsilon)
                {
                    return yy[i];
                }
                else
                {
                    double temp = w[i] / h;
                    num += temp * yy[i];
                    den += temp;
                }
            }
            return num / den;
        }

        /// <summary>
        /// No need to invoke hunt or locate since 
        /// the interpolation is global, so
        /// override interp to simply call rawinterp 
        /// directly with a dummy value of jl.
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        public new double interp(double x)
        {
            return rawinterp(1, x);
        }
    }
}
 

2 代码格式

using System;namespace Legalsoft.Truffer
{/// <summary>/// 重心有理插值对象/// Barycentric rational interpolation object. /// After constructing the object, /// call interp for interpolated values./// Note that no error estimate dy is calculated./// </summary>public class BaryRat_interp : Base_interp{private double[] w { get; set; }private int d { get; set; }/// <summary>/// Constructor arguments are x and y vectors of length n, /// and order d of desired approximation./// </summary>/// <param name="xv"></param>/// <param name="yv"></param>/// <param name="dd"></param>/// <exception cref="Exception"></exception>public BaryRat_interp(double[] xv, double[] yv, int dd) : base(xv, yv[0], xv.Length){this.w = new double[n];this.d = dd;if (n <= d){throw new Exception("d too large for number of points in BaryRat_interp");}for (int k = 0; k < n; k++){int imin = Math.Max(k - d, 0);int imax = k >= n - d ? n - d - 1 : k;double temp = (imin & 1) != 0 ? -1.0 : 1.0;double sum = 0.0;for (int i = imin; i <= imax; i++){int jmax = Math.Min(i + d, n - 1);double term = 1.0;for (int j = i; j <= jmax; j++){if (j == k){continue;}term *= (xx[k] - xx[j]);}term = temp / term;temp = -temp;sum += term;}w[k] = sum;}}/// <summary>/// Use equation(3.4.9) to compute the /// barycentric rational interpolant./// Note that jl is not used since /// the approximation is global; /// it is included only/// for compatibility with Base_interp./// </summary>/// <param name="jl"></param>/// <param name="x"></param>/// <returns></returns>public override double rawinterp(int jl, double x){double num = 0;double den = 0;for (int i = 0; i < n; i++){double h = x - xx[i];//if (h == 0.0)if (Math.Abs(h) <= float.Epsilon){return yy[i];}else{double temp = w[i] / h;num += temp * yy[i];den += temp;}}return num / den;}/// <summary>/// No need to invoke hunt or locate since /// the interpolation is global, so/// override interp to simply call rawinterp /// directly with a dummy value of jl./// </summary>/// <param name="x"></param>/// <returns></returns>public new double interp(double x){return rawinterp(1, x);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143928.shtml

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

相关文章

基于python+django的美食餐厅点餐订餐网站

运行环境 开发语言&#xff1a;Python python框架&#xff1a;django 软件版本&#xff1a;python3.7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;PyCharm/vscode 前端框架:vue.js 项目介绍 本论文主要论述了如何使用python语言开发…

JavaWeb-WEB请求过程

WEB请求过程 一、B/S架构1.1 BS结构的好处1.2 B/S架构是如何完成交互的1.3 B/S网络架构的核心HTTP1.3.1 HTTP请求头1.3.2 HTTP响应头1.3.3 HTTP状态码1.3.4 HTTP缓存机制二、DNS域名解析、CND(分发网络)、负载均衡2.1 DNS域名解析2.2 CDN工作机制2.3 负载均衡2.3.1 硬件负载均衡…

队列的实现---超详细

队列的实现—超详细 文章目录 队列的实现---超详细一、队列的模型二、代码实现以及测试用例①队列初始化②入队③出队④输出队头⑤输出队尾⑥判断队列是否为空⑦队列的长度⑧队列的销毁⑨测试用例 一、队列的模型 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在…

【计算思维】少儿编程蓝桥杯青少组计算思维题考试真题及解析B

STEMA考试-计算思维-U8级(样题) 1.浩浩的左⼿边是&#xff08; &#xff09;。 A.兰兰 B.⻉⻉ C.⻘⻘ D.浩浩 2.2时30分&#xff0c;钟⾯上时针和分针形成的⻆是什么⻆&#xff1f;&#xff08; &#xff09; A.钝⻆ B.锐⻆ C.直⻆ D.平⻆ 3.下⾯是⼀年级同学最喜欢的《⻄游记》…

Oneid方案

一、前文 用户画像的前提是标识出用户&#xff0c;存在以下场景&#xff1a;不同业务系统对同一个人的标识&#xff0c;匿名用户行为的行为归因&#xff1b;本文提供多种解决方案&#xff0c;提供大家思考。 二、方案矩阵 三、其他 相关连接&#xff1a; 如何通过图算法能力获…

Web安全之PHP的伪协议漏洞利用,以及伪协议漏洞防护方法

一、背景 今天介绍一个比较冷门的知识&#xff0c;只有在PHP环境中存在的伪协议漏洞&#xff0c;那么什么是PHP伪协议呢&#xff1f;PHP伪协议事实上就是支持的协议与封装协议。可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议…

asp.net数字档案管理系统VS开发sqlserver数据库web结构c#编程web网页设计

一、源码特点 asp.net 数字档案管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发。 asp.net数字档案系统1 应用技…

Mysql中名叫infomaiton_schema的数据库是什么东西?

在 MySQL 中&#xff0c;information_schema 是一个系统数据库&#xff0c;用于存储关于数据库服务器元数据的信息。它并不存储用户数据&#xff0c;而是包含有关数据库、表、列、索引、权限等方面的元数据信息。这些信息可以通过 SQL 查询来获取&#xff0c;用于了解和管理数据…

MyBatis的插件能在哪些地方进行拦截?

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

c语言从入门到实战——数组指针与函数指针

数组指针与函数指针 前言1. 字符指针变量2. 数组指针变量2.1 数组指针变量是什么&#xff1f;2.2 数组指针变量怎么初始化? 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 两段有趣的代码4.3.1 typedef关键字 5. 函数指针数组6. 转移…

WPF 中的 ControlTemplate 和 DataTemplate 有什么区别

在WPF中&#xff0c;ControlTemplate和DataTemplate都是模板&#xff0c;它们都可以用来定义一段可重复使用的XAML标记。然而&#xff0c;它们的用途和应用场景有很大的不同。 ControlTemplate&#xff1a; ControlTemplate是用来定义控件的外观和视觉行为的。每个WPF控件都有…

Android13 wifi adb 串口开启

Android13 wifi adb 串口开启 文章目录 Android13 wifi adb 串口开启一、前言二、开启wifi adb1、开启wifi adb 命令&#xff1a;2、查看和设置 adb默认值3、adb 开启属性prop和settings属性的关系 三、总结1、Android13 开启adb 串口命令2、Android 13 wifi adb设置固定端口解…

electronjs入门-编辑器应用程序

我们将在Electron中创建一个新项目&#xff0c;如我们在第1章中所示&#xff0c;名为“编辑器”&#xff0c;我们将在下一章中使用它来创建编辑器&#xff1b;在index.js中&#xff0c;这是我们的主要过程&#xff1b;请记住为Electron软件包放置必要的依赖项&#xff1a; npm…

【JMeter】JMeter压测过程中遇到Non HTTP response code错误解决方案

压测过程中并发逐步加大后遇到60%的错误率&#xff0c;查看错误是JMeter网页版聚合报告中显示 Non HTTP response code: java.net.NoRouteToHostException/Non HTTP response message: Cannot assign requested address (Address not available) 这是第二次遇到&#xff0c;故…

vue中一个页面引入多个相同组件重复请求的问题?

⚠️&#xff01;&#xff01;&#xff01;此内容需要了解一下内容&#xff01;&#xff01;&#xff01; 1、会使用promise&#xff1f;&#xff1f;&#xff1f; 2、 promise跟 async 的区别&#xff1f;&#xff1f;&#xff1f; async 会终止后面的执行&#xff0c;后续…

21 Linux 自带的LED驱动

一、Linux 自带 LED 驱动使能 其实 Linux 内核自带 LED 抢夺那个&#xff0c;但在此之前需要配置 Linux 驱动来使能 LED 驱动。 输入以下命令&#xff1a; cd linux/atk-mpl/linux/my_linux/linux-5.4.31 make menuconfig 根据以下路径找到 LED 驱动&#xff1a; → Device D…

【算法】区间(差分约束)

题目 给定 n 个区间 [ai,bi] 和 n 个整数 ci。 你需要构造一个整数集合 Z&#xff0c;使得 ∀i∈[1,n]&#xff0c;Z 中满足 ai≤x≤bi 的整数 x 不少于 ci 个。 求这样的整数集合 Z 最少包含多少个数。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含三个…

【QT基础入门】QT中的容器类

QT中有多种容器类,它们可以用来存储和操作不同类型的数据。根据容器的特性和用途,可以分为以下几类: 序列容器 这些容器按照一定的顺序存储数据,可以通过下标或迭代器访问。QT中的序列容器有: QList: 这是最通用的序列容器,它在内部实现为一个数组列表,可以快速地在头…

【计算机组成原理】将十进制数20.59375,转换成754标准的32位浮点数的二进制存储格式

系列文章目录 绘制出纯整数(1字节)和纯小数的数轴 将十进制数20.59375&#xff0c;转换成754标准的32位浮点数的二进制存储格式 IEEE754标准中32位浮点数表示S E M。S是符号位占1位&#xff0c;E是阶码占8位&#xff0c;M是尾数占23位 将十进制数转换成二进制数&#xff1a…

【WebGIS面试经验】(四)第一次社招面试也是第一次线下面试

一、前言 emmmm&#xff0c;今年找工作好难啊。 这次去面了一家做农业无人机的企业&#xff0c;体验挺好的就可惜复试一直没约上&#xff08;看来是有了更好的选择&#xff09;&#xff0c;所以这次面试内容就是线上性格测试、线下笔试、技术面初试。 然后这次也是我截至唯一一…