80 lines
1.4 KiB
C
80 lines
1.4 KiB
C
/**********
|
|
Copyright 1991 Regents of the University of California. All rights reserved.
|
|
Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group
|
|
**********/
|
|
|
|
#include "ngspice.h"
|
|
#include "norm.h"
|
|
|
|
/* functions to compute max and one norms of a given vector of doubles */
|
|
|
|
double
|
|
maxNorm(double *vector, int size)
|
|
{
|
|
double norm = 0.0;
|
|
double candidate;
|
|
int index, nIndex;
|
|
|
|
nIndex = 1;
|
|
for( index = 1; index <= size; index++ ) {
|
|
candidate = fabs(vector[ index ]);
|
|
if( candidate > norm ) {
|
|
norm = candidate;
|
|
nIndex = index;
|
|
}
|
|
}
|
|
/*
|
|
printf("\n maxNorm: index = %d", nIndex);
|
|
*/
|
|
return( norm );
|
|
}
|
|
|
|
|
|
double
|
|
oneNorm(double *vector, int size)
|
|
{
|
|
double norm = 0.0;
|
|
double value;
|
|
int index;
|
|
|
|
for( index = 1; index <= size; index++ ) {
|
|
value = vector[ index ];
|
|
if( value < 0.0 )
|
|
norm -= value;
|
|
else
|
|
norm += value;
|
|
}
|
|
return( norm );
|
|
}
|
|
|
|
double
|
|
l2Norm(double *vector, int size)
|
|
{
|
|
double norm = 0.0;
|
|
double value;
|
|
int index;
|
|
|
|
for( index = 1; index <= size; index++ ) {
|
|
value = vector[ index ];
|
|
norm += value * value;
|
|
}
|
|
norm = sqrt( norm );
|
|
return( norm );
|
|
}
|
|
|
|
/*
|
|
* dot():
|
|
* computes dot product of two vectors
|
|
*/
|
|
double
|
|
dot(double *vector1, double *vector2, int size)
|
|
{
|
|
register double dot = 0.0;
|
|
register int index;
|
|
|
|
for( index = 1; index <= size; index++ ) {
|
|
dot += vector1[ index ] * vector2[ index ];
|
|
}
|
|
return( dot );
|
|
}
|