aboutsummaryrefslogtreecommitdiffstats
path: root/buch/papers/0f1/listings/kettenbruchIterativ.c
diff options
context:
space:
mode:
authorNicolas Tobler <nicolas.tobler@ost.ch>2022-08-03 20:37:12 +0200
committerNicolas Tobler <nicolas.tobler@ost.ch>2022-08-03 20:37:12 +0200
commite08392d4bacb9a54c3ab755fa6445514749b608f (patch)
tree67af5a4a6ed541b1b425de89fd05c2a74a265571 /buch/papers/0f1/listings/kettenbruchIterativ.c
parentimproved Einleitung (diff)
parentMerge pull request #39 from NaoPross/master (diff)
downloadSeminarSpezielleFunktionen-e08392d4bacb9a54c3ab755fa6445514749b608f.tar.gz
SeminarSpezielleFunktionen-e08392d4bacb9a54c3ab755fa6445514749b608f.zip
Merge branch 'master' of https://github.com/AndreasFMueller/SeminarSpezielleFunktionen
Diffstat (limited to '')
-rw-r--r--buch/papers/0f1/listings/kettenbruchIterativ.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/buch/papers/0f1/listings/kettenbruchIterativ.c b/buch/papers/0f1/listings/kettenbruchIterativ.c
new file mode 100644
index 0000000..d897b8f
--- /dev/null
+++ b/buch/papers/0f1/listings/kettenbruchIterativ.c
@@ -0,0 +1,53 @@
+/**
+ * @brief Calculates the Hypergeometric Function 0F1(;b;z)
+ * @param b0 in 0F1(;b0;z)
+ * @param z in 0F1(;b0;z)
+ * @param n number of itertions (precision)
+ * @return Result
+ */
+static double fractionRekursion0f1(const double c, const double z, unsigned int n)
+{
+ //declaration
+ double a = 0.0;
+ double b = 0.0;
+ double Ak = 0.0;
+ double Bk = 0.0;
+ double Ak_1 = 0.0;
+ double Bk_1 = 0.0;
+ double Ak_2 = 0.0;
+ double Bk_2 = 0.0;
+
+ for (unsigned int k = 0; k <= n; ++k)
+ {
+ if (k == 0)
+ {
+ a = 1.0; //a0
+ //recursion fomula for A0, B0
+ Ak = a;
+ Bk = 1.0;
+ }
+ else if (k == 1)
+ {
+ a = 1.0; //a1
+ b = z/c; //b1
+ //recursion fomula for A1, B1
+ Ak = a * Ak_1 + b * 1.0;
+ Bk = a * Bk_1;
+ }
+ else
+ {
+ a = 1 + (z / (k * ((k - 1) + c)));//ak
+ b = -(z / (k * ((k - 1) + c))); //bk
+ //recursion fomula for Ak, Bk
+ Ak = a * Ak_1 + b * Ak_2;
+ Bk = a * Bk_1 + b * Bk_2;
+ }
+ //save old values
+ Ak_2 = Ak_1;
+ Bk_2 = Bk_1;
+ Ak_1 = Ak;
+ Bk_1 = Bk;
+ }
+ //approximation fraction
+ return Ak/Bk;
+}