31 lines
538 B
C++
31 lines
538 B
C++
#include <complex>
|
|
#include "nr.h"
|
|
using namespace std;
|
|
|
|
void NR::hypser(const complex<DP> &a, const complex<DP> &b,
|
|
const complex<DP> &c, const complex<DP> &z,
|
|
complex<DP> &series, complex<DP> &deriv)
|
|
{
|
|
int n;
|
|
complex<DP> aa,bb,cc,fac,temp;
|
|
|
|
deriv=0.0;
|
|
fac=1.0;
|
|
temp=fac;
|
|
aa=a;
|
|
bb=b;
|
|
cc=c;
|
|
for (n=1;n<=1000;n++) {
|
|
fac *= ((aa*bb)/cc);
|
|
deriv += fac;
|
|
fac *= ((1.0/n)*z);
|
|
series=temp+fac;
|
|
if (series == temp) return;
|
|
temp=series;
|
|
aa += 1.0;
|
|
bb += 1.0;
|
|
cc += 1.0;
|
|
}
|
|
nrerror("convergence failure in hypser");
|
|
}
|