⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jmatrixmathvec.h

📁 矩阵运算库
💻 H
字号:
//	JMatrixMathVec
//
//
//  Vector  functions
//
//
//  convention :
//
//		R	:	the result matrix
//
//		A	:	a operand matrix
//		B	:	a operand matrix
//		S	:	a scaler
//
//		N	:	row		/ dimension of the vector
//		M	:	column	/ dimension of the vector
//
//		the matrix dimension is N by M, row first stored
//
//		when a matrix operates whit a scaler, each element of
//		this matrix operates with this scaler.
//
//


#pragma once

#include <math.h>








inline void		JMatrixVecAssign( double * R, const double * V, int N )
{
	//	R = V

	for ( int i=0 ;  i<N ;  i++ )		R[i]  =  V[i] ;
}








inline void		JMatrixVecAdd( double * VR, const double * VA, const double * VB, int N )
{
    //	VR = VA + VB

	for ( int i=0 ;  i<N ;  i++ )		VR[i]  =  VA[i]  +  VB[i] ;
}




inline void		JMatrixVecAdd( double * VA, const double * VB, int N )
{
    //	VA += VB

	for ( int i=0 ;  i<N ;  i++ )		VA[i]  +=  VB[i] ;
}




inline void		JMatrixVecAdd( double * VR, const double * VA, double S, int N )
{
	//	VR = VA + S

	for ( int i=0 ;  i<N ;  i++ )		VR[i]  =  VA[i]  +  S ;
}




inline void		JMatrixVecAdd( double * VA, double S, int N )
{
	//	VA += S

	for ( int i=0 ;  i<N ;  i++ )		VA[i]  +=  S ;
}








inline void 	JMatrixVecSub( double * VR, const double * VA, const double * VB, int N )
{
	//	VR = VA - VB

	for ( int i=0 ;  i<N ;  i++ )		VR[i]  =  VA[i]  -  VB[i] ;
}




inline void		JMatrixVecSub( double * VA, const double * VB, int N )
{
	//	VA -= VB

	for ( int i=0 ;  i<N ;  i++ )		VA[i]  -=  VB[i] ;
}




inline void		JMatrixVecSub( double * V, int N )
{
	//	V = - V

	for ( int i=0 ;  i<N ;  i++ )		V[i]  =  - V[i] ;
}








inline void		JMatrixVecMul( double * R, const double * A, const double * V, int N, int M )
{
    //	R = A * V				R[ N ]			A[ N ][ M ]			V[ M ]

	int		i,  j,  k ;

	for ( k=i=0 ;  i<N ;  k+=M, i++ )
	{
		R[i]  =  0 ;

		for ( j=0 ;  j<M ;  j++ )		R[i]  +=  A[k+j]  *  V[j] ;
	}
}




inline void		JMatrixVecMul( double * R, const double * V, double S, int N )
{
    //	R = V * S				R[ N ]			V[ N ]				S[ 1 ]

	for ( int i=0 ;  i<N ;  i++ )		R[i]  =  V[i]  *  S ;
}




inline void 	JMatrixVecMul( double * V, double S, int N )
{
	//	V *= S					V[ N ]			S[ 1 ]

	for ( int i=0 ;  i<N ;  i++ )		V[i]  *=  S ;
}




inline void		JMatrixVecMulR( double * R,  const double * V, const double * A, int N, int M )
{
    //	R = V * A				R[ M ]			A[ N ][ M ]			V[ N ]

	int		i,  j,  k ;

	for ( i=0 ;  i<M ;  i++ )
	{
		R[i]  =  0 ;

		for ( k=i, j=0 ;  j<N ;  k+=M, j++ )		R[i]  +=  V[j]  *  A[k] ;
	}
}








inline double		JMatrixVecDistance( const double * VA, const double * VB, int N )
{
    //  | VA - VB |				VA[ N ]			VB[ N ]

	double	a,  len = 0 ;

	for ( int i=0 ;  i<N ;  i++ )
	{
		a  =  VA[i] - VB[i] ;			len  +=  a  *  a ;
	}

	return	sqrt( len ) ;
}




inline void			JMatrixVecDyad( double * R, const double * VA, const double * VB, int N, int M )
{
	//	R = VA * VB				R[ N ][ M ]		VA[ N ]				VB[ M ]

	int		i,  j,  k ;

	for ( k=i=0 ;  i<N ;  k+=M, i++ )
	{
		for ( j=0 ;  j<M ;  j++ )		R[k+j]  =  VA[i]  *  VB[j] ;
	}
}




inline double		JMatrixVecDotProduct( const double * VA, const double * VB, int N )
{
    //	VA .* VB				VA[ N ]			VB[ N ]

	double	len = 0 ;

	for ( int i=0 ;  i<N ;  i++ )		len  +=  VA[i]  *  VB[i] ;

	return	len ;
}




inline double		JMatrixVecDotProduct( const double * V, int N )
{
	//	V .* V  =  | V |^2		V[ N ]
	
	double	len = 0 ;

	for ( int i=0 ;  i<N ;  i++ )		len  +=  V[i]  *  V[i] ;

	return	len ;
}




inline double		JMatrixVecLength( const double * V, int N )
{
	//	| V |					V[ N ]

	int		i ;					double	len = 0 ;

	for ( i=0 ;  i<N ;  i++ )			len  +=  V[i]  *  V[i] ;

	return	sqrt( len ) ;
}




inline void				JMatrixVecNormalize( double * V, int N )
{
	//  V = V / | V |			V[ N ]

	int		i ;					double	len = 0 ;

	for ( i=0 ;  i<N ;  i++ )			len  +=  V[i]  *  V[i] ;

	len  =  sqrt( len ) ;

	for ( i=0 ;  i<N ;  i++ )			V[i]  /=  len ;
}




inline double		JMatrixVecMaxEle( const double * V, int N )
{
    //	maximum element of V, int terms of absolute value
	//  the return value is an absolute value

	double	a = 0,  b = 0 ;

	for ( int i=0 ;  i<N ;  i++ )
	{
		if (  a < ( b = fabs(V[i]) )  )		a  =  b ;
	}

	return	a ;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -