Всем привет,
мож кто сталкивался... Видел/использовал кто какую-нить опен-сорс библиотеку в которой есть аналоги Matlab-овских ф-й:
*
del2*
gradientнужны преобразования в "реальном времени" для размерности 1-D.
Для дискретного лапласа "надыбал"
эти сорцы.
double *l1pp_apply ( int n, double h, double u[] )
/******************************************************************************/
/*
Purpose:
L1PP_APPLY applies the 1D PP Laplacian to a vector.
Discussion:
The N grid points are assumed to be evenly spaced by H.
For N = 5, the discrete Laplacian with periodic boundary conditions
on [0,6] has the matrix form L:
2 -1 0 0 -1
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
-1 0 0 -1 2
Licensing:
This code is distributed under the GNU LGPL license.
Modified:
30 October 2013
Author:
John Burkardt
Parameters:
Input, int N, the number of points.
N must be at least 3.
Input, double H, the spacing between points.
Input, double U[N], the value at each point.
Output, double L1PP_APPLY[N], the Laplacian evaluated at each point.
*/
{
int i;
double *lu;
if ( n < 3 )
{
fprintf ( stderr, "\n" );
fprintf ( stderr, "L1PP_APPLY - Fatal error!\n" );
fprintf ( stderr, " N < 3.\n" );
exit ( 1 );
}
lu = ( double * ) malloc ( n * sizeof ( double ) );
i = 0;
lu[i] = ( - u[n-1] + 2.0 * u[i] - u[i+1] ) / h / h;
for ( i = 1; i < n - 1; i++ )
{
lu[i] = ( - u[i-1] + 2.0 * u[i] - u[i+1] ) / h / h;
}
i = n - 1;
lu[i] = ( - u[i-1] + 2.0 * u[i] - u[0] ) / h / h;
return lu;
}
/******************************************************************************/
вроде это что-то похоже на то что нужно, судя по этой
доке.
Но непонятно одно: в качестве параметра u[] я должен "занести" весь исходный массив точек?
А что делать, если у меня эти точки добавляются по-очереди по одной штуке в "рантайме" (т.е. мне надо посчитать этот Лапласиан для каждой новой точки)?
ЗЫ: Я с высшей математикой уже давно не дружу и тяжко заново учиться с нуля... Какая-то жесть...