连分式插值函数-Cpp
插值方法:连分式插值函数C++实现
本文用C++方法实现连分式插值,核心函数共有3个。
funpqj | 计算函数的连分式的新一节 |
---|---|
funpqv | 计算出函数连分式的值 |
funpq | 以上面两个函数为依托,进行连分式逐步插值 |
数学计算的递归式为
void funpqj(double x[], double y[], double b[], int j)
{int k, flag = 0;double u;u = y[j];for (k = 0; (k < j) && (flag == 0); k++){if ((u - b[k]) + 1.0 == 1.0) flag = 1;elseu = (x[j] - x[k]) / (u - b[k]);}if (flag == 1) u = 1.0e+35;b[j] = u;return;
}
double funpqv(double x[], double b[], int n, double t)
{int k;double u;u = b[n];for (k = n - 1; k >= 0; k--){if (fabs(u) + 1.0 == 1.0)u = 1.0e+35*(t - x[k]) / fabs(t - x[k]);elseu = b[k] + (t - x[k]) / u;}return(u);
}
double funpq(double x[], double y[], int n, double eps, double t)
{int i, j, k, l, m;double p, q, u;double b[8], xx[8], yy[8];p = 0.0;if (n < 1) return(p);if (n == 1) {p = y[0];return(p);}m = 8;if (m > n) m = n;if (t <= x[0]) k = 1;else if (t >= x[n - 1]) k = n;else{k = 1;j = n;while ((k - j != 1) && (k - j != -1)){l = (k + j) / 2;if (t < x[l - 1]) j = l;else k = 1;}if (fabs(t - x[l - 1]) > fabs(t - x[j - 1])) k = j;}j = 1;l = 0;for (i = 1; i <= m; i++){k=k+j * l;if ((k < 1) || (k > n)){l=l+1;j = -j;k =k+ j *l;}xx[i - 1] = x[k - 1];yy[i - 1] = y[k - 1];l =l+ 1;j = -j;}j = 0; b[0] = yy[0]; p = b[0];u = 1.0 + eps;while ((j < m - 1) && (u >= eps)){j=j+1;funpqj(xx, yy, b, j);q = funpqv(xx, b, j, t);u = (fabs(q - p));p = q;}return(p);
}
本文参考了清华大学出版社的《常用函数算法集(C++描述)》
本文旨在对原书相关算法及代码整合,优化,解释。
原书中测试该插值方法的插值点为-0.85和0.25。
实际运行中,若要同时输出两组值,第二组t=0.25并没有差值成功并输出。
代码的进一步优化还在进行中,也请读者指正。
我的GitHubhttps://github.com/TYduoduo
连分式插值函数-Cpp相关推荐
- 样条之连分式插值函数
核心代码: 1 // 2 // 连分式等距插值 3 // 4 static float GetValuePqs(const void* valuesPtr, int stride, int n, fl ...
- C++ .h(头文件) 与 .cpp(源文件) 的使用
.h 文件: .h是头文件 ,里面主要是写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等, 注意.h文件写的时候有特定的格式就是开头和结尾 #ifndef TEST_HEAD ...
- 利用VS+MFC+Opencv显示图像和视频所需添加类(CvvImage.h和CvvImage.cpp的源码)。
CvvImage.h代码: #pragma once #ifndef CVVIMAGE_CLASS_DEF #define CVVIMAGE_CLASS_DEF #include "open ...
- UTF-8 CPP的使用
UTF-8 CPP是一个简单.小巧.轻量级.跨平台的UTF-8编码字符串库. 下面对其使用方法进行简单的介绍: 1. 从http://sourceforge.net/projects/utf ...
- 拇指接龙游戏升级记录03(升级MainScene.cpp)
MainScene是拇指接龙游戏的主游戏场景文件,拥有近5000行代码. 说实在的,实现自cocos2d-x 2.x版本向当下最新的3.8.1版本的升级过程,其中涉及的技术不是一下能够说明的.有些是形 ...
- 分式的二阶导数怎么求_高考数学导数大题如何抢分? 名师手把手教你! 高一高二也要看...
题型一:讨论含有参数函数的单调性 下面四道题都与lnx.e^x有关,与e^x结合的函数出现的更多一些. ①2018全国Ⅰ卷导数题,与lnx相关,解题时首先考虑定义域,而且求导通分后,分子为二次函数,讨 ...
- GATB的使用小例子test.cpp
1.touch test.cpp,,文件夹中 出现test.cpp touch test.cpp 2. test.cpp的内容 #include <gatb/gatb_core.hpp>i ...
- Linux下运行.cpp文件
如何在Ubuntu16下运行一个简单的.cpp文件呢,做法如下: 假设我在桌面上写了一个hell,world程序; 保存为abc.cpp 然后在终端打开: 1.点击保存的文件的属性,看在哪里,我的是在 ...
- 2020-10-26runtime error: member access within null pointer of type ‘struct ListNode‘ (solution.cpp)错
runtime error: member access within null pointer of type 'struct ListNode' (solution.cpp)错误 /*** Def ...
最新文章
- g++ linux 编译开栈_使用 linux kernel +busybox 定制linux系统
- ICLR2021 | 清华大学黄高团队:显存不够?不妨抛弃端到端训练
- uPC1677射频信号放大芯片
- 2016/07/11 常用正则表达式大全 (转)
- 计算机模拟分子设计,计算机模拟分子材料.pdf
- [Redis6]Redis相关知识介绍
- error: reference to non-static member function must be called sort(nums.begin(),nums.end(),cmp1)
- 优雅地减少redux请求样板代码
- 如何基于Spring Boot搭建一个完整的项目
- MDP马尔可夫决策过程
- 海康GB28181接入SRS服务器,实现低延迟直播
- 【Python】调用WPS V9 API,实现PPT转PDF
- 关闭打印机 文件共享的服务器,文件和打印机共享服务可以禁止?
- 教学:四步利用PHP study小皮面板在vscode上编辑php并运行
- 项目管理知识体系(PMBOK)
- c++ 常用总结(三)
- java版mc植物生长条件_教程/种植紫颂果
- 如何获客:3招做好触客营销实现高效获
- 采样频率和带宽的关系_ADI公司AD7380系列SAR ADC的片内过采样 - 模拟技术
- medium_socnet靶场