Skip to content

Instantly share code, notes, and snippets.

@feliwir
Created May 14, 2016 10:04
Show Gist options
  • Save feliwir/7676637c6e348b901189c5e2d7b69573 to your computer and use it in GitHub Desktop.
Save feliwir/7676637c6e348b901189c5e2d7b69573 to your computer and use it in GitHub Desktop.
void computeCubicSplineCoefficients(double** a, double* x, double* y, int n)
{
double** matrix = new double*[n-1];
for (int i=0; i<n-1; i++)
matrix[i] = new double[n-1];
double* sol = new double[n-1];
double* rhs = new double[n-1];
/* Füllen Sie hier die Matrix und die rechte Seite mit den entsprechenden Werten. */
for(int i=0;i<n-1;++i)
{
double h1 = x[i+1]-x[i];
double h2 = x[i+2]-x[i+1];
if(i-1>=0)
matrix[i][i-1]=h1;
matrix[i][i]= 2*(h1+h2);
if(i+1<n-1)
matrix[i][i+1]=h2;
rhs[i] = 3*((y[i+2]-y[i+1])/h2-(y[i+1]-y[i])/h1);
}
// solve
solveByGaussSeidel(sol, matrix, rhs, n-1);
for(int i=1;i<n;++i)
{
a[i][2]=sol[i-1];
}
for(int i=1;i<n;++i)
{
double hi = x[i] - x[i-1];
a[i][0] = y[i];
a[i][1] = ((y[i]-y[i-1])/hi)+hi/3.0*(2*a[i][2]+a[i-1][2]);
a[i][3] = (a[i-1][2]-a[i][2])/(3*hi);
}
/* Berechnen Sie hier die Koeffizienten a unter Verwendung der Lösung des LGS. */
for(int i=0;i<n;++i)
{
std::cout << a[i][3]<<"x^3 + "<< a[i][2]<<"x^2 + "<< a[i][1]<< "x + "<< a[i][0] << std::endl;
}
//STIMMT
// cleanup
for (int i=0; i<n-1; i++)
delete [] matrix[i];
delete [] matrix;
delete [] sol;
delete [] rhs;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment