C#,数值计算——函数计算,Ratfn的计算方法与源程序

1 文本格式
using System;
namespace Legalsoft.Truffer
{
public class Ratfn
{
private double[] cofs { get; set; }
private int nn { get; set; }
private int dd { get; set; }
public Ratfn(double[] num, double[] den)
{
this.cofs = new double[num.Length + den.Length - 1];
this.nn = num.Length;
this.dd = den.Length;
for (int j = 0; j < nn; j++)
{
cofs[j] = num[j] / den[0];
}
for (int j = 1; j < dd; j++)
{
cofs[j + nn - 1] = den[j] / den[0];
}
}
public Ratfn(double[] coffs, int n, int d)
{
this.cofs = Globals.CopyFrom(coffs);
this.nn = n;
this.dd = d;
}
public double get(double x)
{
double sumn = 0.0;
double sumd = 0.0;
for (int j = nn - 1; j >= 0; j--)
{
sumn = sumn * x + cofs[j];
}
for (int j = nn + dd - 2; j >= nn; j--)
{
sumd = sumd * x + cofs[j];
}
return sumn / (1.0 + x * sumd);
}
public static Ratfn pade(double[] cof)
{
int n = (cof.Length - 1) / 2;
double[,] q = new double[n, n];
double[,] qlu = new double[n, n];
double[] x = new double[n];
double[] y = new double[n];
for (int j = 0; j < n; j++)
{
y[j] = cof[n + j + 1];
for (int k = 0; k < n; k++)
{
q[j, k] = cof[j - k + n];
}
}
LUdcmp lu = new LUdcmp(q);
lu.solve( y, x);
for (int j = 0; j < 4; j++)
{
lu.mprove(y, x);
}
for (int k = 0; k < n; k++)
{
double sum = cof[k + 1];
for (int j = 0; j <= k; j++)
{
sum -= x[j] * cof[k - j];
}
y[k] = sum;
}
double[] num = new double[n + 1];
double[] denom = new double[n + 1];
num[0] = cof[0];
denom[0] = 1.0;
for (int j = 0; j < n; j++)
{
num[j + 1] = y[j];
denom[j + 1] = -x[j];
}
return new Ratfn(num, denom);
}
public static Ratfn ratlsq(UniVarRealValueFun fn, double a, double b, int mm, int kk, ref double dev)
{
const int NPFAC = 8;
const int MAXIT = 5;
const double BIG = 1.0e99;
const double PIO2 = 1.570796326794896619;
int ncof = mm + kk + 1;
int npt = NPFAC * ncof;
double[] bb = new double[npt];
double[] coff = new double[ncof];
double[] ee = new double[npt];
double[] fs = new double[npt];
double[] wt = new double[npt];
double[] xs = new double[npt];
double[,] u = new double[npt, ncof];
Ratfn ratbest = new Ratfn(coff, mm + 1, kk + 1);
dev = BIG;
for (int i = 0; i < npt; i++)
{
if (i < (npt / 2) - 1)
{
double hth = PIO2 * i / (npt - 1.0);
xs[i] = a + (b - a) * Globals.SQR(Math.Sin(hth));
}
else
{
double hth = PIO2 * (npt - i) / (npt - 1.0);
xs[i] = b - (b - a) * Globals.SQR(Math.Sin(hth));
}
fs[i] = fn.funk(xs[i]);
wt[i] = 1.0;
ee[i] = 1.0;
}
double e = 0.0;
for (int it = 0; it < MAXIT; it++)
{
for (int i = 0; i < npt; i++)
{
double power = wt[i];
bb[i] = power * (fs[i] + Globals.SIGN(e, ee[i]));
for (int j = 0; j < mm + 1; j++)
{
u[i, j] = power;
power *= xs[i];
}
power = -bb[i];
for (int j = mm + 1; j < ncof; j++)
{
power *= xs[i];
u[i, j] = power;
}
}
SVD svd = new SVD(u);
svd.solve(bb, coff);
double devmax = 0.0;
double sum = 0.0;
Ratfn rat = new Ratfn(coff, mm + 1, kk + 1);
for (int j = 0; j < npt; j++)
{
ee[j] = rat.get(xs[j]) - fs[j];
wt[j] = Math.Abs(ee[j]);
sum += wt[j];
if (wt[j] > devmax)
{
devmax = wt[j];
}
}
e = sum / npt;
if (devmax <= dev)
{
ratbest = rat;
//ratbest.CopyFrom(rat);
dev = devmax;
}
//Console.Write(" ratlsq iteration= ");
//Console.Write(it);
//Console.Write(" max error= ");
//Console.Write("{0,10}", devmax);
//Console.Write("{0}", "\n");
}
return ratbest;
}
}
}
2 代码格式
using System;namespace Legalsoft.Truffer
{public class Ratfn{private double[] cofs { get; set; }private int nn { get; set; }private int dd { get; set; }public Ratfn(double[] num, double[] den){this.cofs = new double[num.Length + den.Length - 1];this.nn = num.Length;this.dd = den.Length;for (int j = 0; j < nn; j++){cofs[j] = num[j] / den[0];}for (int j = 1; j < dd; j++){cofs[j + nn - 1] = den[j] / den[0];}}public Ratfn(double[] coffs, int n, int d){this.cofs = Globals.CopyFrom(coffs);this.nn = n;this.dd = d;}public double get(double x){double sumn = 0.0;double sumd = 0.0;for (int j = nn - 1; j >= 0; j--){sumn = sumn * x + cofs[j];}for (int j = nn + dd - 2; j >= nn; j--){sumd = sumd * x + cofs[j];}return sumn / (1.0 + x * sumd);}public static Ratfn pade(double[] cof){int n = (cof.Length - 1) / 2;double[,] q = new double[n, n];double[,] qlu = new double[n, n];double[] x = new double[n];double[] y = new double[n];for (int j = 0; j < n; j++){y[j] = cof[n + j + 1];for (int k = 0; k < n; k++){q[j, k] = cof[j - k + n];}}LUdcmp lu = new LUdcmp(q);lu.solve( y, x);for (int j = 0; j < 4; j++){lu.mprove(y, x);}for (int k = 0; k < n; k++){double sum = cof[k + 1];for (int j = 0; j <= k; j++){sum -= x[j] * cof[k - j];}y[k] = sum;}double[] num = new double[n + 1];double[] denom = new double[n + 1];num[0] = cof[0];denom[0] = 1.0;for (int j = 0; j < n; j++){num[j + 1] = y[j];denom[j + 1] = -x[j];}return new Ratfn(num, denom);}public static Ratfn ratlsq(UniVarRealValueFun fn, double a, double b, int mm, int kk, ref double dev){const int NPFAC = 8;const int MAXIT = 5;const double BIG = 1.0e99;const double PIO2 = 1.570796326794896619;int ncof = mm + kk + 1;int npt = NPFAC * ncof;double[] bb = new double[npt];double[] coff = new double[ncof];double[] ee = new double[npt];double[] fs = new double[npt];double[] wt = new double[npt];double[] xs = new double[npt];double[,] u = new double[npt, ncof];Ratfn ratbest = new Ratfn(coff, mm + 1, kk + 1);dev = BIG;for (int i = 0; i < npt; i++){if (i < (npt / 2) - 1){double hth = PIO2 * i / (npt - 1.0);xs[i] = a + (b - a) * Globals.SQR(Math.Sin(hth));}else{double hth = PIO2 * (npt - i) / (npt - 1.0);xs[i] = b - (b - a) * Globals.SQR(Math.Sin(hth));}fs[i] = fn.funk(xs[i]);wt[i] = 1.0;ee[i] = 1.0;}double e = 0.0;for (int it = 0; it < MAXIT; it++){for (int i = 0; i < npt; i++){double power = wt[i];bb[i] = power * (fs[i] + Globals.SIGN(e, ee[i]));for (int j = 0; j < mm + 1; j++){u[i, j] = power;power *= xs[i];}power = -bb[i];for (int j = mm + 1; j < ncof; j++){power *= xs[i];u[i, j] = power;}}SVD svd = new SVD(u);svd.solve(bb, coff);double devmax = 0.0;double sum = 0.0;Ratfn rat = new Ratfn(coff, mm + 1, kk + 1);for (int j = 0; j < npt; j++){ee[j] = rat.get(xs[j]) - fs[j];wt[j] = Math.Abs(ee[j]);sum += wt[j];if (wt[j] > devmax){devmax = wt[j];}}e = sum / npt;if (devmax <= dev){ratbest = rat;//ratbest.CopyFrom(rat);dev = devmax;}//Console.Write(" ratlsq iteration= ");//Console.Write(it);//Console.Write(" max error= ");//Console.Write("{0,10}", devmax);//Console.Write("{0}", "\n");}return ratbest;}}
}
相关文章:
C#,数值计算——函数计算,Ratfn的计算方法与源程序
1 文本格式 using System; namespace Legalsoft.Truffer { public class Ratfn { private double[] cofs { get; set; } private int nn { get; set; } private int dd { get; set; } public Ratfn(double[] num, double[] den) { …...
排序算法之-快速
算法原理 丛待排序的数列中选择一个基准值,通过遍历数列,将数列分成两个子数列:小于基准值数列、大于基准值数列,准确来说还有个子数列:等于基准值即: 算法图解 选出基准元素pivot(可以选择…...
[vim]Python编写插件学习笔记2 - 分离
0 环境 Windows 11 22H2gVim82 (D:/ProgramFiles/Vim)Python311 (D:/ProgramFiles/Python311)Vundle v0.10.2 阅读本文前,需要先了解前文: 《[vim]Python 编写插件学习笔记1 - 开始》 1 Python 与 vimscript 分离 前文编写 vim 插件的方式,是将 Pyt…...
【已解决】ModuleNotFoundError: No module named ‘kornia‘
问题描述 Traceback (most recent call last): File "main.py", line 47, in <module> import data_augmentation File "/media/visionx/monica/project/stable_signature/hidden/data_augmentation.py", line 15, in <module> im…...
预览PDF并显示当前页数
这里写目录标题 步骤实例实例效果图 步骤 1.安装依赖 npm install --save vue-pdf2.在需要的页面,引入插件 import pdf from vue-pdf3.使用 单页pdf可以直接使用 <pdf :src"获取到的pdf地址"></pdf>多页pdf通过循环实现 html标签部分 &l…...
阿里云优惠券介绍、作用、领取入口及使用教程
阿里云是阿里巴巴集团倾力打造的云计算品牌,提供丰富多样的云计算产品及服务,为了吸引用户,阿里云经常推出各种优惠活动,其中就包括阿里云优惠券的发放。本文将为大家详细介绍阿里云优惠券的作用、领取入口以及使用教程。 一、阿里…...
Shell编程--流程控制
目录 1.条件结构1.1.文件测试(字符串)1.2.字符串比较1.3.数字条件比较1.4.文件条件判断 2.if多条件判断3.case语句 1.条件结构 测试:test 条件 条件为真返回 0,条件为假返回 1 语法:[ 条件 ] test 条件能够理解以下类型的表达式 1.1.…...
设计模式-模板方法模式(Template Method)
设计模式-模板方法模式(Template Method) 一、模板方法模式概述1.1 什么是模板方法模式1.2 简单实现模板方法模式1.3 使用模板方法模式的注意事项 二、模板方法模式的用途三、模板方法模式实现方式3.1 抽象类中定义模板方法,子类实现具体方法…...
远程登录Linux方法(Linux平台相互远程;Windows远程登录Linux、远程编码、文件传输;无法远程登录的问题解决;c程序的编译)
在实际使用Linux系统过程中我们不可避免的需要远程登录Linux,这是因为未来大家使用Linux服务器的时候你所对应的那台Linux服务器不一定提供界面(服务器可能在外地)。本篇将会介绍远程登录Linux的方法。 文章目录 1. SSH介绍2. Linux平台相互远程及文件传输2.1 Linux…...
macOS 13.6 及后续系统安装 Asahi Linux 将破坏引导
导读Asahi Linux 是一个致力于为 Apple Silicon 设备带来 Linux 支持的项目,日前有用户反馈称,若在相关设备上安装了 macOS 13.6-14,再安装 Asahi Linux ,就会导致系统引导失败,出现“黑屏”情况。 目前 Asahi Linux 项…...
Python武器库开发-flask篇之flask框架的安装(二十一)
Flask介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进…...
【CASS精品教程】打开cass提示base.dcl未找到文件的解决办法
打开cass 7.1时提示base.dcl未找到文件的解决办法。 文章目录 一、问题描述二、解决办法 一、问题描述 系统上安装了cad2006cass7.1,cass软件可以正常打开,但是在使用屏幕菜单绘制地图时,选择一个工具,提示base.dcl未找到文件&am…...
[vim]Python编写插件学习笔记3 - 命令行参数
0 环境 Windows 11 22H2gVim82 (D:/ProgramFiles/Vim)Python311 (D:/ProgramFiles/Python311)Vundle v0.10.2 阅读本文前,需要先了解前文: 《[vim]Python 编写插件学习笔记1 - 开始》 《[vim]Python 编写插件学习笔记2 - 分离》 1 前提说明 由于本…...
【仙逆】王林400年晋升元婴,复仇藤化元杀尽藤姓,高老畏罪自裁
Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料仙逆第10集剧情解析,高启明,缥缈宗的元婴初期老祖,一生潜心研究推演之术,洞察先机,乃是宗门之人的精神支柱。藤化元曾为寻找王林父母所在之…...
云原生实战课大纲
1. 云原生是什么 原生应用(java,pyrhon) 上云的过程应用上云遇到的问题1.微服务的拆分 微服务的访问关系应用的架构云原生适合什么样的人去学具备什么样的前提条件云原生要学习什么docker k8s devlops server mesh jks k8s监控吧自己的微服务部署上…...
数据湖架构
数据湖架构介绍 数据湖(Data Lake)是一个存储大量结构化和非结构化数据的集中式数据存储库。 与传统的数据仓库不同,数据湖采用扁平化结构,将数据存储在原始形式下,不需要进行预处理或转化。这使得数据湖能够同时支持…...
Zabbix 5.0部署(centos7+server+MySQL+Apache)
环境 系统IPZABBIX版本主机名centos7192.168.231.2195.0zabbix-server 安装zabbix 我选择版本是zabbix-5.0 zabbix的官网是Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution 安装Zabbix软件源 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/…...
YOLO改进系列之注意力机制(CloAttention模型介绍)
CloAttention来自清华大学的团队提出的一篇论文CloFormer,作者从频域编码的角度认为现有的轻量级视觉Transformer中,大多数方法都只关注设计稀疏注意力,来有效地处理低频全局信息,而使用相对简单的方法处理高频局部信息。很少有方…...
openssl+AES开发实例(linux)
文章目录 一、AES介绍二、AES原理三、AES开发实例 一、AES介绍 AES(Advanced Encryption Standard)是一种对称密钥加密标准,它是一种对称加密算法,意味着相同的密钥用于加密和解密数据。AES 是 NIST(美国国家标准与技…...
FreeRTOS源码阅读笔记3--queue.c
消息队列可以应用于发送不定长消息的场合,包括任务与任务间的消息交换,队列是 FreeRTOS 主要的任务间通讯方式,可以在任务与任务间、中断和任务间传送信息,发送到 队列的消息是通过拷贝方式实现的,这意味着队列存储…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
