File:Mspline order3.svg
Summary
| Description |
English: Plot of M-splines of order 3. |
| Date | |
| Source | Own work |
| Author | Skbkekas |
| SVG development | |
| Source code | Python codefrom __future__ import division
import numpy as np
import matplotlib.pyplot as plt
def mspline(x, k, i, T):
"""Evaluate the kth order m-spline at x.
Arguments:
----------
x : the point at which the spline is evaluated
k : the order of the spline (k>=1)
i : the interval on which the spline is defined (i<len(T)-k)
T : the knots
Returns:
--------
The value of the spline at x
Note: Use mspline_knots(...) to create T.
"""
if x<T[i]: return 0.
if x>=T[i+k]: return 0.
if k==1: return 1/(T[i+1]-T[i])
d1 = x-T[i]
d2 = T[i+k]-x
v = d1*mspline(x, k-1, i, T) + d2*mspline(x, k-1, i+1, T)
v *= k
v /= (k-1)*(T[i+k]-T[i])
return v
def mspline_knots(xmin, xmax, k, m):
"""Create an order list of points in the interval (xmin,xmax)
suitable for use as knots in m-splines and i-splines.
Arguments:
----------
xmin : the lower bound of the interval
xmax : the upper bount of the interval
k : the order of the m-spline for which the knots will be used
m : the number of intervals into which (xmin,xmax) will be partitioned
"""
T = [xmin]*(k-1)
h = (xmax-xmin)/m
T.extend(np.arange(xmin, xmax, h))
T.extend([xmax]*k)
return T
def test_mspline():
plt.clf()
k = 3
T = mspline_knots(0, 1, k, 5)
A = []
for i in range(len(T)-k):
F = []
for x in np.arange(0,1,0.01):
F.append([x,mspline(x, k, i, T)])
F = np.array(F)
a = plt.plot(F[:,0], F[:,1], '-')
A.append(a)
plt.hold(True)
b = plt.legend(A, ("i=1", "i=2", "i=3", "i=4", "i=5", "i=6", "i=7"),\
'upper center')
b.draw_frame(False)
plt.xlabel(r"$x$")
plt.ylabel(r"$M_i(x
|
Licensing
I, the copyright holder of this work, hereby publish it under the following licenses:
| Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License. |
| This file is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported license. | ||
| ||
| This licensing tag was added to this file as part of the GFDL licensing update. |
Copyleft: This work of art is free; you can redistribute it and/or modify it according to terms of the Free Art License. You will find a specimen of this license on the Copyleft Attitude site as well as on other sites. |
You may select the license of your choice.