LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
interp_shape.c 文件参考
#include "memory_bridge.h"
#include "internal.h"
#include "internal/interp_internal.h"
#include <math.h>
#include <string.h>
interp_shape.c 的引用(Include)关系图:

浏览该文件的源代码.

结构体

struct  lmmc_interp_pchip_t
 PCHIP 插值上下文(不透明类型). 更多...
struct  lmmc_interp_akima_t
 Akima 插值上下文(不透明类型). 更多...

函数

void lmmc_interp_pchip_destroy (lmmc_interp_pchip_t *p)
 销毁 PCHIP 插值上下文,释放内部分配的所有内存.
lmmc_status_t lmmc_interp_pchip_create (const lmmc_real_t *xs, const lmmc_real_t *ys, size_t n, lmmc_interp_pchip_t **out)
 由节点构造 PCHIP 单调三次插值.
lmmc_status_t lmmc_interp_pchip_eval (const lmmc_interp_pchip_t *p, lmmc_real_t x, lmmc_real_t *out_y)
 在 PCHIP 插值上求值.
void lmmc_interp_akima_destroy (lmmc_interp_akima_t *a)
 销毁 Akima 插值上下文,释放内部分配的所有内存.
lmmc_status_t lmmc_interp_akima_create (const lmmc_real_t *xs, const lmmc_real_t *ys, size_t n, lmmc_interp_akima_t **out)
 由节点构造 Akima 局部三次插值.
lmmc_status_t lmmc_interp_akima_eval (const lmmc_interp_akima_t *a, lmmc_real_t x, lmmc_real_t *out_y)
 在 Akima 插值上求值.

结构体说明

◆ lmmc_interp_pchip_t

struct lmmc_interp_pchip_t

PCHIP 插值上下文(不透明类型).

在文件 interp_shape.c 第 8 行定义.

lmmc_interp_pchip_t 的协作图:
成员变量
size_t n
lmmc_real_t * xs
lmmc_real_t * ys
lmmc_real_t * d

各节点导数。

◆ lmmc_interp_akima_t

struct lmmc_interp_akima_t

Akima 插值上下文(不透明类型).

在文件 interp_shape.c 第 148 行定义.

lmmc_interp_akima_t 的协作图:
成员变量
size_t n
lmmc_real_t * xs
lmmc_real_t * ys
lmmc_real_t * d

各节点导数。

函数说明

◆ lmmc_interp_pchip_destroy()

void lmmc_interp_pchip_destroy ( lmmc_interp_pchip_t * p)

销毁 PCHIP 插值上下文,释放内部分配的所有内存.

在文件 interp_shape.c 第 15 行定义.

引用了 lmmc_interp_pchip_t::d, lmmc_interp_pchip_destroy(), lmmc_memory_free(), lmmc_interp_pchip_t::xs , 以及 lmmc_interp_pchip_t::ys.

被这些函数引用 lmmc_interp_pchip_create() , 以及 lmmc_interp_pchip_destroy().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_interp_pchip_create()

lmmc_status_t lmmc_interp_pchip_create ( const lmmc_real_t * xs,
const lmmc_real_t * ys,
size_t n,
lmmc_interp_pchip_t ** out )

由节点构造 PCHIP 单调三次插值.

PCHIP(Piecewise Cubic Hermite Interpolating Polynomial)在单调数据上 保持插值单调性.节点导数由 Fritsch-Carlson 方法计算.

参见
F. N. Fritsch and R. E. Carlson, "Monotone Piecewise Cubic Interpolation," SIAM J. Numer. Anal. 17(2), 1980.
参数
[in]xs严格升序节点 x 数组.
[in]ys对应 y 值数组.
[in]n节点数,至少 2 .
[out]out返回的 PCHIP 句柄.
返回
LMMC_STATUS_OK 成功; LMMC_STATUS_INVALID_ARGUMENT 若输入非有限、n < 2、xs 非严格升序或指针为 NULL; LMMC_STATUS_NUMERICAL_FAILURE 若系数计算产生非有限值; LMMC_STATUS_ALLOCATION_FAILED 若内存分配失败.
副作用
  • 分配堆内存存储插值系数,调用方必须调用 lmmc_interp_pchip_destroy 释放.
  • 内部复制节点数据,调用后可安全释放 xs/ys.

