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

📄 integset.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
字号:
/**********Copyright 1991 Regents of the University of California.  All rights reserved.Author:	1987 Kartikeya Mayaram, U. C. Berkeley CAD Group**********/#include <math.h>#include <stdio.h>#include "numenum.h"/* compute the coefficient for the integration and predictor methods *//* based on the Lagrange polynomial method in Liniger et. al. */voidcomputeIntegCoeff( method, order, intCoeff, delta )int method;int order;double *intCoeff, *delta;{    int i, j, k;    double sum, temp, preMult;    double num, denom, prod;    switch( method ) {    case BDF:	/* determine coeff[0] first */	sum = 0.0;	temp = 0.0;	for( j = 0 ; j < order; j++ ) {	    temp += delta[ j ];	    sum += 1.0 / temp;	}	intCoeff[ 0 ] = sum;	/* now compute the higher order coefficients */	for( j = 1; j <= order ; j++ ) {	    /* compute the pre multiplier */	    temp = 0.0;	    for( i = 0; i < j; i++ ) {		temp += delta[ i ];	    }	    preMult = 1.0 / temp;	    prod = 1.0;	    /* now compute the product */	    for( i = 1; i <= order; i++ ) {		/* product loop */		if( i != j ) {		    num = 0.0;		    for( k = 0; k < i; k++ ) {			/* first the numerator */			num += delta[ k ];		    }		    if( i > j ) {			/* denom is positive */			denom = 0.0;			for( k = j; k < i; k++ ) {			    denom += delta[ k ];			}		    }		    else {			/* i < j */			denom = 0.0;			for( k = i; k < j; k++ ) {			    denom += delta[ k ];			}			denom = -denom;		    }		    prod *= num / denom ;		}	    }	    intCoeff[ j ] = -preMult * prod;	}	break;    case TRAPEZOIDAL:    default:	switch( order ) {	case 1:	    temp = 1.0 / delta[ 0 ];	    intCoeff[ 0 ] = temp;	    intCoeff[ 1 ] = -temp;	    break;	case 2:	    temp = 2.0 / delta[ 0 ];	    intCoeff[ 0 ] = temp;	    intCoeff[ 1 ] = -temp;	    intCoeff[ 2 ] = -1.0;	    break;	}	break;    }}		    voidcomputePredCoeff( method, order, predCoeff, delta )int method;int order;double *predCoeff, *delta;{    int i, j, k;    double num, denom, prod, temp;    if( method == TRAPEZOIDAL && order > 2 ) {	printf("\n computePredCoeff: order > 2 for trapezoidal");	exit( -1 );    }    for( j = 1; j <= order+1 ; j++ ) {	prod = 1.0;	/* now compute the product */	for( i = 1; i <= order+1; i++ ) {	    /* product loop */	    if( i != j ) {		num = 0.0;		for( k = 0; k < i; k++ ) {		    /* first the numerator */		    num += delta[ k ];		}		if( i > j ) {		    /* denom is positive */		    denom = 0.0;		    for( k = j; k < i; k++ ) {			denom += delta[ k ];		    }		}		else {		    /* i < j */		    denom = 0.0;		    for( k = i; k < j; k++ ) {			denom += delta[ k ];		    }		    denom = -denom;		}		prod *= num / denom ;	    }	}	predCoeff[ j - 1 ] = prod;    }}/* main program to check the coefficientsmain(){    double intCoeff[ 7 ], predCoeff[ 7 ];    double delta[ 7 ];    int order = 1;    int i;    for( i = 0; i <= 6; i++ ) {	delta[ i ] = 1.0;    }    computeIntegCoeff(TRAPEZOIDAL, order, intCoeff, delta );    computePredCoeff(TRAPEZOIDAL, order, predCoeff, delta );    for(i = 0; i <= order; i++ ) {	printf("\n IntCoeff[ %d ] = %e  PredCoeff[ %d ] = %e ", i, intCoeff[ i ], i, predCoeff[ i ] );    }}*/

⌨️ 快捷键说明

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