C#,数值计算——插值和外推,径向基函数插值(RBF_interp)的计算方法与源程序

1 文本格式

using System;

namespace Legalsoft.Truffer
{
    /// <summary>
    /// 径向基函数插值
    /// Object for radial basis function interpolation using n points in dim
    /// dimensions.Call constructor once, then interp as many times as desired.
    /// </summary>
    public class RBF_interp
    {
        //public delegateFunc func { get; set; } = null;

        private int dim { get; set; }
        private int n { get; set; }
        private double[,] pts { get; set; }
        private double[] vals { get; set; }
        private double[] w;
        public RBF_fn fn;
        private bool norm { get; set; }

        public RBF_interp(double[,] ptss, double[] valss, RBF_fn func, bool nrbf = false)
        {
            this.dim = ptss.GetLength(1);
            this.n = ptss.GetLength(0);
            this.pts = ptss;
            this.vals = valss;
            this.w = new double[n];
            this.fn = func;
            this.norm = nrbf;

            double[,] rbf = new double[n, n];
            double[] rhs = new double[n];
            for (int i = 0; i < n; i++)
            {
                double sum = 0.0;
                for (int j = 0; j < n; j++)
                {
                    //sum += (rbf[i, j] = fn.rbf(rad(pts[i, 0], pts[j, 0])));
                    double r = Globals.dist(Globals.CopyFrom(i, pts), Globals.CopyFrom(j, pts));
                    rbf[i, j] = func.rbf(r);
                    sum += rbf[i, j];
                }
                if (norm)
                {
                    rhs[i] = sum * vals[i];
                }
                else
                {
                    rhs[i] = vals[i];
                }
            }
            LUdcmp lu = new LUdcmp(rbf);
            lu.solve( rhs,  w);
        }

        public double interp(double[] pt)
        {
            double fval;
            double sum = 0.0;
            double sumw = 0.0;
            if (pt.Length != dim)
            {
                throw new Exception("RBF_interp bad pt size");
            }
            for (int i = 0; i < n; i++)
            {
                //fval = fn.rbf(rad(pt[0], pts[i, 0]));
                fval = fn.rbf(Globals.dist(pt, Globals.CopyFrom(i, pts)));
                sumw += w[i] * fval;
                sum += fval;
            }
            return norm ? sumw / sum : sumw;
        }
        /*
        public double rad(double[] p1, double[] p2)
        {
            double sum = 0.0;
            for (int i = 0; i < dim; i++)
            {
                sum += Globals.SQR(p1[i] - p2[i]);
            }
            if (sum <= float.Epsilon)
            {
                return 0.0;
            }
            return Math.Sqrt(sum);
        }
        */
    }
}
 

2 代码格式

using System;namespace Legalsoft.Truffer
{/// <summary>/// 径向基函数插值/// Object for radial basis function interpolation using n points in dim/// dimensions.Call constructor once, then interp as many times as desired./// </summary>public class RBF_interp{//public delegateFunc func { get; set; } = null;private int dim { get; set; }private int n { get; set; }private double[,] pts { get; set; }private double[] vals { get; set; }private double[] w;public RBF_fn fn;private bool norm { get; set; }public RBF_interp(double[,] ptss, double[] valss, RBF_fn func, bool nrbf = false){this.dim = ptss.GetLength(1);this.n = ptss.GetLength(0);this.pts = ptss;this.vals = valss;this.w = new double[n];this.fn = func;this.norm = nrbf;double[,] rbf = new double[n, n];double[] rhs = new double[n];for (int i = 0; i < n; i++){double sum = 0.0;for (int j = 0; j < n; j++){//sum += (rbf[i, j] = fn.rbf(rad(pts[i, 0], pts[j, 0])));double r = Globals.dist(Globals.CopyFrom(i, pts), Globals.CopyFrom(j, pts));rbf[i, j] = func.rbf(r);sum += rbf[i, j];}if (norm){rhs[i] = sum * vals[i];}else{rhs[i] = vals[i];}}LUdcmp lu = new LUdcmp(rbf);lu.solve( rhs,  w);}public double interp(double[] pt){double fval;double sum = 0.0;double sumw = 0.0;if (pt.Length != dim){throw new Exception("RBF_interp bad pt size");}for (int i = 0; i < n; i++){//fval = fn.rbf(rad(pt[0], pts[i, 0]));fval = fn.rbf(Globals.dist(pt, Globals.CopyFrom(i, pts)));sumw += w[i] * fval;sum += fval;}return norm ? sumw / sum : sumw;}/*public double rad(double[] p1, double[] p2){double sum = 0.0;for (int i = 0; i < dim; i++){sum += Globals.SQR(p1[i] - p2[i]);}if (sum <= float.Epsilon){return 0.0;}return Math.Sqrt(sum);}*/}
}

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

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

