00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef CONST_
00014 #define CONST_ const
00015 #endif
00016
00017 #ifndef PKNUMD_H
00018 #define PKNUMD_H
00019
00020 #ifndef PKVARIA_H
00021 #include "pkvaria.h"
00022 #endif
00023
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027
00028
00029 #ifndef PKNUM_H
00030 typedef struct bandm_profile {
00031 int firstnz;
00032
00033 int ind;
00034 } bandm_profile;
00035
00036 typedef struct { double x, y; } complexd;
00037 #endif
00038
00039
00040 double pkn_ScalarProductd ( int spdimen, const double *a, const double *b );
00041 double pkn_SecondNormd ( int spdimen, const double *b );
00042
00043 double pkn_detd ( int n, double *a );
00044
00045 void pkn_AddMatrixd ( int nrows, int rowlen,
00046 int inpitch1, const double *indata1,
00047 int inpitch2, const double *indata2,
00048 int outpitch, double *outdata );
00049 void pkn_AddMatrixMd ( int nrows, int rowlen,
00050 int inpitch1, const double *indata1,
00051 int inpitch2, const double *indata2,
00052 double a,
00053 int outpitch, double *outdata );
00054 void pkn_SubtractMatrixd ( int nrows, int rowlen,
00055 int inpitch1, const double *indata1,
00056 int inpitch2, const double *indata2,
00057 int outpitch, double *outdata );
00058 void pkn_MatrixMDifferenced ( int nrows, int rowlen,
00059 int inpitch1, const double *indata1,
00060 int inpitch2, const double *indata2,
00061 double a,
00062 int outpitch, double *outdata );
00063 void pkn_MatrixLinCombd ( int nrows, int rowlen,
00064 int inpitch1, const double *indata1,
00065 double a,
00066 int inpitch2, const double *indata2,
00067 double b,
00068 int outpitch, double *outdata );
00069
00070 void pkn_MultMatrixNumd ( int nrows, int rowlen,
00071 int inpitch, const double *indata,
00072 double a,
00073 int outpitch, double *outdata );
00074 void pkn_MultArrayd ( int nrows, int rowlen, int pitch_a, CONST_ double *a,
00075 int pitch_b, CONST_ double *b,
00076 int pitch_c, double *c );
00077
00078 void pkn_MultMatrixd ( int nrows_a, int rowlen_a, int pitch_a, CONST_ double *a,
00079 int rowlen_b, int pitch_b, CONST_ double *b,
00080 int pitch_c, double *c );
00081 void pkn_MultMatrixAddd ( int nrows_a, int rowlen_a, int pitch_a, CONST_ double *a,
00082 int rowlen_b, int pitch_b, CONST_ double *b,
00083 int pitch_c, double *c );
00084 void pkn_MultMatrixSubd ( int nrows_a, int rowlen_a, int pitch_a, CONST_ double *a,
00085 int rowlen_b, int pitch_b, CONST_ double *b,
00086 int pitch_c, double *c );
00087
00088 void pkn_MultTMatrixd ( int nrows_a, int rowlen_a, int pitch_a, const double *a,
00089 int rowlen_b, int pitch_b, const double *b,
00090 int pitch_c, double *c );
00091 void pkn_MultTMatrixAddd ( int nrows_a, int rowlen_a, int pitch_a,
00092 const double *a,
00093 int rowlen_b, int pitch_b, const double *b,
00094 int pitch_c, double *c );
00095 void pkn_MultTMatrixSubd ( int nrows_a, int rowlen_a, int pitch_a,
00096 const double *a,
00097 int rowlen_b, int pitch_b, const double *b,
00098 int pitch_c, double *c );
00099 void pkn_MultMatrixTd ( int nrows_a, int rowlen_a, int pitch_a, const double *a,
00100 int nrows_b, int pitch_b, const double *b,
00101 int pitch_c, double *c );
00102 void pkn_MultMatrixTAddd ( int nrows_a, int rowlen_a, int pitch_a, const double *a,
00103 int nrows_b, int pitch_b, const double *b,
00104 int pitch_c, double *c );
00105 void pkn_MultMatrixTSubd ( int nrows_a, int rowlen_a, int pitch_a, const double *a,
00106 int nrows_b, int pitch_b, const double *b,
00107 int pitch_c, double *c );
00108
00109
00110 void pkn_FindGivensRotationd ( double a, double b, double *c, double *s );
00111 void pkn_FindGivensRotXid ( double a, double b, double *c, double *s, double *xi );
00112 void pkn_FindXiGivensRotd ( double xi, double *c, double *s );
00113 void pkn_ApplyGivensRotationd ( double c, double s, double *a, double *b );
00114 void pkn_ApplySymGivensRotationd ( double c, double s,
00115 double *d, double *e, double *f );
00116
00117
00118 void pkn_MVectorSumd ( int m, int n, double *sum, ... );
00119 void pkn_MVectorLinCombd ( int m, int n, double *sum, ... );
00120
00121
00122 boolean pkn_GaussDecomposePLUQd ( int n, double *a, int *P, int *Q );
00123 void pkn_multiSolvePLUQd ( int n, const double *lu, const int *P, const int *Q,
00124 int spdimen, int pitch, double *b );
00125 boolean pkn_multiGaussSolveLinEqd ( int n, const double *a,
00126 int spdimen, int pitch, double *b );
00127 boolean pkn_GaussInvertMatrixd ( int n, double *a );
00128
00129
00130 boolean pkn_QRDecomposeMatrixd ( int nrows, int ncols, double *a, double *aa );
00131 void pkn_multiReflectVectord ( int nrows, int ncols,
00132 const double *a, const double *aa,
00133 int spdimen, int pitch, double *b );
00134 void pkn_multiInvReflectVectord ( int nrows, int ncols,
00135 const double *a, const double *aa,
00136 int spdimen, int pitch, double *b );
00137 void pkn_multiMultUTVectord ( int nrows, const double *a,
00138 int spdimen, int bpitch, double *b,
00139 int xpitch, double *x );
00140 void pkn_multiMultInvUTVectord ( int nrows, const double *a,
00141 int spdimen, int bpitch, double *b,
00142 int xpitch, double *x );
00143 void pkn_multiMultTrUTVectord ( int nrows, const double *a,
00144 int spdimen, int bpitch, double *b,
00145 int xpitch, double *x );
00146 void pkn_multiMultInvTrUTVectord ( int nrows, const double *a,
00147 int spdimen, int bpitch, double *b,
00148 int xpitch, double *x );
00149 boolean pkn_multiSolveRLSQd ( int nrows, int ncols, double *a,
00150 int spdimen, int bpitch, double *b,
00151 int xpitch, double *x );
00152 void pkn_QRGetReflectiond ( int nrows, int ncols,
00153 const double *a, const double *aa,
00154 int nrefl, double *w, double *gamma );
00155
00156
00157
00158 #ifndef PKNUM_H
00159 void pkn_BandmFindQRMSizes ( int ncols, const bandm_profile *aprof,
00160 int *qsize, int *rsize );
00161 #endif
00162
00163 void pkn_BandmQRDecomposeMatrixd ( int nrows, int ncols,
00164 const bandm_profile *aprof, const double *a,
00165 bandm_profile *qprof, double *q,
00166 bandm_profile *rprof, double *r );
00167 void pkn_multiBandmReflectVectord ( int ncols,
00168 const bandm_profile *qprof, const double *q,
00169 int spdimen, double *b );
00170 void pkn_multiBandmInvReflectVectord ( int ncols,
00171 const bandm_profile *qprof,
00172 const double *q,
00173 int spdimen, double *b );
00174 void pkn_multiBandmMultVectord ( int nrows, int ncols,
00175 const bandm_profile *aprof, const double *a,
00176 int spdimen, const double *x, double *y );
00177 void pkn_multiBandmMultInvUTMVectord ( int nrows,
00178 const bandm_profile *rprof,
00179 const double *r,
00180 int spdimen, const double *x, double *y );
00181 void pkn_multiBandmMultTrVectord ( int ncols,
00182 const bandm_profile *aprof, const double *a,
00183 int spdimen, const double *x, double *y );
00184 void pkn_multiBandmMultInvTrUTMVectord ( int nrows,
00185 const bandm_profile *rprof,
00186 const double *r,
00187 int spdimen, const double *x, double *y );
00188
00189 void pkn_multiBandmSolveRLSQd ( int nrows, int ncols,
00190 const bandm_profile *aprof, const double *a,
00191 int nrsides, int spdimen,
00192 int bpitch, const double *b,
00193 int xpitch, double *x );
00194 void pkn_multiBandmSolveDLSQd ( int nrows, int ncols,
00195 const bandm_profile *atprof, const double *at,
00196 int nrsides, int spdimen,
00197 int bpitch, const double *b,
00198 int x0pitch, const double *x0,
00199 int xpitch, double *x );
00200 void pkn_multiBandmSolveCRLSQd ( int nrows, int ncols,
00201 const bandm_profile *aprof, const double *a,
00202 int nconstr, int cpitch, const double *c,
00203 int nrsides, int spdimen,
00204 int bpitch, const double *b,
00205 int dpitch, const double *d,
00206 int xpitch, double *x );
00207
00208 void pkn_PrintBandmd ( int ncols, const bandm_profile *aprof, const double *a );
00209 void pkn_PrintBandmRowSumd ( int ncols, const bandm_profile *aprof, const double *a );
00210 void pkn_PrintMatd ( int nrows, int ncols, const double *a );
00211
00212 #ifndef PKNUM_H
00213 void pkn_PrintProfile ( int ncols, const bandm_profile *prof );
00214 #endif
00215
00216
00217 #ifndef PKNUM_H
00218 #define pkn_LowerTrMatIndex(i,j) \
00219 ( (i)*((i)+1)/2+(j) )
00220 #define pkn_SymMatIndex(i,j) \
00221 ( (i) >= (j) ? (i)*((i)+1)/2+(j) : (j)*((j)+1)/2+(i) )
00222 #endif
00223
00224 boolean pkn_CholeskyDecompd ( int n, double *a );
00225 void pkn_SymMatrixMultd ( int n, CONST_ double *a, int spdimen,
00226 int bpitch, CONST_ double *b,
00227 int xpitch, double *x );
00228 void pkn_LowerTrMatrixMultd ( int n, CONST_ double *l, int spdimen,
00229 int bpitch, CONST_ double *b,
00230 int xpitch, double *x );
00231 void pkn_UpperTrMatrixMultd ( int n, CONST_ double *l, int spdimen,
00232 int bpitch, CONST_ double *b,
00233 int xpitch, double *x );
00234 void pkn_LowerTrMatrixSolved ( int n, const double *l, int spdimen,
00235 int bpitch, const double *b,
00236 int xpitch, double *x );
00237 void pkn_UpperTrMatrixSolved ( int n, const double *l, int spdimen,
00238 int bpitch, const double *b,
00239 int xpitch, double *x );
00240
00241 void pkn_MatrixLowerTrMultd ( int m, int n, int bpitch, CONST_ double *b,
00242 CONST_ double *l, int xpitch, double *x );
00243 void pkn_MatrixUpperTrMultd ( int m, int n, int bpitch, CONST_ double *b,
00244 CONST_ double *l, int xpitch, double *x );
00245 void pkn_MatrixLowerTrSolved ( int m, int n, int bpitch, CONST_ double *b,
00246 CONST_ double *l, int xpitch, double *x );
00247 void pkn_MatrixUpperTrSolved ( int m, int n, int bpitch, CONST_ double *b,
00248 CONST_ double *l, int xpitch, double *x );
00249 void pkn_MatrixLowerTrMultAddd ( int m, int n, int bpitch, CONST_ double *b,
00250 CONST_ double *l, int xpitch, double *x );
00251 void pkn_MatrixUpperTrMultAddd ( int m, int n, int bpitch, CONST_ double *b,
00252 CONST_ double *l, int xpitch, double *x );
00253 boolean pkn_MatrixLowerTrSolveAddd ( int m, int n, int bpitch, CONST_ double *b,
00254 CONST_ double *l, int xpitch, double *x );
00255 boolean pkn_MatrixUpperTrSolveAddd ( int m, int n, int bpitch, CONST_ double *b,
00256 CONST_ double *l, int xpitch, double *x );
00257 void pkn_MatrixLowerTrMultSubd ( int m, int n, int bpitch, CONST_ double *b,
00258 CONST_ double *l, int xpitch, double *x );
00259 void pkn_MatrixUpperTrMultSubd ( int m, int n, int bpitch, CONST_ double *b,
00260 CONST_ double *l, int xpitch, double *x );
00261 boolean pkn_MatrixLowerTrSolveSubd ( int m, int n, int bpitch, CONST_ double *b,
00262 CONST_ double *l, int xpitch, double *x );
00263 boolean pkn_MatrixUpperTrSolveSubd ( int m, int n, int bpitch, CONST_ double *b,
00264 CONST_ double *l, int xpitch, double *x );
00265
00266 void pkn_SymToFullMatrixd ( int n, const double *syma,
00267 int pitch, double *fulla );
00268 void pkn_FullToSymMatrixd ( int n, int pitch, const double *fulla,
00269 double *syma );
00270 #define pkn_FullToLTrMatrixd(n,pitch,fulla,ltra) \
00271 pkn_FullToSymMatrixd(n,pitch,fulla,ltra)
00272 void pkn_LTrToFullMatrixd ( int n, const double *ltra,
00273 int pitch, double *fulla );
00274 void pkn_UTrToFullMatrixd ( int n, const double *utra,
00275 int pitch, double *fulla );
00276 void pkn_FullToUTrMatrixd ( int n, int pitch, const double *fulla,
00277 double *utra );
00278
00279 void pkn_ComputeQSQTd ( int m, const double *s,
00280 int n, const double *a, const double *aa,
00281 double *b );
00282 void pkn_ComputeQTSQd ( int m, const double *s,
00283 int n, const double *a, const double *aa,
00284 double *b );
00285
00286 void pkn_SymMatSubAATd ( int n, double *b, int m, int pitch_a, CONST_ double *a );
00287
00288 void pkn_SymMatFindEigenvalueIntervald ( int n, double *a,
00289 double *lmin, double *lmax );
00290 boolean pkn_SymMatFindEigenvaluesd ( int n, double *a, double *eigenval );
00291
00292
00293 #ifndef PKNUM_H
00294 #define pkn_LHessenbergMatIndex(i,j) \
00295 (pkn_LowerTrMatIndex(((i)+1),(j))-1)
00296 #define pkn_UHessenbergMatIndex(i,j) \
00297 (pkn_LowerTrMatIndex(((j)+1),(i))-1)
00298 #endif
00299
00300 boolean pkn_QRDecompUHessenbergd ( int n, double *ah );
00301 void pkn_multiSolveQRUHessenbergd ( int n, double *qrh,
00302 int spdimen, int pitch, double *b );
00303 boolean pkn_multiSolveUHessenbergLinEqd ( int n, double *ah,
00304 int spdimen, int pitch, double *b );
00305
00306
00307 double pkn_Illinoisd ( double (*f) (double), double a, double b, double eps,
00308 boolean *error );
00309
00310 boolean pkn_SolveSqEqd ( double p, double q, double *x1, double *x2 );
00311
00312 double pkn_GoldenRatd ( double (*f) (double), double a, double b, double eps,
00313 boolean *error );
00314
00315
00316
00317 void pkn_Setup2DerA11Matrixd ( double xu, double yu, double xv, double yv,
00318 double *A11 );
00319
00320 void pkn_Setup2DerA21Matrixd ( double xuu, double yuu, double xuv,
00321 double yuv, double xvv, double yvv,
00322 double *A21 );
00323 void pkn_Setup2DerA22Matrixd ( double xu, double yu, double xv, double yv,
00324 double *A22 );
00325
00326 void pkn_Setup2DerA31Matrixd ( double xuuu, double yuuu, double xuuv, double yuuv,
00327 double xuvv, double yuvv, double xvvv, double yvvv,
00328 double *A31 );
00329 void pkn_Setup2DerA32Matrixd ( double xu, double yu, double xv, double yv,
00330 double xuu, double yuu, double xuv,
00331 double yuv, double xvv, double yvv,
00332 double *A32 );
00333 void pkn_Setup2DerA33Matrixd ( double xu, double yu, double xv, double yv,
00334 double *A33 );
00335
00336 void pkn_Setup2DerA41Matrixd ( double xuuuu, double yuuuu, double xuuuv, double yuuuv,
00337 double xuuvv, double yuuvv, double xuvvv, double yuvvv,
00338 double xvvvv, double yvvvv,
00339 double *A41 );
00340 void pkn_Setup2DerA42Matrixd ( double xu, double yu, double xv, double yv,
00341 double xuu, double yuu, double xuv,
00342 double yuv, double xvv, double yvv,
00343 double xuuu, double yuuu, double xuuv, double yuuv,
00344 double xuvv, double yuvv, double xvvv, double yvvv,
00345 double *A42 );
00346 void pkn_Setup2DerA43Matrixd ( double xu, double yu, double xv, double yv,
00347 double xuu, double yuu, double xuv,
00348 double yuv, double xvv, double yvv,
00349 double *A43 );
00350 void pkn_Setup2DerA44Matrixd ( double xu, double yu, double xv, double yv,
00351 double *A44 );
00352
00353
00354 void pkn_Comp2Derivatives1d ( double xu, double yu, double xv, double yv,
00355 int spdimen, const double *gx, const double *gy,
00356 double *hu, double *hv );
00357 void pkn_Comp2Derivatives2d ( double xu, double yu, double xv, double yv,
00358 double xuu, double yuu, double xuv,
00359 double yuv, double xvv, double yvv,
00360 int spdimen,
00361 const double *gx, const double *gy,
00362 const double *gxx, const double *gxy,
00363 const double *gyy,
00364 double *huu, double *huv, double *hvv );
00365 void pkn_Comp2Derivatives3d ( double xu, double yu, double xv, double yv,
00366 double xuu, double yuu, double xuv,
00367 double yuv, double xvv, double yvv,
00368 double xuuu, double yuuu, double xuuv, double yuuv,
00369 double xuvv, double yuvv, double xvvv, double yvvv,
00370 int spdimen,
00371 const double *gx, const double *gy,
00372 const double *gxx, const double *gxy,
00373 const double *gyy,
00374 const double *gxxx, const double *gxxy,
00375 const double *gxyy, const double *gyyy,
00376 double *huuu, double *huuv,
00377 double *huvv, double *hvvv );
00378 void pkn_Comp2Derivatives4d ( double xu, double yu, double xv, double yv,
00379 double xuu, double yuu, double xuv,
00380 double yuv, double xvv, double yvv,
00381 double xuuu, double yuuu, double xuuv, double yuuv,
00382 double xuvv, double yuvv, double xvvv, double yvvv,
00383 double xuuuu, double yuuuu, double xuuuv,
00384 double yuuuv, double xuuvv, double yuuvv,
00385 double xuvvv, double yuvvv,
00386 double xvvvv, double yvvvv,
00387 int spdimen,
00388 const double *gx, const double *gy,
00389 const double *gxx, const double *gxy,
00390 const double *gyy,
00391 const double *gxxx, const double *gxxy,
00392 const double *gxyy, const double *gyyy,
00393 const double *gxxxx, const double *gxxxy,
00394 const double *gxxyy, const double *gxyyy,
00395 const double *gyyyy,
00396 double *huuuu, double *huuuv, double *huuvv,
00397 double *huvvv, double *hvvvv );
00398
00399
00400 void pkn_Comp2iDerivatives1d ( double xu, double yu, double xv, double yv,
00401 int spdimen, const double *hu, const double *hv,
00402 double *gx, double *gy );
00403 void pkn_Comp2iDerivatives2d ( double xu, double yu, double xv, double yv,
00404 double xuu, double yuu, double xuv,
00405 double yuv, double xvv, double yvv,
00406 int spdimen,
00407 const double *hu, const double *hv,
00408 const double *huu, const double *huv,
00409 const double *hvv,
00410 double *gx, double *gy,
00411 double *gxx, double *gxy, double *gyy );
00412 void pkn_Comp2iDerivatives3d ( double xu, double yu, double xv, double yv,
00413 double xuu, double yuu, double xuv,
00414 double yuv, double xvv, double yvv,
00415 double xuuu, double yuuu, double xuuv, double yuuv,
00416 double xuvv, double yuvv, double xvvv, double yvvv,
00417 int spdimen,
00418 const double *hu, const double *hv,
00419 const double *huu, const double *huv,
00420 const double *hvv,
00421 const double *huuu, const double *huuv,
00422 const double *huvv, const double *hvvv,
00423 double *gx, double *gy,
00424 double *gxx, double *gxy, double *gyy,
00425 double *gxxx, double *gxxy,
00426 double *gxyy, double *gyyy );
00427 void pkn_Comp2iDerivatives4d ( double xu, double yu, double xv, double yv,
00428 double xuu, double yuu, double xuv,
00429 double yuv, double xvv, double yvv,
00430 double xuuu, double yuuu, double xuuv, double yuuv,
00431 double xuvv, double yuvv, double xvvv, double yvvv,
00432 double xuuuu, double yuuuu, double xuuuv,
00433 double yuuuv, double xuuvv, double yuuvv,
00434 double xuvvv, double yuvvv,
00435 double xvvvv, double yvvvv,
00436 int spdimen,
00437 const double *hu, const double *hv,
00438 const double *huu, const double *huv,
00439 const double *hvv,
00440 const double *huuu, const double *huuv,
00441 const double *huvv, const double *hvvv,
00442 const double *huuuu, const double *huuuv,
00443 const double *huuvv, const double *huvvv,
00444 const double *hvvvv,
00445 double *gx, double *gy,
00446 double *gxx, double *gxy, double *gyy,
00447 double *gxxx, double *gxxy,
00448 double *gxyy, double *gyyy,
00449 double *gxxxx, double *gxxxy, double *gxxyy,
00450 double *gxyyy, double *gyyyy );
00451
00452
00453 void pkn_f2iDerivatives1d ( double xu, double yu, double xv, double yv,
00454 double *gx, double *gy );
00455 void pkn_f2iDerivatives2d ( double xu, double yu, double xv, double yv,
00456 double xuu, double yuu, double xuv,
00457 double yuv, double xvv, double yvv,
00458 double *gx, double *gy,
00459 double *gxx, double *gxy, double *gyy );
00460 void pkn_f2iDerivatives3d ( double xu, double yu, double xv, double yv,
00461 double xuu, double yuu, double xuv,
00462 double yuv, double xvv, double yvv,
00463 double xuuu, double yuuu, double xuuv, double yuuv,
00464 double xuvv, double yuvv, double xvvv, double yvvv,
00465 double *gx, double *gy,
00466 double *gxx, double *gxy, double *gyy,
00467 double *gxxx, double *gxxy,
00468 double *gxyy, double *gyyy );
00469 void pkn_f2iDerivatives4d ( double xu, double yu, double xv, double yv,
00470 double xuu, double yuu, double xuv,
00471 double yuv, double xvv, double yvv,
00472 double xuuu, double yuuu, double xuuv, double yuuv,
00473 double xuvv, double yuvv, double xvvv, double yvvv,
00474 double xuuuu, double yuuuu, double xuuuv,
00475 double yuuuv, double xuuvv, double yuuvv,
00476 double xuvvv, double yuvvv,
00477 double xvvvv, double yvvvv,
00478 double *gx, double *gy,
00479 double *gxx, double *gxy, double *gyy,
00480 double *gxxx, double *gxxy,
00481 double *gxyy, double *gyyy,
00482 double *gxxxx, double *gxxxy, double *gxxyy,
00483 double *gxyyy, double *gyyyy );
00484
00485
00486
00487 #ifndef PKNUM_H
00488 int pkn_Block1ArraySize ( int k, int r, int s );
00489 int pkn_Block1FindBlockPos ( int k, int r, int s, int i, int j );
00490 int pkn_Block1FindElemPos ( int k, int r, int s, int i, int j );
00491 #endif
00492
00493 boolean pkn_Block1CholeskyDecompMd ( int k, int r, int s, double *A );
00494 void pkn_Block1LowerTrMSolved ( int k, int r, int s, CONST_ double *A,
00495 int spdimen, int xpitch, double *x );
00496 void pkn_Block1UpperTrMSolved ( int k, int r, int s, CONST_ double *A,
00497 int spdimen, int xpitch, double *x );
00498 void pkn_Block1SymMatrixMultd ( int k, int r, int s, CONST_ double *A,
00499 int spdimen, int xpitch, double *x,
00500 int ypitch, double *y );
00501
00502
00503
00504 int pkn_FFTPermuted ( int n, int rowlen, int pitch, complexd *a );
00505 boolean pkn_FFTd ( int n, int rowlen, int pitch, complexd *a );
00506 boolean pkn_InvFFTd ( int n, int rowlen, int pitch, complexd *a );
00507
00508
00509
00510 #ifndef PKNUM_H
00511 int pkn_Block2ArraySize ( int k, int r, int s, int t );
00512 int pkn_Block2FindBlockPos ( int k, int r, int s, int t, int i, int j );
00513 int pkn_Block2FindElemPos ( int k, int r, int s, int t, int i, int j );
00514 #endif
00515
00516 boolean pkn_Block2CholeskyDecompMd ( int k, int r, int s, int t, double *A );
00517 void pkn_Block2LowerTrMSolved ( int k, int r, int s, int t, CONST_ double *L,
00518 int spdimen, int xpitch, double *x );
00519 void pkn_Block2UpperTrMSolved ( int k, int r, int s, int t, CONST_ double *L,
00520 int spdimen, int xpitch, double *x );
00521 void pkn_Block2SymMatrixMultd ( int k, int r, int s, int t, CONST_ double *A,
00522 int spdimen, int xpitch, CONST_ double *x,
00523 int ypitch, double *y );
00524
00525
00526 #ifndef PKNUM_H
00527 int pkn_Block3ArraySize ( int k, int r, int s );
00528 int pkn_Block3FindBlockPos ( int k, int r, int s, int i, int j );
00529 int pkn_Block3FindElemPos ( int k, int r, int s, int i, int j );
00530 #endif
00531
00532 boolean pkn_Block3CholeskyDecompMd ( int k, int r, int s, double *A );
00533 void pkn_Block3LowerTrMSolved ( int k, int r, int s, CONST_ double *L,
00534 int spdimen, int xpitch, double *x );
00535 void pkn_Block3UpperTrMSolved ( int k, int r, int s, CONST_ double *L,
00536 int spdimen, int xpitch, double *x );
00537
00538 void pkn_Block3SymMatrixMultd ( int k, int r, int s, CONST_ double *A,
00539 int spdimen, int xpitch, CONST_ double *x,
00540 int ypitch, double *y );
00541
00542
00543 #ifndef PKNUM_H
00544 int pkn_NRBArraySize ( int n, const int *prof );
00545 #endif
00546
00547 boolean pkn_NRBFindRowsd ( int n, const int *prof, CONST_ double *a,
00548 double **row );
00549 boolean pkn_NRBSymCholeskyDecompd ( int n, const int *prof, double *a,
00550 double **row, boolean *abort );
00551 boolean pkn_NRBSymMultd ( int n, const int *prof, CONST_ double *a,
00552 double **row,
00553 int spdimen, int xpitch, CONST_ double *x,
00554 int ypitch, double *y );
00555 boolean pkn_NRBLowerTrMultd ( int n, const int *prof, CONST_ double *a,
00556 double **row,
00557 int spdimen, int xpitch, CONST_ double *x,
00558 int ypitch, double *y );
00559 boolean pkn_NRBUpperTrMultd ( int n, const int *prof, CONST_ double *a,
00560 double **row,
00561 int spdimen, int xpitch, CONST_ double *x,
00562 int ypitch, double *y );
00563 boolean pkn_NRBLowerTrSolved ( int n, const int *prof, CONST_ double *l,
00564 double **row,
00565 int spdimen, int bpitch, CONST_ double *b,
00566 int xpitch, double *x );
00567 boolean pkn_NRBUpperTrSolved ( int n, const int *prof, CONST_ double *l,
00568 double **row,
00569 int spdimen, int bpitch, CONST_ double *b,
00570 int xpitch, double *x );
00571
00572 boolean pkn_NRBSymFindEigenvalueIntervald ( int n, const int *prof,
00573 double *a, double **row,
00574 double *amin, double *amax );
00575
00576 boolean pkn_NRBComputeQTSQd ( int n, int *prof, double *Amat, double **Arows,
00577 int w, double *Bmat, double *bb,
00578 int *qaprof, double **QArows );
00579 boolean pkn_NRBComputeQSQTd ( int n, int *prof, double *Amat, double **Arows,
00580 int w, double *Bmat, double *bb,
00581 int *qaprof, double **QArows );
00582
00583 boolean pkn_NRBComputeQTSQbld ( int n, int *prof, double *Amat, double **Arows,
00584 int w, double *Bmat, double *bb,
00585 int *qa11prof, double **QA11rows,
00586 int *qa22prof, double **QA22rows,
00587 double **QA21 );
00588 boolean pkn_NRBComputeQSQTbld ( int n, int *prof, double *Amat, double **Arows,
00589 int w, double *Bmat, double *bb,
00590 int *qa11prof, double **QA11rows,
00591 int *qa22prof, double **QA22rows,
00592 double **QA21 );
00593
00594
00595 boolean pkn_PCGd ( int n, void *usrdata, double *b, double *x,
00596 boolean (*multAx)( int n, void *usrdata, const double *x, double *Ax ),
00597 boolean (*multQIx)( int n, void *usrdata, const double *x, double *Qix ),
00598 int maxit, double eps, double delta, int *itm );
00599
00600
00601 boolean pkn_MultSPMVectord ( int nrows, int ncols, int nnz,
00602 const index2 *ai, const double *ac,
00603 int spdimen, const double *x,
00604 double *y );
00605 boolean pkn_MultSPMTVectord ( int nrows, int ncols, int nnz,
00606 const index2 *ai, const double *ac,
00607 int spdimen, const double *x,
00608 double *y );
00609
00610 boolean pkn_MultSPsubMVectord ( int nrows, int ncols, int nnz,
00611 const index3 *ai, const double *ac,
00612 int spdimen, const double *x,
00613 double *y );
00614 boolean pkn_MultSPsubMTVectord ( int nrows, int ncols, int nnz,
00615 const index3 *ai, const double *ac,
00616 int spdimen, const double *x,
00617 double *y );
00618
00619
00620
00621 void pkn_SPMFastMultMMd ( double *ac, double *bc,
00622 int nnzab, int *abpos, index2 *aikbkj,
00623 double *abc );
00624
00625
00626 boolean pkn_SPMmultMMCd ( int nra, int nca, int ncb,
00627 unsigned int nnza, index2 *ai, double *ac,
00628 unsigned int *apermut, int *acols, boolean ca,
00629 unsigned int nnzb, index2 *bi, double *bc,
00630 unsigned int *bpermut, int *bcols, boolean cb,
00631 index2 *abi, double *abc );
00632 boolean pkn_SPMmultMMTCd ( int nra, int nca, int nrb,
00633 unsigned int nnza, index2 *ai, double *ac,
00634 unsigned int *apermut, int *acols, boolean ca,
00635 unsigned int nnzb, index2 *bi, double *bc,
00636 unsigned int *bpermut, int *brows, boolean rb,
00637 index2 *abi, double *abc );
00638 boolean pkn_SPMmultMTMCd ( int nra, int nca, int ncb,
00639 unsigned int nnza, index2 *ai, double *ac,
00640 unsigned int *apermut, int *arows, boolean ra,
00641 unsigned int nnzb, index2 *bi, double *bc,
00642 unsigned int *bpermut, int *bcols, boolean ba,
00643 index2 *abi, double *abc );
00644
00645 boolean pkn_SPsubMmultMMCd ( int nra, int nca, int ncb,
00646 unsigned int nnza, index3 *ai, double *ac,
00647 unsigned int *apermut, int *acols, boolean ca,
00648 unsigned int nnzb, index3 *bi, double *bc,
00649 unsigned int *bpermut, int *bcols, boolean cb,
00650 index2 *abi, double *abc );
00651 boolean pkn_SPsubMmultMMTCd ( int nra, int nca, int nrb,
00652 unsigned int nnza, index3 *ai, double *ac,
00653 unsigned int *apermut, int *acols, boolean ca,
00654 unsigned int nnzb, index3 *bi, double *bc,
00655 unsigned int *bpermut, int *brows, boolean rb,
00656 index2 *abi, double *abc );
00657 boolean pkn_SPsubMmultMTMCd ( int nra, int nca, int ncb,
00658 unsigned int nnza, index3 *ai, double *ac,
00659 unsigned int *apermut, int *arows, boolean ra,
00660 unsigned int nnzb, index3 *bi, double *bc,
00661 unsigned int *bpermut, int *bcols, boolean cb,
00662 index2 *abi, double *abc );
00663
00664
00665 boolean pkn_QuadRectanglesd ( double a, double b, int n,
00666 double *qknots, double *qcoeff );
00667 boolean pkn_QuadSimpsond ( double a, double b, int n,
00668 double *qknots, double *qcoeff );
00669
00670 boolean pkn_QuadGaussLegendre4d ( double a, double b, int n,
00671 double *qknots, double *qcoeff );
00672 boolean pkn_QuadGaussLegendre6d ( double a, double b, int n,
00673 double *qknots, double *qcoeff );
00674 boolean pkn_QuadGaussLegendre8d ( double a, double b, int n,
00675 double *qknots, double *qcoeff );
00676 boolean pkn_QuadGaussLegendre10d ( double a, double b, int n,
00677 double *qknots, double *qcoeff );
00678 boolean pkn_QuadGaussLegendre12d ( double a, double b, int n,
00679 double *qknots, double *qcoeff );
00680 boolean pkn_QuadGaussLegendre14d ( double a, double b, int n,
00681 double *qknots, double *qcoeff );
00682 boolean pkn_QuadGaussLegendre16d ( double a, double b, int n,
00683 double *qknots, double *qcoeff );
00684 boolean pkn_QuadGaussLegendre18d ( double a, double b, int n,
00685 double *qknots, double *qcoeff );
00686 boolean pkn_QuadGaussLegendre20d ( double a, double b, int n,
00687 double *qknots, double *qcoeff );
00688
00689
00690 #ifndef PKN_LMT_CONTINUE
00691
00692 #define PKN_LMT_ERROR -1
00693 #define PKN_LMT_CONTINUE_LM 0
00694 #define PKN_LMT_CONTINUE_N 1
00695 #define PKN_LMT_FOUND_MINIMUM 2
00696 #define PKN_LMT_FOUND_ZEROGRAD 3
00697 #define PKN_LMT_FOUND_BARRIER 4
00698 #endif
00699
00700 typedef boolean (*pkn_NLMTevalfuncd)( int n, void *usrdata,
00701 double *x, double *f );
00702 typedef boolean (*pkn_NLMTevalfuncgd)( int n, void *usrdata,
00703 double *x, double *f, double *g );
00704 typedef boolean (*pkn_NLMTevalfuncghd)( int n, void *usrdata,
00705 double *x, double *f, double *g, double *h );
00706 typedef boolean (*pkn_NLMTtransfuncd)( int n, void *usrdata, double *x );
00707 typedef boolean (*pkn_NLMTtunnelfuncd)( int n, void *usrdata,
00708 double *x0, double *x1, boolean *went_out );
00709
00710 int pkn_NLMIterd ( int n, void *usrdata, double *x,
00711 pkn_NLMTevalfuncd funcf, pkn_NLMTevalfuncgd funcfg,
00712 pkn_NLMTevalfuncghd funcfgh,
00713 pkn_NLMTtransfuncd trans, pkn_NLMTtunnelfuncd tunnel,
00714 double lowerbound, double eps, double delta,
00715 double *nu );
00716
00717 #ifdef __cplusplus
00718 }
00719 #endif
00720
00721 #endif
00722