1 /********** 2 Copyright 1990 Regents of the University of California. All rights reserved. 3 Author: 1989 Jaijeet S. Roychowdhury 4 **********/ 5 6 #include "spice.h" 7 #include <math.h> 8 9 #define JOB char 10 #include "distodef.h" 11 12 /* 13 * InvDeriv computes the partial derivatives of the 1/x 14 * function where the argument to the function is itself a 15 * function of three variables p, q, and r. 16 */ 17 18 void InvDeriv(new,old)19InvDeriv(new, old) 20 Dderivs *new, *old; 21 { 22 23 Dderivs temp; 24 25 EqualDeriv(&temp, old); 26 27 new->value = 1/temp.value; 28 new->d1_p = -new->value*new->value*temp.d1_p; 29 new->d1_q = -new->value*new->value*temp.d1_q; 30 new->d1_r = -new->value*new->value*temp.d1_r; 31 new->d2_p2 = -new->value*(2*new->d1_p*temp.d1_p + new->value*temp.d2_p2); 32 new->d2_q2 = -new->value*(2*new->d1_q*temp.d1_q + new->value*temp.d2_q2); 33 new->d2_r2 = -new->value*(2*new->d1_r*temp.d1_r + new->value*temp.d2_r2); 34 new->d2_pq = -new->value*(2*new->d1_q*temp.d1_p + new->value*temp.d2_pq); 35 new->d2_qr = -new->value*(2*new->d1_r*temp.d1_q + new->value*temp.d2_qr); 36 new->d2_pr = -new->value*(2*new->d1_r*temp.d1_p + new->value*temp.d2_pr); 37 new->d3_p3 = -(2*(temp.d1_p*new->d1_p*new->d1_p + new->value*( 38 new->d2_p2*temp.d1_p + new->d1_p*temp.d2_p2 + 39 new->d1_p*temp.d2_p2)) + new->value*new->value*temp.d3_p3); 40 new->d3_q3 = -(2*(temp.d1_q*new->d1_q*new->d1_q + new->value*( 41 new->d2_q2*temp.d1_q + new->d1_q*temp.d2_q2 + 42 new->d1_q*temp.d2_q2)) + new->value*new->value*temp.d3_q3); 43 new->d3_r3 = -(2*(temp.d1_r*new->d1_r*new->d1_r + new->value*( 44 new->d2_r2*temp.d1_r + new->d1_r*temp.d2_r2 + 45 new->d1_r*temp.d2_r2)) + new->value*new->value*temp.d3_r3); 46 new->d3_p2r = -(2*(temp.d1_p*new->d1_p*new->d1_r + new->value*( 47 new->d2_pr*temp.d1_p + new->d1_p*temp.d2_pr + 48 new->d1_r*temp.d2_p2)) + new->value*new->value*temp.d3_p2r); 49 new->d3_p2q = -(2*(temp.d1_p*new->d1_p*new->d1_q + new->value*( 50 new->d2_pq*temp.d1_p + new->d1_p*temp.d2_pq + 51 new->d1_q*temp.d2_p2)) + new->value*new->value*temp.d3_p2q); 52 new->d3_q2r = -(2*(temp.d1_q*new->d1_q*new->d1_r + new->value*( 53 new->d2_qr*temp.d1_q + new->d1_q*temp.d2_qr + 54 new->d1_r*temp.d2_q2)) + new->value*new->value*temp.d3_q2r); 55 new->d3_pq2 = -(2*(temp.d1_q*new->d1_q*new->d1_p + new->value*( 56 new->d2_pq*temp.d1_q + new->d1_q*temp.d2_pq + 57 new->d1_p*temp.d2_q2)) + new->value*new->value*temp.d3_pq2); 58 new->d3_pr2 = -(2*(temp.d1_r*new->d1_r*new->d1_p + new->value*( 59 new->d2_pr*temp.d1_r + new->d1_r*temp.d2_pr + 60 new->d1_p*temp.d2_r2)) + new->value*new->value*temp.d3_pr2); 61 new->d3_qr2 = -(2*(temp.d1_r*new->d1_r*new->d1_q + new->value*( 62 new->d2_qr*temp.d1_r + new->d1_r*temp.d2_qr + 63 new->d1_q*temp.d2_r2)) + new->value*new->value*temp.d3_qr2); 64 new->d3_pqr = -(2*(temp.d1_p*new->d1_q*new->d1_r + new->value*( 65 new->d2_qr*temp.d1_p + new->d1_q*temp.d2_pr + 66 new->d1_r*temp.d2_pq)) + new->value*new->value*temp.d3_pqr); 67 68 } 69