相关文章

2023年亚太杯APMCM数学建模大赛B题玻璃温室小气候调控

2023年亚太杯APMCM数学建模大赛 B题 玻璃温室小气候调控 原题再现 温室作物的产量受各种气候因素的影响&#xff0c;包括温度、湿度和风速[1]。其中&#xff0c;适宜的温度和风速对植物生长至关重要[2]。为了调节玻璃温室内的温度、风速等气候因素&#xff0c;在温室设计中常…

vue3+ts 指令简写

<template><div class"btns"><button v-has-show"shop:create">创建</button><button v-has-show"shop:edit">编辑</button><button v-has-show"shop:delete">删除</button></div…

集软件库、论坛、社区、工具箱、积分商城、会员体系、在线商城一体的后台系统+HBuilderX 前端软件社区

HBuilderX前端软件社区thinkphp后端源码 搭建好后台 在前端找到 util 这个文件 把两个js文件上面的填上自己的域名 电脑需要下载&#xff1a;HBuilderX 下载后 登录账号 没有账号就注册账号 然后上传文件 在选择你上传的文件 即可 打包选择 “发行” 可以打包app h5等等 …

开源语音大语言模型——Qwen-Audio

论文链接&#xff1a;https://arxiv.org/pdf/2311.07919.pdf 开源代码&#xff1a;https://github.com/QwenLM/Qwen-Audio 一、背景 大型语言模型&#xff08;LLMs&#xff09;由于其良好的知识保留能力、复杂的推理和解决问题能力&#xff0c;在通用人工智能&#xff08;AGI…

Android Handler同步屏障:深入解析

Android Handler同步屏障&#xff1a;深入解析 在Android开发中&#xff0c;Handler和MessageQueue是处理线程间通信的重要组件。除了常见的消息发送和处理功能&#xff0c;Handler还提供了一个高级特性&#xff1a;同步屏障。本文将深入探讨这一特性&#xff0c;包括它的工作…

Matplotlib线形图的创建_Python数据分析与可视化

线形图的创建 绘制线形图设置颜色和风格设置坐标轴上下限设置图形标签 绘制线形图 在所有图形中&#xff0c;最简单的应该就是线性方程y f (x) 的可视化了。来看看如何创建这个简单的线形图。要画Matplotlib图形时&#xff0c;都需要先创建一个图形fig 和一个坐标轴ax。创建图…

Elasticsearch(ES)概述

文章目录 一.什么是Elasticsearch?1.正向索引和倒排索引2.Mysql和ES的概念对比3.安装elasticsearch、kibana 二.IK分词器三.索引库操作四.文档操作五.RestClient操作索引库1.初始化RestClient2.创建索引库3.删除索引库4.判断索引库是否存在 六.RestClient操作文档1.新增文档2.…

Python 新版来袭!3.12.0 安装教程!!

Python是一门面向对象的计算机程序设计语言&#xff0c;以简洁和优雅著称&#xff0c;可以用于网络爬虫、web开发、人工智能、机器学习、数据挖掘及分析等工作&#xff0c;是目前最受欢迎的编程语言之一。 目前常见的Python版本有Python2和Python3&#xff0c;Python3不向下&a…

测试用例设计方法-场景法详解

01 定义 场景法是通过运用场景来对系统的功能点或业务流程的描述&#xff0c;从而提高测试效果的一种方法。 场景法一般包含基本流和备用流&#xff0c;从一个流程开始&#xff0c;通过描述经过的路径来确定的过程&#xff0c;经过遍历所有的基本流和备用流来完成整个场景。 …

北美区域性确定性预测系统平均温度数据

