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

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

1 文本格式

using System;

namespace Legalsoft.Truffer
{
    /// <summary>
    /// polynomial coefficients from polynomial values
    /// </summary>
    public class PolCoef
    {
        public PolCoef()
        {
        }

        /// <summary>
        /// Given arrays x[0..n - 1] and y[0..n - 1] containing a tabulated function yi D f
        /// .xi /, this routine returns an array of coefficients cof[0..n - 1],
        /// such that yi =sum(cofj* xij)(j=0...n-1).
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="cof"></param>
        public static void polcoe(double[] x, double[] y, double[] cof)
        {
            int n = x.Length;
            double[] s = new double[n];
            for (int i = 0; i < n; i++)
            {
                s[i] = cof[i] = 0.0;
            }
            s[n - 1] = -x[0];
            for (int i = 1; i < n; i++)
            {
                for (int j = n - 1 - i; j < n - 1; j++)
                {
                    s[j] -= x[i] * s[j + 1];
                }
                s[n - 1] -= x[i];
            }
            for (int j = 0; j < n; j++)
            {
                double phi = n;
                for (int k = n - 1; k > 0; k--)
                {
                    phi = k * s[k] + x[j] * phi;
                }
                double ff = y[j] / phi;
                double b = 1.0;
                for (int k = n - 1; k >= 0; k--)
                {
                    cof[k] += b * ff;
                    b = s[k] + x[j] * b;
                }
            }
        }

        /// <summary>
        /// Given arrays xa[0..n - 1] and ya[0..n - 1] containing a tabulated function yai
        /// D f.xai /, this routine returns an array of coefficients
        /// cof[0..n - 1], such that yai = sum(cofj * xaij)(j = 0...n - 1).
        /// </summary>
        /// <param name="xa"></param>
        /// <param name="ya"></param>
        /// <param name="cof"></param>
        public static void polcof(double[] xa, double[] ya, double[] cof)
        {
            int n = xa.Length;
            double[] x = new double[n];
            double[] y = new double[n];
            for (int j = 0; j < n; j++)
            {
                x[j] = xa[j];
                y[j] = ya[j];
            }
            for (int j = 0; j < n; j++)
            {
                double[] x_t = new double[n - j];
                double[] y_t = new double[n - j];
                for (int i = 0; i < n - j; i++)
                {
                    x_t[i] = x[i];
                    y_t[i] = y[i];
                }

                Poly_interp interp = new Poly_interp(x, y, n - j);
                cof[j] = interp.rawinterp(0, 0.0);
                double xmin = 1.0e99;
                int k = -1;
                for (int i = 0; i < n - j; i++)
                {
                    if (Math.Abs(x[i]) < xmin)
                    {
                        xmin = Math.Abs(x[i]);
                        k = i;
                    }
                    if (x[i] != 0.0)
                    {
                        y[i] = (y[i] - cof[j]) / x[i];
                    }
                }
                for (int i = k + 1; i < n - j; i++)
                {
                    y[i - 1] = y[i];
                    x[i - 1] = x[i];
                }
            }
        }

    }
}
 

2 代码格式

using System;namespace Legalsoft.Truffer
{/// <summary>/// polynomial coefficients from polynomial values/// </summary>public class PolCoef{public PolCoef(){}/// <summary>/// Given arrays x[0..n - 1] and y[0..n - 1] containing a tabulated function yi D f/// .xi /, this routine returns an array of coefficients cof[0..n - 1],/// such that yi =sum(cofj* xij)(j=0...n-1)./// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <param name="cof"></param>public static void polcoe(double[] x, double[] y, double[] cof){int n = x.Length;double[] s = new double[n];for (int i = 0; i < n; i++){s[i] = cof[i] = 0.0;}s[n - 1] = -x[0];for (int i = 1; i < n; i++){for (int j = n - 1 - i; j < n - 1; j++){s[j] -= x[i] * s[j + 1];}s[n - 1] -= x[i];}for (int j = 0; j < n; j++){double phi = n;for (int k = n - 1; k > 0; k--){phi = k * s[k] + x[j] * phi;}double ff = y[j] / phi;double b = 1.0;for (int k = n - 1; k >= 0; k--){cof[k] += b * ff;b = s[k] + x[j] * b;}}}/// <summary>/// Given arrays xa[0..n - 1] and ya[0..n - 1] containing a tabulated function yai/// D f.xai /, this routine returns an array of coefficients/// cof[0..n - 1], such that yai = sum(cofj * xaij)(j = 0...n - 1)./// </summary>/// <param name="xa"></param>/// <param name="ya"></param>/// <param name="cof"></param>public static void polcof(double[] xa, double[] ya, double[] cof){int n = xa.Length;double[] x = new double[n];double[] y = new double[n];for (int j = 0; j < n; j++){x[j] = xa[j];y[j] = ya[j];}for (int j = 0; j < n; j++){double[] x_t = new double[n - j];double[] y_t = new double[n - j];for (int i = 0; i < n - j; i++){x_t[i] = x[i];y_t[i] = y[i];}Poly_interp interp = new Poly_interp(x, y, n - j);cof[j] = interp.rawinterp(0, 0.0);double xmin = 1.0e99;int k = -1;for (int i = 0; i < n - j; i++){if (Math.Abs(x[i]) < xmin){xmin = Math.Abs(x[i]);k = i;}if (x[i] != 0.0){y[i] = (y[i] - cof[j]) / x[i];}}for (int i = k + 1; i < n - j; i++){y[i - 1] = y[i];x[i - 1] = x[i];}}}}
}

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

相关文章:

  • 单体进化微服务:拆分、注册、调用、网关、过滤、治理、分布式事务
  • 介绍正则表达式及其用法
  • SpEL 表达式 是什么
  • gbase 8s 按时间点恢复
  • OceanBase:OBServer节点管理
  • 记录一个简单的博客系统该开发过程
  • 计算机毕业设计选题推荐-家庭理财微信小程序/安卓APP-项目实战
  • html实现计算器源码
  • 处理无线debug问题
  • redis的性能管理
  • es各种报错问题及解决方案20231121
  • python数据结构与算法-10_递归
  • 如何设计鞋材出库入账管理系统
  • 一个简单的QT应用示例
  • 南京数字孪生赋能工业制造,加速推进制造业数字化转型
  • Visual Studio Code 从英文界面切换中文
  • 邦芒支招:利用自荐电话求职的七大技巧
  • 埃尔米特插值(hermite 插值) C++
  • mysql优化之explain 以及 索引优化
  • WebSocket --- ws模块源码解析(详解)
  • 一文带你拿下MySQL之增删查改(基础)
  • 2023亿发数字化智能工单,专业管理工单处理全流程,助力企业转型腾飞
  • JavaScript 常用符号
  • GPT-4:论文阅读笔记
  • hm商城微服务远程调用及拆分
  • 设置指定时间之前的时间不可选
  • Java使用Redis来实现分布式锁
  • 移动端表格分页uni-app
  • 全志R128芯片RTOS调试指南
  • 超级实用的程序员接单平台,看完少走几年弯路,强推第一个!