Lines Matching +full:- +full:d

1 /* ----------------------------------------------------------------------
4 * Description: Floating-point cubic spline initialization function
9 * Target Processor: Cortex-M and Cortex-A cores
10 * -------------------------------------------------------------------- */
12 * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
14 * SPDX-License-Identifier: Apache-2.0
20 * www.apache.org/licenses/LICENSE-2.0
42 <code>coeffs</code> will contain the b, c, and d coefficients for the (n-1) intervals
43 (n is the number of known points), hence its size must be 3*(n-1); <code>tempBuffer</code>
44 is temporally used for internal computations and its size is n+n-1.
54 * @brief Initialization function for the floating-point cubic spline interpolation.
55 * @param[in,out] S points to an instance of the floating-point spline structure.
60 * @param[in] coeffs coefficients array for b, c, and d
76 - Natural spline ( S1''(x1) = 0 ; Sn''(xn) = 0 ) in arm_spline_init_f32()
77 - Parabolic runout spline ( S1''(x1) = S2''(x2) ; Sn-1''(xn-1) = Sn''(xn) ) */ in arm_spline_init_f32()
79 /* (n-1)-long buffers for b, c, and d coefficients */ in arm_spline_init_f32()
81 float32_t * c = coeffs+(n-1); in arm_spline_init_f32()
82 float32_t * d = coeffs+(2*(n-1)); in arm_spline_init_f32() local
84 float32_t * u = tempBuffer; /* (n-1)-long scratch buffer for u elements */ in arm_spline_init_f32()
85 float32_t * z = tempBuffer+(n-1); /* n-long scratch buffer for z elements */ in arm_spline_init_f32()
87 float32_t hi, hm1; /* h(i) and h(i-1) */ in arm_spline_init_f32()
88 float32_t Bi; /* B(i), i-th element of matrix B=LZ */ in arm_spline_init_f32()
89 float32_t li; /* l(i), i-th element of matrix L */ in arm_spline_init_f32()
94 S->x = x; in arm_spline_init_f32()
95 S->y = y; in arm_spline_init_f32()
96 S->n_x = n; in arm_spline_init_f32()
100 /* -- Row 1 -- */ in arm_spline_init_f32()
106 u[0] = -1; /* a(1,2) = -1 */ in arm_spline_init_f32()
110 /* -- Rows 2 to N-1 (N=n+1) -- */ in arm_spline_init_f32()
111 hm1 = x[1] - x[0]; /* Initialize h(i-1) = h(1) = x(2)-x(1) */ in arm_spline_init_f32()
113 for (i=1; i<(int32_t)n-1; i++) in arm_spline_init_f32()
116 hi = x[i+1]-x[i]; in arm_spline_init_f32()
117 Bi = 3*(y[i+1]-y[i])/hi - 3*(y[i]-y[i-1])/hm1; in arm_spline_init_f32()
119 /* l(i) = a(i)-a(i,i-1)*u(i-1) = 2[h(i-1)+h(i)]-h(i-1)*u(i-1) */ in arm_spline_init_f32()
120 li = 2*(hi+hm1) - hm1*u[i-1]; in arm_spline_init_f32()
125 /* z(i) = [B(i)-h(i-1)*z(i-1)]/l(i) */ in arm_spline_init_f32()
126 z[i] = (Bi-hm1*z[i-1])/li; in arm_spline_init_f32()
128 /* Update h(i-1) for next iteration */ in arm_spline_init_f32()
132 /* -- Row N -- */ in arm_spline_init_f32()
133 /* l(N) = a(N,N)-a(N,N-1)u(N-1) */ in arm_spline_init_f32()
134 /* z(N) = [-a(N,N-1)z(N-1)]/l(N) */ in arm_spline_init_f32()
137 /* li = 1; a(N,N) = 1; a(N,N-1) = 0 */ in arm_spline_init_f32()
138 z[n-1] = 0; /* a(N,N-1) = 0 */ in arm_spline_init_f32()
142 li = 1+u[n-2]; /* a(N,N) = 1; a(N,N-1) = -1 */ in arm_spline_init_f32()
143 z[n-1] = z[n-2]/li; /* a(N,N-1) = -1 */ in arm_spline_init_f32()
147 /* compute b(i) and d(i) from c(i) == */ in arm_spline_init_f32()
149 cp1 = z[n-1]; /* Initialize c(i+1) = c(N) = z(N) */ in arm_spline_init_f32()
151 for (i=n-2; i>=0; i--) in arm_spline_init_f32()
153 /* c(i) = z(i)-u(i+1)c(i+1) */ in arm_spline_init_f32()
154 c[i] = z[i]-u[i]*cp1; in arm_spline_init_f32()
156 hi = x[i+1]-x[i]; in arm_spline_init_f32()
157 /* b(i) = [y(i+1)-y(i)]/h(i)-h(i)*[c(i+1)+2*c(i)]/3 */ in arm_spline_init_f32()
158 b[i] = (y[i+1]-y[i])/hi-hi*(cp1+2*c[i])/3; in arm_spline_init_f32()
160 /* d(i) = [c(i+1)-c(i)]/[3*h(i)] */ in arm_spline_init_f32()
161 d[i] = (cp1-c[i])/(3*hi); in arm_spline_init_f32()
169 S->coeffs = coeffs; in arm_spline_init_f32()