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

浏览该文件的源代码.

结构体

struct  lmmc_interp_cspline_t
 三次样条插值上下文(不透明类型,自然边界条件). 更多...

函数

void lmmc_interp_cspline_destroy (lmmc_interp_cspline_t *spline)
 销毁三次样条上下文,释放内部分配的所有内存.
lmmc_status_t lmmc_interp_cspline_eval (const lmmc_interp_cspline_t *spline, lmmc_real_t query_x, lmmc_real_t *out_y)
 在样条上求值.
lmmc_status_t lmmc_interp_cspline_create_ex (const lmmc_real_t *xs, const lmmc_real_t *ys, size_t n, lmmc_spline_bc_t bc, lmmc_real_t deriv_left, lmmc_real_t deriv_right, lmmc_interp_cspline_t **out_spline)
 由节点构造带指定边界条件的三次样条.
lmmc_status_t lmmc_interp_cspline_create (const lmmc_real_t *xs, const lmmc_real_t *ys, size_t n, lmmc_interp_cspline_t **out_spline)
 由节点构造自然三次样条.

结构体说明

◆ lmmc_interp_cspline_t

struct lmmc_interp_cspline_t

三次样条插值上下文(不透明类型,自然边界条件).

在文件 interp_spline.c 第 7 行定义.

lmmc_interp_cspline_t 的协作图:
成员变量
size_t n
lmmc_real_t * xs
lmmc_real_t * ys
lmmc_real_t * coeffs

共 4*(n-1) 个系数,每段按 a、b、c、d 存储。

函数说明

◆ lmmc_interp_cspline_destroy()

void lmmc_interp_cspline_destroy ( lmmc_interp_cspline_t * spline)

销毁三次样条上下文,释放内部分配的所有内存.

在文件 interp_spline.c 第 14 行定义.

引用了 lmmc_interp_cspline_t::coeffs, lmmc_interp_cspline_destroy(), lmmc_memory_free(), lmmc_interp_cspline_t::xs , 以及 lmmc_interp_cspline_t::ys.

被这些函数引用 lmmc_interp_cspline_create_ex() , 以及 lmmc_interp_cspline_destroy().

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

◆ lmmc_interp_cspline_eval()

lmmc_status_t lmmc_interp_cspline_eval ( const lmmc_interp_cspline_t * spline,
lmmc_real_t query_x,
lmmc_real_t * out_y )

在样条上求值.

在文件 interp_spline.c 第 25 行定义.

引用了 lmmc_interp_cspline_t::coeffs, interp_find_interval(), lmmc_interp_cspline_eval(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, LMMC_STATUS_OUT_OF_RANGE, lmmc_interp_cspline_t::n, lmmc_interp_cspline_t::xs , 以及 lmmc_interp_cspline_t::ys.

被这些函数引用 lmmc_interp_cspline_eval().

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

◆ lmmc_interp_cspline_create_ex()

lmmc_status_t lmmc_interp_cspline_create_ex ( const lmmc_real_t * xs,
const lmmc_real_t * ys,
size_t n,
lmmc_spline_bc_t bc,
lmmc_real_t deriv_left,
lmmc_real_t deriv_right,
lmmc_interp_cspline_t ** out_spline )

由节点构造带指定边界条件的三次样条.

支持自然,固定(clamped),not-a-knot 和周期四种边界条件. 对于 LMMC_SPLINE_CLAMPED,需通过 deriv_left/deriv_right 指定端点导数; 其他边界条件下这两个参数被忽略.

参数
[in]xs严格升序节点 x 数组.
[in]ys对应 y 值数组.
[in]n节点数,至少 3 .
[in]bc边界条件类型.
[in]deriv_left左端点一阶导数(仅 LMMC_SPLINE_CLAMPED 时使用).
[in]deriv_right右端点一阶导数(仅 LMMC_SPLINE_CLAMPED 时使用).
[out]out_spline返回的样条句柄.
返回
LMMC_STATUS_OK 成功; LMMC_STATUS_INVALID_ARGUMENT 若输入非有限、边界条件枚举无效、 n < 3、xs 非严格升序、PERIODIC 模式下首尾 y 值不匹配或指针为 NULL; LMMC_STATUS_NUMERICAL_FAILURE 若系数计算产生非有限值; LMMC_STATUS_ALLOCATION_FAILED 若内存分配失败.
注解
对于 LMMC_SPLINE_PERIODIC,要求 |ys[0] - ys[n-1]| <= 1e-12,否则返回 LMMC_STATUS_INVALID_ARGUMENT.
副作用
  • 分配堆内存存储样条系数,调用方必须调用 lmmc_interp_cspline_destroy 释放.
  • 内部复制节点数据,调用后可安全释放 xs/ys.

在文件 interp_spline.c 第 141 行定义.

引用了 lmmc_interp_cspline_t::coeffs, interp_spline_workspace_t::h, interp_check_finite_values(), interp_check_samples(), interp_spline_not_a_knot(), interp_spline_periodic(), interp_spline_standard(), lmmc_interp_cspline_create_ex(), lmmc_interp_cspline_destroy(), lmmc_memory_free(), LMMC_SPLINE_NOT_A_KNOT, LMMC_SPLINE_PERIODIC, LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK , 以及 interp_spline_workspace_t::moments.

被这些函数引用 lmmc_interp_cspline_create() , 以及 lmmc_interp_cspline_create_ex().

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

◆ lmmc_interp_cspline_create()

lmmc_status_t lmmc_interp_cspline_create ( const lmmc_real_t * xs,
const lmmc_real_t * ys,
size_t n,
lmmc_interp_cspline_t ** out_spline )

由节点构造自然三次样条.

参数
[in]xs严格升序节点 x 数组.
[in]ys对应 y 值数组.
[in]n节点数,至少 3 .
[out]out_spline返回的样条句柄.
返回
LMMC_STATUS_OK 成功; LMMC_STATUS_INVALID_ARGUMENT 若输入非有限、n < 3、节点非严格 升序或指针为 NULL; LMMC_STATUS_NUMERICAL_FAILURE 若系数计算产生非有限值; LMMC_STATUS_ALLOCATION_FAILED 若内存分配失败.
副作用
  • 分配堆内存存储样条系数,调用方必须调用 lmmc_interp_cspline_destroy 释放.
  • 内部复制节点数据,调用后可安全释放 xs/ys.

在文件 interp_spline.c 第 187 行定义.

引用了 lmmc_interp_cspline_create(), lmmc_interp_cspline_create_ex() , 以及 LMMC_SPLINE_NATURAL.

被这些函数引用 lmmc_interp_cspline_create().

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