本文整理汇总了C#中ratint类的典型用法代码示例。如果您正苦于以下问题:C# ratint类的具体用法?C# ratint怎么用?C# ratint使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ratint类属于命名空间,在下文中一共展示了ratint类的16个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: barycentricinterpolant
public barycentricinterpolant(ratint.barycentricinterpolant obj)
{
_innerobj = obj;
}
开发者ID:KBrus,项目名称:nton-rbm,代码行数:4,代码来源:interpolation.cs
示例2: O
/*************************************************************************
Conversion from barycentric representation to Chebyshev basis.
This function has O(N^2) complexity.
INPUT PARAMETERS:
P - polynomial in barycentric form
A,B - base interval for Chebyshev polynomials (see below)
A<>B
OUTPUT PARAMETERS
T - coefficients of Chebyshev representation;
P(x) = sum { T[i]*Ti(2*(x-A)/(B-A)-1), i=0..N-1 },
where Ti - I-th Chebyshev polynomial.
NOTES:
barycentric interpolant passed as P may be either polynomial obtained
from polynomial interpolation/ fitting or rational function which is
NOT polynomial. We can't distinguish between these two cases, and this
algorithm just tries to work assuming that P IS a polynomial. If not,
algorithm will return results, but they won't have any meaning.
-- ALGLIB --
Copyright 30.09.2010 by Bochkanov Sergey
*************************************************************************/
public static void polynomialbar2cheb(ratint.barycentricinterpolant p,
double a,
double b,
ref double[] t)
{
int i = 0;
int k = 0;
double[] vp = new double[0];
double[] vx = new double[0];
double[] tk = new double[0];
double[] tk1 = new double[0];
double v = 0;
int i_ = 0;
t = new double[0];
alglib.ap.assert(math.isfinite(a), "PolynomialBar2Cheb: A is not finite!");
alglib.ap.assert(math.isfinite(b), "PolynomialBar2Cheb: B is not finite!");
alglib.ap.assert((double)(a)!=(double)(b), "PolynomialBar2Cheb: A=B!");
alglib.ap.assert(p.n>0, "PolynomialBar2Cheb: P is not correctly initialized barycentric interpolant!");
//
// Calculate function values on a Chebyshev grid
//
vp = new double[p.n];
vx = new double[p.n];
for(i=0; i<=p.n-1; i++)
{
vx[i] = Math.Cos(Math.PI*(i+0.5)/p.n);
vp[i] = ratint.barycentriccalc(p, 0.5*(vx[i]+1)*(b-a)+a);
}
//
// T[0]
//
t = new double[p.n];
v = 0;
for(i=0; i<=p.n-1; i++)
{
v = v+vp[i];
}
t[0] = v/p.n;
//
// other T's.
//
// NOTES:
// 1. TK stores T{k} on VX, TK1 stores T{k-1} on VX
// 2. we can do same calculations with fast DCT, but it
// * adds dependencies
// * still leaves us with O(N^2) algorithm because
// preparation of function values is O(N^2) process
//
if( p.n>1 )
{
tk = new double[p.n];
tk1 = new double[p.n];
for(i=0; i<=p.n-1; i++)
{
tk[i] = vx[i];
tk1[i] = 1;
}
for(k=1; k<=p.n-1; k++)
{
//
// calculate discrete product of function vector and TK
//
v = 0.0;
for(i_=0; i_<=p.n-1;i_++)
{
v += tk[i_]*vp[i_];
}
t[k] = v/(0.5*p.n);
//
//.........这里部分代码省略.........
开发者ID:KBrus,项目名称:nton-rbm,代码行数:101,代码来源:interpolation.cs
示例3: tasks
/*************************************************************************
Weighted fitting by Chebyshev polynomial in barycentric form, with
constraints on function values or first derivatives.
Small regularizing term is used when solving constrained tasks (to improve
stability).
Task is linear, so linear least squares solver is used. Complexity of this
computational scheme is O(N*M^2), mostly dominated by least squares solver
SEE ALSO:
PolynomialFit()
INPUT PARAMETERS:
X - points, array[0..N-1].
Y - function values, array[0..N-1].
W - weights, array[0..N-1]
Each summand in square sum of approximation deviations from
given values is multiplied by the square of corresponding
weight. Fill it by 1's if you don't want to solve weighted
task.
N - number of points, N>0.
XC - points where polynomial values/derivatives are constrained,
array[0..K-1].
YC - values of constraints, array[0..K-1]
DC - array[0..K-1], types of constraints:
* DC[i]=0 means that P(XC[i])=YC[i]
* DC[i]=1 means that P'(XC[i])=YC[i]
SEE BELOW FOR IMPORTANT INFORMATION ON CONSTRAINTS
K - number of constraints, 0<=K<M.
K=0 means no constraints (XC/YC/DC are not used in such cases)
M - number of basis functions (= polynomial_degree + 1), M>=1
OUTPUT PARAMETERS:
Info- same format as in LSFitLinearW() subroutine:
* Info>0 task is solved
* Info<=0 an error occured:
-4 means inconvergence of internal SVD
-3 means inconsistent constraints
P - interpolant in barycentric form.
Rep - report, same format as in LSFitLinearW() subroutine.
Following fields are set:
* RMSError rms error on the (X,Y).
* AvgError average error on the (X,Y).
* AvgRelError average relative error on the non-zero Y
* MaxError maximum error
NON-WEIGHTED ERRORS ARE CALCULATED
IMPORTANT:
this subroitine doesn't calculate task's condition number for K<>0.
SETTING CONSTRAINTS - DANGERS AND OPPORTUNITIES:
Setting constraints can lead to undesired results, like ill-conditioned
behavior, or inconsistency being detected. From the other side, it allows
us to improve quality of the fit. Here we summarize our experience with
constrained regression splines:
* even simple constraints can be inconsistent, see Wikipedia article on
this subject: http://en.wikipedia.org/wiki/Birkhoff_interpolation
* the greater is M (given fixed constraints), the more chances that
constraints will be consistent
* in the general case, consistency of constraints is NOT GUARANTEED.
* in the one special cases, however, we can guarantee consistency. This
case is: M>1 and constraints on the function values (NOT DERIVATIVES)
Our final recommendation is to use constraints WHEN AND ONLY when you
can't solve your task without them. Anything beyond special cases given
above is not guaranteed and may result in inconsistency.
-- ALGLIB PROJECT --
Copyright 10.12.2009 by Bochkanov Sergey
*************************************************************************/
public static void polynomialfitwc(double[] x,
double[] y,
double[] w,
int n,
double[] xc,
double[] yc,
int[] dc,
int k,
int m,
ref int info,
ratint.barycentricinterpolant p,
polynomialfitreport rep)
{
double xa = 0;
double xb = 0;
double sa = 0;
double sb = 0;
double[] xoriginal = new double[0];
double[] yoriginal = new double[0];
double[] y2 = new double[0];
double[] w2 = new double[0];
double[] tmp = new double[0];
double[] tmp2 = new double[0];
double[] tmpdiff = new double[0];
double[] bx = new double[0];
double[] by = new double[0];
double[] bw = new double[0];
double[,] fmatrix = new double[0,0];
//.........这里部分代码省略.........
开发者ID:palefacer,项目名称:TelescopeOrientation,代码行数:101,代码来源:interpolation.cs
示例4: barycentricfitwcfixedd
/*************************************************************************
Internal Floater-Hormann fitting subroutine for fixed D
*************************************************************************/
private static void barycentricfitwcfixedd(double[] x,
double[] y,
double[] w,
int n,
double[] xc,
double[] yc,
int[] dc,
int k,
int m,
int d,
ref int info,
ratint.barycentricinterpolant b,
barycentricfitreport rep)
{
double[,] fmatrix = new double[0,0];
double[,] cmatrix = new double[0,0];
double[] y2 = new double[0];
double[] w2 = new double[0];
double[] sx = new double[0];
double[] sy = new double[0];
double[] sbf = new double[0];
double[] xoriginal = new double[0];
double[] yoriginal = new double[0];
double[] tmp = new double[0];
lsfitreport lrep = new lsfitreport();
double v0 = 0;
double v1 = 0;
double mx = 0;
ratint.barycentricinterpolant b2 = new ratint.barycentricinterpolant();
int i = 0;
int j = 0;
int relcnt = 0;
double xa = 0;
double xb = 0;
double sa = 0;
double sb = 0;
double decay = 0;
int i_ = 0;
x = (double[])x.Clone();
y = (double[])y.Clone();
w = (double[])w.Clone();
xc = (double[])xc.Clone();
yc = (double[])yc.Clone();
info = 0;
if( ((n<1 || m<2) || k<0) || k>=m )
{
info = -1;
return;
}
for(i=0; i<=k-1; i++)
{
info = 0;
if( dc[i]<0 )
{
info = -1;
}
if( dc[i]>1 )
{
info = -1;
}
if( info<0 )
{
return;
}
}
//
// weight decay for correct handling of task which becomes
// degenerate after constraints are applied
//
decay = 10000*math.machineepsilon;
//
// Scale X, Y, XC, YC
//
lsfitscalexy(ref x, ref y, ref w, n, ref xc, ref yc, dc, k, ref xa, ref xb, ref sa, ref sb, ref xoriginal, ref yoriginal);
//
// allocate space, initialize:
// * FMatrix- values of basis functions at X[]
// * CMatrix- values (derivatives) of basis functions at XC[]
//
y2 = new double[n+m];
w2 = new double[n+m];
fmatrix = new double[n+m, m];
if( k>0 )
{
cmatrix = new double[k, m+1];
}
y2 = new double[n+m];
w2 = new double[n+m];
//
// Prepare design and constraints matrices:
// * fill constraints matrix
//.........这里部分代码省略.........
开发者ID:KBrus,项目名称:nton-rbm,代码行数:101,代码来源:interpolation.cs
示例5: grid
/*************************************************************************
Lagrange intepolant on Chebyshev grid (second kind).
This function has O(N) complexity.
INPUT PARAMETERS:
A - left boundary of [A,B]
B - right boundary of [A,B]
Y - function values at the nodes, array[0..N-1],
Y[I] = Y(0.5*(B+A) + 0.5*(B-A)*Cos(PI*i/(n-1)))
N - number of points, N>=1
for N=1 a constant model is constructed.
OUTPUT PARAMETERS
P - barycentric model which represents Lagrange interpolant
(see ratint unit info and BarycentricCalc() description for
more information).
-- ALGLIB --
Copyright 03.12.2009 by Bochkanov Sergey
*************************************************************************/
public static void polynomialbuildcheb2(double a,
double b,
double[] y,
int n,
ratint.barycentricinterpolant p)
{
int i = 0;
double[] w = new double[0];
double[] x = new double[0];
double v = 0;
alglib.ap.assert(n>0, "PolynomialBuildCheb2: N<=0!");
alglib.ap.assert(alglib.ap.len(y)>=n, "PolynomialBuildCheb2: Length(Y)<N!");
alglib.ap.assert(math.isfinite(a), "PolynomialBuildCheb2: A is infinite or NaN!");
alglib.ap.assert(math.isfinite(b), "PolynomialBuildCheb2: B is infinite or NaN!");
alglib.ap.assert((double)(b)!=(double)(a), "PolynomialBuildCheb2: B=A!");
alglib.ap.assert(apserv.isfinitevector(y, n), "PolynomialBuildCheb2: Y contains infinite or NaN values!");
//
// Special case: N=1
//
if( n==1 )
{
x = new double[1];
w = new double[1];
x[0] = 0.5*(b+a);
w[0] = 1;
ratint.barycentricbuildxyw(x, y, w, 1, p);
return;
}
//
// general case
//
x = new double[n];
w = new double[n];
v = 1;
for(i=0; i<=n-1; i++)
{
if( i==0 || i==n-1 )
{
w[i] = v*0.5;
}
else
{
w[i] = v;
}
x[i] = 0.5*(b+a)+0.5*(b-a)*Math.Cos(Math.PI*i/(n-1));
v = -v;
}
ratint.barycentricbuildxyw(x, y, w, n, p);
}
开发者ID:KBrus,项目名称:nton-rbm,代码行数:72,代码来源:interpolation.cs
示例6: PolynomialFitWC
/*************************************************************************
Fitting by polynomials in barycentric form. This function provides simple
unterface for unconstrained unweighted fitting. See PolynomialFitWC() if
you need constrained fitting.
Task is linear, so linear least squares solver is used. Complexity of this
computational scheme is O(N*M^2), mostly dominated by least squares solver
SEE ALSO:
PolynomialFitWC()
INPUT PARAMETERS:
X - points, array[0..N-1].
Y - function values, array[0..N-1].
N - number of points, N>0
* if given, only leading N elements of X/Y are used
* if not given, automatically determined from sizes of X/Y
M - number of basis functions (= polynomial_degree + 1), M>=1
OUTPUT PARAMETERS:
Info- same format as in LSFitLinearW() subroutine:
* Info>0 task is solved
* Info<=0 an error occured:
-4 means inconvergence of internal SVD
P - interpolant in barycentric form.
Rep - report, same format as in LSFitLinearW() subroutine.
Following fields are set:
* RMSError rms error on the (X,Y).
* AvgError average error on the (X,Y).
* AvgRelError average relative error on the non-zero Y
* MaxError maximum error
NON-WEIGHTED ERRORS ARE CALCULATED
NOTES:
you can convert P from barycentric form to the power or Chebyshev
basis with PolynomialBar2Pow() or PolynomialBar2Cheb() functions from
POLINT subpackage.
-- ALGLIB PROJECT --
Copyright 10.12.2009 by Bochkanov Sergey
*************************************************************************/
public static void polynomialfit(double[] x,
double[] y,
int n,
int m,
ref int info,
ratint.barycentricinterpolant p,
polynomialfitreport rep)
{
int i = 0;
double[] w = new double[0];
double[] xc = new double[0];
double[] yc = new double[0];
int[] dc = new int[0];
info = 0;
alglib.ap.assert(n>0, "PolynomialFit: N<=0!");
alglib.ap.assert(m>0, "PolynomialFit: M<=0!");
alglib.ap.assert(alglib.ap.len(x)>=n, "PolynomialFit: Length(X)<N!");
alglib.ap.assert(alglib.ap.len(y)>=n, "PolynomialFit: Length(Y)<N!");
alglib.ap.assert(apserv.isfinitevector(x, n), "PolynomialFit: X contains infinite or NaN values!");
alglib.ap.assert(apserv.isfinitevector(y, n), "PolynomialFit: Y contains infinite or NaN values!");
w = new double[n];
for(i=0; i<=n-1; i++)
{
w[i] = 1;
}
polynomialfitwc(x, y, w, n, xc, yc, dc, 0, m, ref info, p, rep);
}
开发者ID:KBrus,项目名称:nton-rbm,代码行数:70,代码来源:interpolation.cs
示例7: _pexec_barycentricfitfloaterhormann
/*************************************************************************
Single-threaded stub. HPC ALGLIB replaces it by multithreaded code.
*************************************************************************/
public static void _pexec_barycentricfitfloaterhormann(double[] x,
double[] y,
int n,
int m,
ref int info,
ratint.barycentricinterpolant b,
barycentricfitreport rep)
{
barycentricfitfloaterhormann(x,y,n,m,ref info,b,rep);
}
开发者ID:Kerbas-ad-astra,项目名称:MechJeb2,代码行数:13,代码来源:interpolation.cs
示例8: O
/*************************************************************************
Conversion from barycentric representation to power basis.
This function has O(N^2) complexity.
INPUT PARAMETERS:
P - polynomial in barycentric form
C - offset (see below); 0.0 is used as default value.
S - scale (see below); 1.0 is used as default value. S<>0.
OUTPUT PARAMETERS
A - coefficients, P(x) = sum { A[i]*((X-C)/S)^i, i=0..N-1 }
N - number of coefficients (polynomial degree plus 1)
NOTES:
1. this function accepts offset and scale, which can be set to improve
numerical properties of polynomial. For example, if P was obtained as
result of interpolation on [-1,+1], you can set C=0 and S=1 and
represent P as sum of 1, x, x^2, x^3 and so on. In most cases you it
is exactly what you need.
However, if your interpolation model was built on [999,1001], you will
see significant growth of numerical errors when using {1, x, x^2, x^3}
as basis. Representing P as sum of 1, (x-1000), (x-1000)^2, (x-1000)^3
will be better option. Such representation can be obtained by using
1000.0 as offset C and 1.0 as scale S.
2. power basis is ill-conditioned and tricks described above can't solve
this problem completely. This function will return coefficients in
any case, but for N>8 they will become unreliable. However, N's
less than 5 are pretty safe.
3. barycentric interpolant passed as P may be either polynomial obtained
from polynomial interpolation/ fitting or rational function which is
NOT polynomial. We can't distinguish between these two cases, and this
algorithm just tries to work assuming that P IS a polynomial. If not,
algorithm will return results, but they won't have any meaning.
-- ALGLIB --
Copyright 30.09.2010 by Bochkanov Sergey
*************************************************************************/
public static void polynomialbar2pow(ratint.barycentricinterpolant p,
double c,
double s,
ref double[] a)
{
int i = 0;
int k = 0;
double e = 0;
double d = 0;
double[] vp = new double[0];
double[] vx = new double[0];
double[] tk = new double[0];
double[] tk1 = new double[0];
double[] t = new double[0];
double v = 0;
double c0 = 0;
double s0 = 0;
double va = 0;
double vb = 0;
double[] vai = new double[0];
double[] vbi = new double[0];
double minx = 0;
double maxx = 0;
int i_ = 0;
a = new double[0];
//
// We have barycentric model built using set of points X[], and we
// want to convert it to power basis centered about point C with
// scale S: I-th basis function is ((X-C)/S)^i.
//
// We use following three-stage algorithm:
//
// 1. we build Chebyshev representation of polynomial using
// intermediate center C0 and scale S0, which are derived from X[]:
// C0 = 0.5*(min(X)+max(X)), S0 = 0.5*(max(X)-min(X)). Chebyshev
// representation is built by sampling points around center C0,
// with typical distance between them proportional to S0.
// 2. then we transform form Chebyshev basis to intermediate power
// basis, using same center/scale C0/S0.
// 3. after that, we apply linear transformation to intermediate
// power basis which moves it to final center/scale C/S.
//
// The idea of such multi-stage algorithm is that it is much easier to
// transform barycentric model to Chebyshev basis, and only later to
// power basis, than transforming it directly to power basis. It is
// also more numerically stable to sample points using intermediate C0/S0,
// which are derived from user-supplied model, than using "final" C/S,
// which may be unsuitable for sampling (say, if S=1, we may have stability
// problems when working with models built from dataset with non-unit
// scale of abscissas).
//
alglib.ap.assert(math.isfinite(c), "PolynomialBar2Pow: C is not finite!");
alglib.ap.assert(math.isfinite(s), "PolynomialBar2Pow: S is not finite!");
alglib.ap.assert((double)(s)!=(double)(0), "PolynomialBar2Pow: S=0!");
alglib.ap.assert(p.n>0, "PolynomialBar2Pow: P is not correctly initialized barycentric interpolant!");
//
//.........这里部分代码省略.........
开发者ID:Kerbas-ad-astra,项目名称:MechJeb2,代码行数:101,代码来源:interpolation.cs
示例9: _pexec_barycentricfitfloaterhormannwc
/*************************************************************************
Single-threaded stub. HPC ALGLIB replaces it by multithreaded code.
*************************************************************************/
public static void _pexec_barycentricfitfloaterhormannwc(double[] x,
double[] y,
double[] w,
int n,
double[] xc,
double[] yc,
int[] dc,
int k,
int m,
ref int info,
ratint.barycentricinterpolant b,
barycentricfitreport rep)
{
barycentricfitfloaterhormannwc(x,y,w,n,xc,yc,dc,k,m,ref info,b,rep);
}
开发者ID:Kerbas-ad-astra,项目名称:MechJeb2,代码行数:18,代码来源:interpolation.cs
示例10: _pexec_polynomialfitwc
/*************************************************************************
Single-threaded stub. HPC ALGLIB replaces it by multithreaded code.
*************************************************************************/
public static void _pexec_polynomialfitwc(double[] x,
double[] y,
double[] w,
int n,
double[] xc,
double[] yc,
int[] dc,
int k,
int m,
ref int info,
ratint.barycentricinterpolant p,
polynomialfitreport rep)
{
polynomialfitwc(x,y,w,n,xc,yc,dc,k,m,ref info,p,rep);
}
开发者ID:Kerbas-ad-astra,项目名称:MechJeb2,代码行数:18,代码来源:interpolation.cs
示例11: _pexec_polynomialfit
/*************************************************************************
Single-threaded stub. HPC ALGLIB replaces it by multithreaded code.
*************************************************************************/
public static void _pexec_polynomialfit(double[] x,
double[] y,
int n,
int m,
ref int info,
ratint.barycentricinterpolant p,
polynomialfitreport rep)
{
polynomialfit(x,y,n,m,ref info,p,rep);
}
开发者ID:Kerbas-ad-astra,项目名称:MechJeb2,代码行数:13,代码来源:interpolation.cs
示例12: tasks
/*************************************************************************
Weighted fitting by polynomials in barycentric form, with constraints on
function values or first derivatives.
Small regularizing term is used when solving constrained tasks (to improve
stability).
Task is linear, so linear least squares solver is used. Complexity of this
computational scheme is O(N*M^2), mostly dominated by least squares solver
SEE ALSO:
PolynomialFit()
INPUT PARAMETERS:
X - points, array[0..N-1].
Y - function values, array[0..N-1].
W - weights, array[0..N-1]
Each summand in square sum of approximation deviations from
given values is multiplied by the square of corresponding
weight. Fill it by 1's if you don't want to solve weighted
task.
N - number of points, N>0.
* if given, only leading N elements of X/Y/W are used
* if not given, automatically determined from sizes of X/Y/W
XC - points where polynomial values/derivatives are constrained,
array[0..K-1].
YC - values of constraints, array[0..K-1]
DC - array[0..K-1], types of constraints:
* DC[i]=0 means that P(XC[i])=YC[i]
* DC[i]=1 means that P'(XC[i])=YC[i]
SEE BELOW FOR IMPORTANT INFORMATION ON CONSTRAINTS
K - number of constraints, 0<=K<M.
K=0 means no constraints (XC/YC/DC are not used in such cases)
M - number of basis functions (= polynomial_degree + 1), M>=1
OUTPUT PARAMETERS:
Info- same format as in LSFitLinearW() subroutine:
* Info>0 task is solved
* Info<=0 an error occured:
-4 means inconvergence of internal SVD
-3 means inconsistent constraints
P - interpolant in barycentric form.
Rep - report, same format as in LSFitLinearW() subroutine.
Following fields are set:
* RMSError rms error on the (X,Y).
* AvgError average error on the (X,Y).
* AvgRelError average relative error on the non-zero Y
* MaxError maximum error
NON-WEIGHTED ERRORS ARE CALCULATED
IMPORTANT:
this subroitine doesn't calculate task's condition number for K<>0.
NOTES:
you can convert P from barycentric form to the power or Chebyshev
basis with PolynomialBar2Pow() or PolynomialBar2Cheb() functions from
POLINT subpackage.
SETTING CONSTRAINTS - DANGERS AND OPPORTUNITIES:
Setting constraints can lead to undesired results, like ill-conditioned
behavior, or inconsistency being detected. From the other side, it allows
us to improve quality of the fit. Here we summarize our experience with
constrained regression splines:
* even simple constraints can be inconsistent, see Wikipedia article on
this subject: http://en.wikipedia.org/wiki/Birkhoff_interpolation
* the greater is M (given fixed constraints), the more chances that
constraints will be consistent
* in the general case, consistency of constraints is NOT GUARANTEED.
* in the one special cases, however, we can guarantee consistency. This
case is: M>1 and constraints on the function values (NOT DERIVATIVES)
Our final recommendation is to use constraints WHEN AND ONLY when you
can't solve your task without them. Anything beyond special cases given
above is not guaranteed and may result in inconsistency.
-- ALGLIB PROJECT --
Copyright 10.12.2009 by Bochkanov Sergey
*************************************************************************/
public static void polynomialfitwc(double[] x,
double[] y,
double[] w,
int n,
double[] xc,
double[] yc,
int[] dc,
int k,
int m,
ref int info,
ratint.barycentricinterpolant p,
polynomialfitreport rep)
{
double xa = 0;
double xb = 0;
double sa = 0;
double sb = 0;
double[] xoriginal = new double[0];
double[] yoriginal = new double[0];
double[] y2 = new double[0];
double[] w2 = new double[0];
//.........这里部分代码省略.........
开发者ID:KBrus,项目名称:nton-rbm,代码行数:101,代码来源:interpolation.cs
示例13: D
/*************************************************************************
Weghted rational least squares fitting using Floater-Hormann rational
functions with optimal D chosen from [0,9], with constraints and
individual weights.
Equidistant grid with M node on [min(x),max(x)] is used to build basis
functions. Different values of D are tried, optimal D (least WEIGHTED root
mean square error) is chosen. Task is linear, so linear least squares
solver is used. Complexity of this computational scheme is O(N*M^2)
(mostly dominated by the least squares solver).
SEE ALSO
* BarycentricFitFloaterHormann(), "lightweight" fitting without invididual
weights and constraints.
INPUT PARAMETERS:
X - points, array[0..N-1].
Y - function values, array[0..N-1].
W - weights, array[0..N-1]
Each summand in square sum of approximation deviations from
given values is multiplied by the square of corresponding
weight. Fill it by 1's if you don't want to solve weighted
task.
N - number of points, N>0.
XC - points where function values/derivatives are constrained,
array[0..K-1].
YC - values of constraints, array[0..K-1]
DC - array[0..K-1], types of constraints:
* DC[i]=0 means that S(XC[i])=YC[i]
* DC[i]=1 means that S'(XC[i])=YC[i]
SEE BELOW FOR IMPORTANT INFORMATION ON CONSTRAINTS
K - number of constraints, 0<=K<M.
K=0 means no constraints (XC/YC/DC are not used in such cases)
M - number of basis functions ( = number_of_nodes), M>=2.
OUTPUT PARAMETERS:
Info- same format as in LSFitLinearWC() subroutine.
* Info>0 task is solved
* Info<=0 an error occured:
-4 means inconvergence of internal SVD
-3 means inconsistent constraints
-1 means another errors in parameters passed
(N<=0, for example)
B - barycentric interpolant.
Rep - report, same format as in LSFitLinearWC() subroutine.
Following fields are set:
* DBest best value of the D parameter
* RMSError rms error on the (X,Y).
* AvgError average error on the (X,Y).
* AvgRelError average relative error on the non-zero Y
* MaxError maximum error
NON-WEIGHTED ERRORS ARE CALCULATED
IMPORTANT:
this subroutine doesn't calculate task's condition number for K<>0.
SETTING CONSTRAINTS - DANGERS AND OPPORTUNITIES:
Setting constraints can lead to undesired results, like ill-conditioned
behavior, or inconsistency being detected. From the other side, it allows
us to improve quality of the fit. Here we summarize our experience with
constrained barycentric interpolants:
* excessive constraints can be inconsistent. Floater-Hormann basis
functions aren't as flexible as splines (although they are very smooth).
* the more evenly constraints are spread across [min(x),max(x)], the more
chances that they will be consistent
* the greater is M (given fixed constraints), the more chances that
constraints will be consistent
* in the general case, consistency of constraints IS NOT GUARANTEED.
* in the several special cases, however, we CAN guarantee consistency.
* one of this cases is constraints on the function VALUES at the interval
boundaries. Note that consustency of the constraints on the function
DERIVATIVES is NOT guaranteed (you can use in such cases cubic splines
which are more flexible).
* another special case is ONE constraint on the function value (OR, but
not AND, derivative) anywhere in the interval
Our final recommendation is to use constraints WHEN AND ONLY WHEN you
can't solve your task without them. Anything beyond special cases given
above is not guaranteed and may result in inconsistency.
-- ALGLIB PROJECT --
Copyright 18.08.2009 by Bochkanov Sergey
*************************************************************************/
public static void barycentricfitfloaterhormannwc(double[] x,
double[] y,
double[] w,
int n,
double[] xc,
double[] yc,
int[] dc,
int k,
int m,
ref int info,
ratint.barycentricinterpolant b,
barycentricfitreport rep)
{
int d = 0;
int i = 0;
double wrmscur = 0;
//.........这里部分代码省略.........
开发者ID:KBrus,项目名称:nton-rbm,代码行数:101,代码来源:interpolation.cs
示例14: barycentriccalcbasis
/*************************************************************************
Internal subroutine, calculates barycentric basis functions.
Used for efficient simultaneous calculation of N basis functions.
-- ALGLIB --
Copyright 17.08.2009 by Bochkanov Sergey
*************************************************************************/
private static void barycentriccalcbasis(ratint.barycentricinterpolant b,
double t,
ref double[] y)
{
double s2 = 0;
double s = 0;
double v = 0;
int i = 0;
int j = 0;
int i_ = 0;
//
// special case: N=1
//
if( b.n==1 )
{
y[0] = 1;
return;
}
//
// Here we assume that task is normalized, i.e.:
// 1. abs(Y[i])<=1
// 2. abs(W[i])<=1
// 3. X[] is ordered
//
// First, we decide: should we use "safe" formula (guarded
// against overflow) or fast one?
//
s = Math.Abs(t-b.x[0]);
for(i=0; i<=b.n-1; i++)
{
v = b.x[i];
if( (double)(v)==(double)(t) )
{
for(j=0; j<=b.n-1; j++)
{
y[j] = 0;
}
y[i] = 1;
return;
}
v = Math.Abs(t-v);
if( (double)(v)<(double)(s) )
{
s = v;
}
}
s2 = 0;
for(i=0; i<=b.n-1; i++)
{
v = s/(t-b.x[i]);
v = v*b.w[i];
y[i] = v;
s2 = s2+v;
}
v = 1/s2;
for(i_=0; i_<=b.n-1;i_++)
{
y[i_] = v*y[i_];
}
}
开发者ID:KBrus,项目名称:nton-rbm,代码行数:70,代码来源:interpolation.cs
示例15: brcunset
private static void brcunset(ratint.barycentricinterpolant b)
{
double[] x = new double[0];
double[] y = new double[0];
double[] w = new double[0];
x = new double[1];
y = new double[1];
w = new double[1];
x[0] = 0;
y[0] = 0;
w[0] = 1;
ratint.barycentricbuildxyw(x, y, w, 1, b);
}
开发者ID:dmX-Inc,项目名称:Clustering-Search-Results,代码行数:14,代码来源:test_c.cs
示例16: barycentricfitreport
public barycentricfitreport(ratint.barycentricfitreport obj)
{
_innerobj = obj;
}
开发者ID:palefacer,项目名称:TelescopeOrientation,代码行数:4,代码来源:interpolation.cs
注:本文中的ratint类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论