Discrete
Approximates a discrete function using least squares polynomial fitting.
Controller: CodeCogs 
Dependents

Interface
C++
Class Discrete
This class approximates an arbitrary discrete function using polynomial least squares fitting. The algorithm finds the coefficientsMISSING IMAGE!
1/discrete3.png cannot be found in /users/1/discrete3.png. Please contact the submission author.
References:
Example 1
- The following example displays 10 approximated values (you may change this amount through
the N_out variable) for the function
with abscissas equally spaced in the
interval. The X and Y coordinate arrays are initialized by evaluating this function for N = 20 points equally spaced in the domain from
to
.
#include <codecogs/maths/approximation/regression/discrete.h> #include <cmath> #include <stdio.h> using namespace std; #define PI 3.1415926535897932384626433832795 #define N 30 int main() { // Delvare two arrays to hold the coordinates of initial data points double x[N], y[N]; // Generate the points double xx = PI/2; double step = 2 * PI / (N - 1); for (int i = 0; i < N; ++i, xx += step) { double x2=xx+sin(xx); // vary x spacing x[i] = x2; y[i] = sin(x2)/x2; } // Initialize the regression approximation routine with known data points Maths::Regression::Discrete A(N, x, y, 3); Maths::Regression::Discrete B(N, x, y, 5); Maths::Regression::Discrete C(N, x, y, 10); // Interrogate the regression function to find approximated values int N_out =50; xx = PI/2 ; step = 2 * PI / (N_out - 1); printf("\nx, exact, discrete_3, discrete_5, discrete_10"); for (int i = 0; i < N_out; ++i, xx += step) { double x2=xx+sin(xx); printf("\n%.4lf, %.6lf, %.6lf, %.6lf, %.6lf", x2, sin(x2)/x2, A.getValue(x2), B.getValue(x2), C.getValue(x2)); } return 0; }
Output (first 10 numbers):x, exact, discrete_3, discrete_5, discrete_10 2.5708, 0.210169, 0.235747, 0.210570, 0.210190 2.6908, 0.161909, 0.175569, 0.162336, 0.161899 2.7945, 0.121709, 0.127760, 0.122034, 0.121692 2.8824, 0.088920, 0.090229, 0.089115, 0.088905 2.9550, 0.062769, 0.061196, 0.062848, 0.062759 3.0134, 0.042441, 0.039160, 0.042431, 0.042435 3.0585, 0.027131, 0.022864, 0.027058, 0.027128 3.0919, 0.016071, 0.011248, 0.015955, 0.016070 3.1150, 0.008531, 0.003406, 0.008388, 0.008532 3.1296, 0.003821, -0.001463, 0.003663, 0.003822
Authors
- Lucian Bentea (August 2005)
Will Bateman (Mar 2006)
Source Code
Source code is available when you buy a Commercial licence.
Not a member, then Register with CodeCogs. Already a Member, then Login.
Members of Discrete
Discrete
Initializes the necessary data for following evaluations of the polynomial.Discrete( int n double* x double* y int degree )[constructor] n Total number of data points to analyse. x An array [0 to n-1] with x-coordinates of points. y An array [0 to n-1] with y-coordinates of points. degree The number of coefficient to be used in the polynomial fitting.
~Discrete
Detailed Description...~Discrete( ) GetValue
Returns the approximated ordinate at the given abscissa.doublegetValue( double x ) x The abscissa of the approximation point
GetCoefficent
Returns individual coefficient from the computed polynomial, i.e.doublegetCoefficent( int i ) in the following equation:
Example 2
... Maths::Regression::Discrete A(N, x, y, 7); for(int i=0;i<7;i++) printf("\n coefficient %d is %lf", A.getCoefficient(i)); ...
i The ith coefficient, starting at i=0 to degree.
Discrete Once
doubleDiscrete_once( | int | N | |
double* | x | ||
double* | y | ||
int | degree | ||
double | a | ) |
Example 3
- The following graph is constructed from interpolating the following values:
x = 1 y = 0.22 x = 2 y = 0.04 x = 3 y = -0.13 x = 4 y = -0.17 x = 5 y = -0.04 x = 6 y = 0.09 x = 7 y = 0.11
There is an error with your graph parameters for Discrete_once with options N=7 x="1 2 3 4 5 6 7" y="0.22 0.04 -0.13 -0.17 -0.04 0.09 0.11" a=1:7 degree=5 .inputError Message:Function Discrete_once failed. Ensure that: Invalid C++
Parameters
N The number of initial points x The x-coordinates for the initial points y The y-coordinates for the initial points degree The number of coefficient to be used in the polynomial fitting (the order) a the x-coordinate for the point to be computed
Returns
- the y-coordinate that corresponds to a.
Source Code
Source code is available when you buy a Commercial licence.
Not a member, then Register with CodeCogs. Already a Member, then Login.