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

C#,数值计算——有理函数插值和外推(Rational_interp)的计算方法与源程序

1 文本格式
 

using System;

namespace Legalsoft.Truffer
{
    /// <summary>
    /// 有理函数插值和外推
    /// Rational Function Interpolation and Extrapolation
    /// Given a value x, and using pointers to data xx and yy, this routine returns
    /// an interpolated value y, and stores an error estimate dy. The returned value
    /// is obtained by mm-point polynomial interpolation on the subrange
    /// xx[jl..jl + mm - 1].
    /// </summary>
    public class Rational_interp : Base_interp
    {
        private double dy { get; set; }

        public Rational_interp(double[] xv, double[] yv, int m) : base(xv, yv[0], m)
        {
            this.dy = 0.0;
        }

        /// <summary>
        /// Given a value x, and using pointers to data xx and yy, this routine returns
        /// an interpolated value y, and stores an error estimate dy. The returned
        /// value is obtained by mm-point diagonal rational function interpolation on
        /// the subrange xx[jl..jl + mm - 1].
        /// </summary>
        /// <param name="jl"></param>
        /// <param name="x"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public override double rawinterp(int jl, double x)
        {
            const double TINY = 1.0e-99;
            int ns = 0;
            double[] c = new double[mm];
            double[] d = new double[mm];
            double hh = Math.Abs(x - xx[jl + 0]);
            for (int i = 0; i < mm; i++)
            {
                double h = Math.Abs(x - xx[jl + i]);
                //if (h == 0.0)
                if (Math.Abs(h) <= float.Epsilon)
                {
                    dy = 0.0;
                    return yy[jl + i];
                }
                else if (h < hh)
                {
                    ns = i;
                    hh = h;
                }
                c[i] = yy[jl + i];
                d[i] = yy[jl + i] + TINY;
            }
            double y = yy[jl + ns--];
            for (int m = 1; m < mm; m++)
            {
                for (int i = 0; i < mm - m; i++)
                {
                    double w = c[i + 1] - d[i];
                    double h = xx[jl + i + m] - x;
                    double t = (xx[jl + i] - x) * d[i] / h;
                    double dd = t - c[i + 1];
                    //if (dd == 0.0)
                    if (Math.Abs(dd) <= float.Epsilon)
                    {
                        throw new Exception("Error in routine ratint");
                    }
                    dd = w / dd;
                    d[i] = c[i + 1] * dd;
                    c[i] = t * dd;
                }
                y += (dy = (2 * (ns + 1) < (mm - m) ? c[ns + 1] : d[ns--]));
            }
            return y;
        }
    }
}
 

2 代码格式

using System;namespace Legalsoft.Truffer
{/// <summary>/// 有理函数插值和外推/// Rational Function Interpolation and Extrapolation/// Given a value x, and using pointers to data xx and yy, this routine returns/// an interpolated value y, and stores an error estimate dy. The returned value/// is obtained by mm-point polynomial interpolation on the subrange/// xx[jl..jl + mm - 1]./// </summary>public class Rational_interp : Base_interp{private double dy { get; set; }public Rational_interp(double[] xv, double[] yv, int m) : base(xv, yv[0], m){this.dy = 0.0;}/// <summary>/// Given a value x, and using pointers to data xx and yy, this routine returns/// an interpolated value y, and stores an error estimate dy. The returned/// value is obtained by mm-point diagonal rational function interpolation on/// the subrange xx[jl..jl + mm - 1]./// </summary>/// <param name="jl"></param>/// <param name="x"></param>/// <returns></returns>/// <exception cref="Exception"></exception>public override double rawinterp(int jl, double x){const double TINY = 1.0e-99;int ns = 0;double[] c = new double[mm];double[] d = new double[mm];double hh = Math.Abs(x - xx[jl + 0]);for (int i = 0; i < mm; i++){double h = Math.Abs(x - xx[jl + i]);//if (h == 0.0)if (Math.Abs(h) <= float.Epsilon){dy = 0.0;return yy[jl + i];}else if (h < hh){ns = i;hh = h;}c[i] = yy[jl + i];d[i] = yy[jl + i] + TINY;}double y = yy[jl + ns--];for (int m = 1; m < mm; m++){for (int i = 0; i < mm - m; i++){double w = c[i + 1] - d[i];double h = xx[jl + i + m] - x;double t = (xx[jl + i] - x) * d[i] / h;double dd = t - c[i + 1];//if (dd == 0.0)if (Math.Abs(dd) <= float.Epsilon){throw new Exception("Error in routine ratint");}dd = w / dd;d[i] = c[i + 1] * dd;c[i] = t * dd;}y += (dy = (2 * (ns + 1) < (mm - m) ? c[ns + 1] : d[ns--]));}return y;}}
}

相关文章:

  • java io 流,输入流和输出流;节点流和处理流;字节流和字符流
  • 基于ncurse实现的俄罗斯方块
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • 04 _ 系统设计目标(二):系统怎样做到高可用?
  • 快速认识Linux的几个指令
  • hadoop2.x linux集群部署
  • MySQL 库操作 | 表操作
  • 项目管理套路:看这一篇绝对够用❤️
  • 利用opencv/暗通道方法检测图像是否有雾-利用opencv/暗通道方法对深度学习目标检测算法结果进行二次识别提高准确率
  • python游戏开发pygame初步
  • vue3中引入svg矢量图
  • 【漏洞复现】Array VPN任意文件读取漏洞
  • 数字逻辑电路基础-时序逻辑电路之移位寄存器
  • 利用chart.js来完成动态网页显示拆线图的效果
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • [译]CSS 居中(Center)方法大合集
  • es6(二):字符串的扩展
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Java比较器对数组,集合排序
  • leetcode386. Lexicographical Numbers
  • webpack+react项目初体验——记录我的webpack环境配置
  • windows下mongoDB的环境配置
  • 入手阿里云新服务器的部署NODE
  • 深入浅出webpack学习(1)--核心概念
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 世界上最简单的无等待算法(getAndIncrement)
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 白色的风信子
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (Forward) Music Player: From UI Proposal to Code
  • (SpringBoot)第二章:Spring创建和使用
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • ***通过什么方式***网吧
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .net 程序发生了一个不可捕获的异常
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .net打印*三角形
  • @Autowired和@Resource装配
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [Android] Android ActivityManager
  • [C++]类和对象【下】
  • [Foreman]解决Unable to find internal system admin account
  • [Hive] 常见函数
  • [JavaScript]_[初级]_[关于forin或for...in循环语句的用法]
  • [LeetCode] 626. 换座位
  • [lintcode easy]Maximum Subarray
  • [Lua实战]整理Lua中忽略的问题
  • [one_demo_2]使用正则表达式过滤字符串