< 各段斜率。

在文件 interp_shape.c 第 64 行定义.

引用了 lmmc_interp_pchip_t::d, interp_check_finite_values(), interp_check_samples(), lmmc_interp_pchip_create(), lmmc_interp_pchip_destroy(), lmmc_memory_alloc(), lmmc_memory_alloc_array(), lmmc_memory_free(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_interp_pchip_t::n, lmmc_interp_pchip_t::xs , 以及 lmmc_interp_pchip_t::ys.

被这些函数引用 lmmc_interp_pchip_create().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_interp_pchip_eval()

lmmc_status_t lmmc_interp_pchip_eval ( const lmmc_interp_pchip_t * p,
lmmc_real_t x,
lmmc_real_t * out_y )

在 PCHIP 插值上求值.

在文件 interp_shape.c 第 115 行定义.

引用了 lmmc_interp_pchip_t::d, interp_find_interval(), lmmc_interp_pchip_eval(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, LMMC_STATUS_OUT_OF_RANGE, lmmc_interp_pchip_t::n, lmmc_interp_pchip_t::xs , 以及 lmmc_interp_pchip_t::ys.

被这些函数引用 lmmc_interp_pchip_eval().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_interp_akima_destroy()

void lmmc_interp_akima_destroy ( lmmc_interp_akima_t * a)

销毁 Akima 插值上下文,释放内部分配的所有内存.

在文件 interp_shape.c 第 155 行定义.

引用了 lmmc_interp_akima_t::d, lmmc_interp_akima_destroy(), lmmc_memory_free(), lmmc_interp_akima_t::xs , 以及 lmmc_interp_akima_t::ys.

被这些函数引用 lmmc_interp_akima_create() , 以及 lmmc_interp_akima_destroy().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_interp_akima_create()

lmmc_status_t lmmc_interp_akima_create ( const lmmc_real_t * xs,
const lmmc_real_t * ys,
size_t n,
lmmc_interp_akima_t ** out )

由节点构造 Akima 局部三次插值.

Akima 插值使用局部加权平均计算节点导数,使离群点的影响保持局部. 边界导数计算需要至少 5 个节点.

参见
Hiroshi Akima, "A New Method of Interpolation and Smooth Curve Fitting Based on Local Procedures," J. ACM 17(4), 1970.
参数
[in]xs严格升序节点 x 数组.
[in]ys对应 y 值数组.
[in]n节点数,至少 5(Akima 需要至少 5 个点).
[out]out返回的 Akima 句柄.
返回
LMMC_STATUS_OK 成功; LMMC_STATUS_INVALID_ARGUMENT 若输入非有限、n < 5、xs 非严格升序或指针为 NULL; LMMC_STATUS_NUMERICAL_FAILURE 若系数计算产生非有限值; LMMC_STATUS_ALLOCATION_FAILED 若内存分配失败.
副作用
  • 分配堆内存存储插值系数,调用方必须调用 lmmc_interp_akima_destroy 释放.
  • 内部复制节点数据,调用后可安全释放 xs/ys.

< 扩展斜率 m[-2]..m[n] 存于索引 0..n+2。

在文件 interp_shape.c 第 203 行定义.

引用了 lmmc_interp_akima_t::d, interp_check_finite_values(), interp_check_samples(), lmmc_interp_akima_create(), lmmc_interp_akima_destroy(), lmmc_memory_alloc(), lmmc_memory_alloc_array(), lmmc_memory_free(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_interp_akima_t::n, lmmc_interp_akima_t::xs , 以及 lmmc_interp_akima_t::ys.

被这些函数引用 lmmc_interp_akima_create().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_interp_akima_eval()

lmmc_status_t lmmc_interp_akima_eval ( const lmmc_interp_akima_t * a,
lmmc_real_t x,
lmmc_real_t * out_y )

在 Akima 插值上求值.

在文件 interp_shape.c 第 254 行定义.

引用了 lmmc_interp_akima_t::d, interp_find_interval(), lmmc_interp_akima_eval(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, LMMC_STATUS_OUT_OF_RANGE, lmmc_interp_akima_t::n, lmmc_interp_akima_t::xs , 以及 lmmc_interp_akima_t::ys.

被这些函数引用 lmmc_interp_akima_eval().

函数调用图:
这是这个函数的调用关系图: