Changes in / [de97440:68b8734] in sasmodels
- Files:
-
- 10 added
- 7 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/bessel.py
rcbd37a7 ra5af4e1 78 78 79 79 Iq = """ 80 return 2.0*j1(q)/q;80 return J1(q); 81 81 """ 82 82 -
sasmodels/models/lib/j1_cephes.c
re2af2a9 ra5af4e1 39 39 Copyright 1984, 1987, 1989, 2000 by Stephen L. Moshier 40 40 */ 41 double j1(double );41 double J1(double ); 42 42 43 double j1(double x) {43 double J1(double x) { 44 44 45 45 //Cephes double pression function … … 48 48 double w, z, p, q, xn; 49 49 50 const double DR1 = 5.78318596294678452118E0;51 const double DR2 = 3.04712623436620863991E1;52 50 const double Z1 = 1.46819706421238932572E1; 53 51 const double Z2 = 4.92184563216946036703E1; 54 52 const double THPIO4 = 2.35619449019234492885; 55 53 const double SQ2OPI = 0.79788456080286535588; 56 57 double RP[8] = {58 -8.99971225705559398224E8,59 4.52228297998194034323E11,60 -7.27494245221818276015E13,61 3.68295732863852883286E15,62 0.0,63 0.0,64 0.0,65 0.066 };67 68 double RQ[8] = {69 /* 1.00000000000000000000E0,*/70 6.20836478118054335476E2,71 2.56987256757748830383E5,72 8.35146791431949253037E7,73 2.21511595479792499675E10,74 4.74914122079991414898E12,75 7.84369607876235854894E14,76 8.95222336184627338078E16,77 5.32278620332680085395E18,78 };79 80 double PP[8] = {81 7.62125616208173112003E-4,82 7.31397056940917570436E-2,83 1.12719608129684925192E0,84 5.11207951146807644818E0,85 8.42404590141772420927E0,86 5.21451598682361504063E0,87 1.00000000000000000254E0,88 0.0,89 };90 double PQ[8] = {91 5.71323128072548699714E-4,92 6.88455908754495404082E-2,93 1.10514232634061696926E0,94 5.07386386128601488557E0,95 8.39985554327604159757E0,96 5.20982848682361821619E0,97 9.99999999999999997461E-1,98 0.0,99 };100 101 double QP[8] = {102 5.10862594750176621635E-2,103 4.98213872951233449420E0,104 7.58238284132545283818E1,105 3.66779609360150777800E2,106 7.10856304998926107277E2,107 5.97489612400613639965E2,108 2.11688757100572135698E2,109 2.52070205858023719784E1,110 };111 112 double QQ[8] = {113 /* 1.00000000000000000000E0,*/114 7.42373277035675149943E1,115 1.05644886038262816351E3,116 4.98641058337653607651E3,117 9.56231892404756170795E3,118 7.99704160447350683650E3,119 2.82619278517639096600E3,120 3.36093607810698293419E2,121 0.0,122 };123 54 124 55 w = x; … … 129 60 { 130 61 z = x * x; 131 w = polevl ( z, RP, 3 ) / p1evl( z, RQ, 8 );62 w = polevlRP( z, 3 ) / p1evlRQ( z, 8 ); 132 63 w = w * x * (z - Z1) * (z - Z2); 133 64 return( w ); … … 136 67 w = 5.0/x; 137 68 z = w * w; 138 p = polevl( z, PP, 6)/polevl( z, PQ, 6 ); 139 q = polevl( z, QP, 7)/p1evl( z, QQ, 7 ); 69 70 p = polevlPP( z, 6)/polevlPQ( z, 6 ); 71 q = polevlQP( z, 7)/p1evlQQ( z, 7 ); 72 140 73 xn = x - THPIO4; 141 74 … … 155 88 156 89 157 double JP[8] = {158 -4.878788132172128E-009,159 6.009061827883699E-007,160 -4.541343896997497E-005,161 1.937383947804541E-003,162 -3.405537384615824E-002,163 0.0,164 0.0,165 0.0166 };167 168 double MO1[8] = {169 6.913942741265801E-002,170 -2.284801500053359E-001,171 3.138238455499697E-001,172 -2.102302420403875E-001,173 5.435364690523026E-003,174 1.493389585089498E-001,175 4.976029650847191E-006,176 7.978845453073848E-001177 };178 179 double PH1[8] = {180 -4.497014141919556E+001,181 5.073465654089319E+001,182 -2.485774108720340E+001,183 7.222973196770240E+000,184 -1.544842782180211E+000,185 3.503787691653334E-001,186 -1.637986776941202E-001,187 3.749989509080821E-001188 };189 190 90 xx = x; 191 91 if( xx < 0 ) … … 195 95 { 196 96 z = xx * xx; 197 p = (z-Z1) * xx * polevl ( z, JP, 4 );97 p = (z-Z1) * xx * polevlJP( z, 4 ); 198 98 return( p ); 199 99 } … … 202 102 w = sqrt(q); 203 103 204 p = w * polevl ( q, MO1, 7);104 p = w * polevlMO1( q, 7); 205 105 w = q*q; 206 xn = q * polevl ( w, PH1, 7) - THPIO4F;106 xn = q * polevlPH1( w, 7) - THPIO4F; 207 107 p = p * cos(xn + xx); 208 108 … … 210 110 #endif 211 111 } 212 -
sasmodels/models/lib/polevl.c
re2af2a9 r3b12dea 51 51 */ 52 52 53 double polevl( double x, double coef[8], int N ); 54 double p1evl( double x, double coef[8], int N ); 55 56 double polevl( double x, double coef[8], int N ) { 57 58 int i = 0; 59 double ans = coef[i]; 60 61 while (i < N) { 62 i++; 63 ans = ans * x + coef[i]; 64 } 65 66 return ans ; 67 68 } 53 double polevlRP(double x, int N ) { 54 55 double coef[8] = { 56 -8.99971225705559398224E8, 57 4.52228297998194034323E11, 58 -7.27494245221818276015E13, 59 3.68295732863852883286E15, 60 0.0, 61 0.0, 62 0.0, 63 0.0 }; 64 65 int i = 0; 66 double ans = coef[i]; 67 68 while (i < N) { 69 i++; 70 ans = ans * x + coef[i]; 71 } 72 return ans ; 73 } 74 75 double polevlRQ(double x, int N ) { 76 77 double coef[8] = { 78 6.20836478118054335476E2, 79 2.56987256757748830383E5, 80 8.35146791431949253037E7, 81 2.21511595479792499675E10, 82 4.74914122079991414898E12, 83 7.84369607876235854894E14, 84 8.95222336184627338078E16, 85 5.32278620332680085395E18 86 }; 87 88 int i = 0; 89 double ans = coef[i]; 90 91 while (i < N) { 92 i++; 93 ans = ans * x + coef[i]; 94 } 95 return ans ; 96 } 97 98 double polevlPP(double x, int N ) { 99 100 double coef[8] = { 101 7.62125616208173112003E-4, 102 7.31397056940917570436E-2, 103 1.12719608129684925192E0, 104 5.11207951146807644818E0, 105 8.42404590141772420927E0, 106 5.21451598682361504063E0, 107 1.00000000000000000254E0, 108 0.0} ; 109 110 int i = 0; 111 double ans = coef[i]; 112 113 while (i < N) { 114 i++; 115 ans = ans * x + coef[i]; 116 } 117 return ans ; 118 } 119 120 double polevlPQ(double x, int N ) { 121 122 double coef[8] = { 123 5.71323128072548699714E-4, 124 6.88455908754495404082E-2, 125 1.10514232634061696926E0, 126 5.07386386128601488557E0, 127 8.39985554327604159757E0, 128 5.20982848682361821619E0, 129 9.99999999999999997461E-1, 130 0.0 }; 131 132 int i = 0; 133 double ans = coef[i]; 134 135 while (i < N) { 136 i++; 137 ans = ans * x + coef[i]; 138 } 139 return ans ; 140 } 141 142 double polevlQP(double x, int N ) { 143 144 double coef[8] = { 145 5.10862594750176621635E-2, 146 4.98213872951233449420E0, 147 7.58238284132545283818E1, 148 3.66779609360150777800E2, 149 7.10856304998926107277E2, 150 5.97489612400613639965E2, 151 2.11688757100572135698E2, 152 2.52070205858023719784E1 }; 153 154 int i = 0; 155 double ans = coef[i]; 156 157 while (i < N) { 158 i++; 159 ans = ans * x + coef[i]; 160 } 161 return ans ; 162 163 } 164 165 double polevlQQ(double x, int N ) { 166 167 double coef[8] = { 168 7.42373277035675149943E1, 169 1.05644886038262816351E3, 170 4.98641058337653607651E3, 171 9.56231892404756170795E3, 172 7.99704160447350683650E3, 173 2.82619278517639096600E3, 174 3.36093607810698293419E2, 175 0.0 }; 176 177 int i = 0; 178 double ans = coef[i]; 179 180 while (i < N) { 181 i++; 182 ans = ans * x + coef[i]; 183 } 184 return ans ; 185 186 } 187 188 double polevlJP( double x, int N ) { 189 double coef[8] = { 190 -4.878788132172128E-009, 191 6.009061827883699E-007, 192 -4.541343896997497E-005, 193 1.937383947804541E-003, 194 -3.405537384615824E-002, 195 0.0, 196 0.0, 197 0.0 198 }; 199 200 int i = 0; 201 double ans = coef[i]; 202 203 while (i < N) { 204 i++; 205 ans = ans * x + coef[i]; 206 } 207 return ans ; 208 209 } 210 211 double polevlMO1( double x, int N ) { 212 double coef[8] = { 213 6.913942741265801E-002, 214 -2.284801500053359E-001, 215 3.138238455499697E-001, 216 -2.102302420403875E-001, 217 5.435364690523026E-003, 218 1.493389585089498E-001, 219 4.976029650847191E-006, 220 7.978845453073848E-001 221 }; 222 223 int i = 0; 224 double ans = coef[i]; 225 226 while (i < N) { 227 i++; 228 ans = ans * x + coef[i]; 229 } 230 return ans ; 231 } 232 233 double polevlPH1( double x, int N ) { 234 235 double coef[8] = { 236 -4.497014141919556E+001, 237 5.073465654089319E+001, 238 -2.485774108720340E+001, 239 7.222973196770240E+000, 240 -1.544842782180211E+000, 241 3.503787691653334E-001, 242 -1.637986776941202E-001, 243 3.749989509080821E-001 244 }; 245 246 int i = 0; 247 double ans = coef[i]; 248 249 while (i < N) { 250 i++; 251 ans = ans * x + coef[i]; 252 } 253 return ans ; 254 } 255 256 /*double polevl( double x, double coef[8], int N ) { 257 258 int i = 0; 259 double ans = coef[i]; 260 261 while (i < N) { 262 i++; 263 ans = ans * x + coef[i]; 264 } 265 266 return ans ; 267 268 }*/ 69 269 70 270 /* p1evl() */ … … 74 274 */ 75 275 76 double p1evl( double x, double coef[8], int N ) { 77 int i=0; 78 double ans = x+coef[i]; 79 80 while (i < N-1) { 81 i++; 82 ans = ans*x + coef[i]; 83 } 84 85 return( ans ); 86 87 } 276 double p1evlRP( double x, int N ) { 277 double coef[8] = { 278 -8.99971225705559398224E8, 279 4.52228297998194034323E11, 280 -7.27494245221818276015E13, 281 3.68295732863852883286E15, 282 0.0, 283 0.0, 284 0.0, 285 0.0 }; 286 287 int i=0; 288 double ans = x+coef[i]; 289 290 while (i < N-1) { 291 i++; 292 ans = ans*x + coef[i]; 293 } 294 295 return( ans ); 296 297 } 298 299 double p1evlRQ( double x, int N ) { 300 //1: RQ 301 double coef[8] = { 302 6.20836478118054335476E2, 303 2.56987256757748830383E5, 304 8.35146791431949253037E7, 305 2.21511595479792499675E10, 306 4.74914122079991414898E12, 307 7.84369607876235854894E14, 308 8.95222336184627338078E16, 309 5.32278620332680085395E18}; 310 311 int i=0; 312 double ans = x+coef[i]; 313 314 while (i < N-1) { 315 i++; 316 ans = ans*x + coef[i]; 317 } 318 319 return( ans ); 320 } 321 322 double p1evlPP( double x, int N ) { 323 //3 : PP 324 double coef[8] = { 325 7.62125616208173112003E-4, 326 7.31397056940917570436E-2, 327 1.12719608129684925192E0, 328 5.11207951146807644818E0, 329 8.42404590141772420927E0, 330 5.21451598682361504063E0, 331 1.00000000000000000254E0, 332 0.0}; 333 334 int i=0; 335 double ans = x+coef[i]; 336 337 while (i < N-1) { 338 i++; 339 ans = ans*x + coef[i]; 340 } 341 342 return( ans ); 343 } 344 345 double p1evlPQ( double x, int N ) { 346 //4: PQ 347 double coef[8] = { 348 5.71323128072548699714E-4, 349 6.88455908754495404082E-2, 350 1.10514232634061696926E0, 351 5.07386386128601488557E0, 352 8.39985554327604159757E0, 353 5.20982848682361821619E0, 354 9.99999999999999997461E-1, 355 0.0}; 356 357 int i=0; 358 double ans = x+coef[i]; 359 360 while (i < N-1) { 361 i++; 362 ans = ans*x + coef[i]; 363 } 364 365 return( ans ); 366 } 367 368 double p1evlQP( double x, int N ) { 369 //5: QP 370 double coef[8] = { 371 5.10862594750176621635E-2, 372 4.98213872951233449420E0, 373 7.58238284132545283818E1, 374 3.66779609360150777800E2, 375 7.10856304998926107277E2, 376 5.97489612400613639965E2, 377 2.11688757100572135698E2, 378 2.52070205858023719784E1 }; 379 380 int i=0; 381 double ans = x+coef[i]; 382 383 while (i < N-1) { 384 i++; 385 ans = ans*x + coef[i]; 386 } 387 388 return( ans ); 389 } 390 391 double p1evlQQ( double x, int N ) { 392 double coef[8] = { 393 7.42373277035675149943E1, 394 1.05644886038262816351E3, 395 4.98641058337653607651E3, 396 9.56231892404756170795E3, 397 7.99704160447350683650E3, 398 2.82619278517639096600E3, 399 3.36093607810698293419E2, 400 0.0}; 401 402 int i=0; 403 double ans = x+coef[i]; 404 405 while (i < N-1) { 406 i++; 407 ans = ans*x + coef[i]; 408 } 409 410 return( ans ); 411 412 } 413 414 double p1evlJP( double x, int N ) { 415 double coef[8] = { 416 -4.878788132172128E-009, 417 6.009061827883699E-007, 418 -4.541343896997497E-005, 419 1.937383947804541E-003, 420 -3.405537384615824E-002, 421 0.0, 422 0.0, 423 0.0}; 424 425 int i=0; 426 double ans = x+coef[i]; 427 428 while (i < N-1) { 429 i++; 430 ans = ans*x + coef[i]; 431 } 432 433 return( ans ); 434 } 435 436 double p1evlMO1( double x, int N ) { 437 double coef[8] = { 438 6.913942741265801E-002, 439 -2.284801500053359E-001, 440 3.138238455499697E-001, 441 -2.102302420403875E-001, 442 5.435364690523026E-003, 443 1.493389585089498E-001, 444 4.976029650847191E-006, 445 7.978845453073848E-001}; 446 447 int i=0; 448 double ans = x+coef[i]; 449 450 while (i < N-1) { 451 i++; 452 ans = ans*x + coef[i]; 453 } 454 455 return( ans ); 456 457 } 458 459 double p1evlPH1( double x, int N ) { 460 double coef[8] = { 461 -4.497014141919556E+001, 462 5.073465654089319E+001, 463 -2.485774108720340E+001, 464 7.222973196770240E+000, 465 -1.544842782180211E+000, 466 3.503787691653334E-001, 467 -1.637986776941202E-001, 468 3.749989509080821E-001}; 469 int i=0; 470 double ans = x+coef[i]; 471 472 while (i < N-1) { 473 i++; 474 ans = ans*x + coef[i]; 475 } 476 477 return( ans ); 478 } 479 480 /*double p1evl( double x, double coef[8], int N ) { 481 int i=0; 482 double ans = x+coef[i]; 483 484 while (i < N-1) { 485 i++; 486 ans = ans*x + coef[i]; 487 } 488 489 return( ans ); 490 491 }*/
Note: See TracChangeset
for help on using the changeset viewer.