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语言开发…

队列的实现---超详细

队列的实现—超详细 文章目录 队列的实现---超详细一、队列的模型二、代码实现以及测试用例①队列初始化②入队③出队④输出队头⑤输出队尾⑥判断队列是否为空⑦队列的长度⑧队列的销毁⑨测试用例 一、队列的模型 队列&#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 应用技…

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

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

electronjs入门-编辑器应用程序

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

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;每行包含三个…

LeetCode【560】和为k的子数组

题目&#xff1a; 思路&#xff1a; 转化为前缀和问题&#xff0c;和为k&#xff0c;即为&#xff1a;前缀和差值为k的情况统计&#xff1b; 为什么要转化为前缀和呢&#xff1f;因为和为k的子数组可能有n个元素&#xff0c;但是前缀和差值为k&#xff0c;只有两个元素&#…

Linux 系统编程,Binder 学习,文件访问相关的接口

文章目录 Linux 系统编程&#xff0c;Binder 学习&#xff0c;文件访问相关的接口1.概念2.linux文件结构3.文件描述符4.Linux文件系统的两类常用接口&#xff0c;linux系统内置库函数4.1 open4.2 close4.3 read4.4 write 5.标准I/O库函数5.1 fopen Linux 系统编程&#xff0c;B…

wireshark打开tcpdump抓的包 vwr: Invalid data length runs past the end of the record

tcpdump -i any -n -s0 > t.pcap 使用此命令在Debian系统上抓包&#xff0c;下载到PC&#xff0c;用wireshark打开时报错&#xff1a; 后来发现写入文件时使用 -w 是没问题的&#xff0c;原因还不清楚。 tcpdump -i any -n -s0 -w t.pcap

【腾讯云 HAI域探秘】浅尝一番AI绘画

前言 腾讯云高性能应用服务 HAI 是为开发者量身打造的澎湃算力平台。无需复杂配置&#xff0c;便可享受即开即用的GPU云服务体验。 我之前也参与锅一个AI绘画的活动&#xff0c;是基于InsCode的&#xff0c;都可以在线训练大模型&#xff0c;开发自己的AI应用程序。 这次腾讯…

八大学习方法(金字塔模型、费曼学习法、布鲁姆学习模型)

在微博上看到博主发的&#xff0c;觉得总结很好&#xff0c;在此摘录&#xff1a;

labview实现仪器的控制visa

*IDN? 是识别大多数仪器的查询指令。仪器会回应一个用于描述仪器的识别字符串。如果仪器不接受该指令&#xff0c;请在仪器手册中查询仪器能识别的指令列表。 如下图所示&#xff1a; 程序如下&#xff1a;

分类预测 | Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据多输入分类预测

分类预测 | Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据多输入分类预测 目录 分类预测 | Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据…

正则匹配去除HTMl标签

正则匹配去除HTMl标签 案例&#xff1a;如在textarea中去除标签 操作方法 val.replace(/<[^>]>/g, ‘’))

第3章:搜索与图论【AcWing】

文章目录 图的概念图的概念图的分类有向图和无向图 连通性连通块重边和自环稠密图和稀疏图参考资料 图的存储方式邻接表代码 邻接矩阵 DFS全排列问题题目描述思路回溯标记剪枝代码时间复杂度 [N 皇后问题](https://www.luogu.com.cn/problem/P1219)题目描述全排列思路 O ( n ! …