插值方法:连分式插值函数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. 样条之连分式插值函数

    核心代码: 1 // 2 // 连分式等距插值 3 // 4 static float GetValuePqs(const void* valuesPtr, int stride, int n, fl ...

  2. C++ .h(头文件) 与 .cpp(源文件) 的使用

    .h 文件: .h是头文件 ,里面主要是写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等, 注意.h文件写的时候有特定的格式就是开头和结尾 #ifndef TEST_HEAD ...

  3. 利用VS+MFC+Opencv显示图像和视频所需添加类(CvvImage.h和CvvImage.cpp的源码)。

    CvvImage.h代码: #pragma once #ifndef CVVIMAGE_CLASS_DEF #define CVVIMAGE_CLASS_DEF #include "open ...

  4. UTF-8 CPP的使用

    UTF-8 CPP是一个简单.小巧.轻量级.跨平台的UTF-8编码字符串库. 下面对其使用方法进行简单的介绍: 1.      从http://sourceforge.net/projects/utf ...

  5. 拇指接龙游戏升级记录03(升级MainScene.cpp)

    MainScene是拇指接龙游戏的主游戏场景文件,拥有近5000行代码. 说实在的,实现自cocos2d-x 2.x版本向当下最新的3.8.1版本的升级过程,其中涉及的技术不是一下能够说明的.有些是形 ...

  6. 分式的二阶导数怎么求_高考数学导数大题如何抢分? 名师手把手教你! 高一高二也要看...

    题型一:讨论含有参数函数的单调性 下面四道题都与lnx.e^x有关,与e^x结合的函数出现的更多一些. ①2018全国Ⅰ卷导数题,与lnx相关,解题时首先考虑定义域,而且求导通分后,分子为二次函数,讨 ...

  7. GATB的使用小例子test.cpp

    1.touch test.cpp,,文件夹中 出现test.cpp touch test.cpp 2. test.cpp的内容 #include <gatb/gatb_core.hpp>i ...

  8. Linux下运行.cpp文件

    如何在Ubuntu16下运行一个简单的.cpp文件呢,做法如下: 假设我在桌面上写了一个hell,world程序; 保存为abc.cpp 然后在终端打开: 1.点击保存的文件的属性,看在哪里,我的是在 ...

  9. 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 ...

最新文章

  1. g++ linux 编译开栈_使用 linux kernel +busybox 定制linux系统
  2. ICLR2021 | 清华大学黄高团队:显存不够?不妨抛弃端到端训练
  3. uPC1677射频信号放大芯片
  4. 2016/07/11 常用正则表达式大全 (转)
  5. 计算机模拟分子设计,计算机模拟分子材料.pdf
  6. [Redis6]Redis相关知识介绍
  7. error: reference to non-static member function must be called sort(nums.begin(),nums.end(),cmp1)
  8. 优雅地减少redux请求样板代码
  9. 如何基于Spring Boot搭建一个完整的项目
  10. MDP马尔可夫决策过程
  11. 海康GB28181接入SRS服务器,实现低延迟直播
  12. 【Python】调用WPS V9 API,实现PPT转PDF
  13. 关闭打印机 文件共享的服务器,文件和打印机共享服务可以禁止?
  14. 教学:四步利用PHP study小皮面板在vscode上编辑php并运行
  15. 项目管理知识体系(PMBOK)
  16. c++ 常用总结(三)
  17. java版mc植物生长条件_教程/种植紫颂果
  18. 如何获客:3招做好触客营销实现高效获
  19. 采样频率和带宽的关系_ADI公司AD7380系列SAR ADC的片内过采样 - 模拟技术
  20. medium_socnet靶场

热门文章

  1. numpy.polyfit(x,y,deg=?) 中的deg的意思
  2. 每日预约送货/提货时间配置一键生成
  3. AI实现移除视频复杂背景-Background-Matting(2)
  4. 蒋鑫鸿:9.6国际黄金期货美原油今日行情走势分析及最新多空操作建议
  5. uni-app base64转图片
  6. 弹性布局(伸缩布局)
  7. 大话小结(2)——创建型模式
  8. Android Studio实现飞机大战
  9. notepad 删除重复行
  10. 远程下载 linux bt,在Linux上安装deluge实现BT离线下载