区域确定性预测系统&#xff08;RDPS&#xff09; 区域确定性预测系统 (RDPS) 进行物理计算&#xff0c;以 10.0 公里网格&#xff08;1/11 度&#xff09;空间分辨率对当天到未来 48 小时内的大气元素进行确定性预测。平均温度数据覆盖北美&#xff0c;由加拿大气象局 (MSC) …

【STM32】GPIO输入

1 GPIO输出 1.1 按键简介 按键&#xff1a;常见的输入设备&#xff0c;按下导通&#xff0c;松手断开 按键抖动&#xff1a;由于按键内部使用的是机械式弹簧片来进行通断的&#xff0c;所以在按下和松手的瞬间会伴随有一连串的抖动 1.2 传感器模块简介 传感器模块&#xff…

LearnTheArchitecture-MemoryManagement

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 — 适合小白入门【目录】ARMv8/ARMv9架构高级进阶-[目录]👈👈👈 — 高级进阶、小白勿买【加群】ARM/TEE…

day02 hive 实操练习

一、某高校图书管理系统中有如下三个数据模型&#xff1a; create table book( book_id string, sort string, book_name string, writer string, output string, price decimal(10,2));INSERT INTO TABLE book VALUES (001,TP391,information_processing,author1,machinery_i…

redis优化秒杀和消息队列

redis优化秒杀 1. 异步秒杀思路1.1 在redis存入库存和订单信息1.2 具体流程图 2. 实现2.1 总结 3. Redis的消息队列3.1 基于list实现消息队列3.2 基于PubSub实现消息队列3.3 基于stream实现消息队列3.3.1 stream的单消费模式3.3.2 stream的消费者组模式 3.4 基于stream消息队列…

XmlElement注解用在Java的列表属性上产生的效果

例如&#xff0c;下面的代码&#xff0c;XmlElement注解用在了Conditions类的conditionList属性的getter方法上&#xff0c;其中conditionList是一个列表类型&#xff1a; package com.thb;import java.util.List;import jakarta.xml.bind.annotation.XmlAttribute; import ja…

Python面经【4】

Python面经【4】 一、什么是闭包二、[列表]和(元组)的区别三、__Init__和__new__的区别四、Python里match与search的区别五、创建百万级实例如何节省内存六、18. 4G内存如何读取一个5G的数据 一、什么是闭包 闭包指的是在函数内部定义了另一个函数&#xff0c;并返回了这个作为…

香港服务器显示美国 IP 地址是怎么回事

香港服务器显示美国 IP&#xff0c;在我们选择免备案服务器时会考虑很多影响因素&#xff0c;其中香港服务器有着省时省力&#xff0c;方便速度快等优 势受到大多用户喜爱&#xff0c;可有的时候在选择香港服务器时发现&#xff0c;有的香港服务器在 IP 地址一栏会显示其它国家…

leetcode每日一题34

89.格雷编码 观察一下n不同时的格雷编码有什么特点 n1 [0,1] n2 [0,1,3,2] n3 [0,1,3,2,6,7,5,4] …… 可以看到nk时&#xff0c;编码数量是nk-1的数量的一倍 同时nk编码的前半部分和nk-1一模一样 nk编码的最后一位是2k-1 后半部分的编码是其对应的前半部分的对称的位置的数字…

如何使用OpenCV转换图像并创建视频,实现Ken Burns特效

一、Ken Burns特效 当使用OpenCV时,最常使用的是图像,但是我们也可以多个图像创建动画,通过引入时间轴更容易可视化。 Ken Burns特效这是一种以电影制片人肯伯恩斯 (Ken Burns) 命名的平移和缩放技术,Ken Burns 效果不是在屏幕上显示大型静态照片,而是裁剪细节,然后平移图…

vue3(四)-基础入门之 fetch 与 axios

一、fetch 1、axios和fetch的区别 Axios 和 Fetch 都是 JavaScript 中用于发送 HTTP 请求的 API&#xff0c;它们的主要区别在以下方面&#xff1a; 1.Axios 支持更广泛的浏览器和 Node.js 版本&#xff0c;而 Fetch 只能在较新的浏览器中使用&#xff0c;或需要使用 polyfi…