summaryrefslogtreecommitdiff
path: root/homeworks/hw_6_p_8.c
diff options
context:
space:
mode:
Diffstat (limited to 'homeworks/hw_6_p_8.c')
-rw-r--r--homeworks/hw_6_p_8.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/homeworks/hw_6_p_8.c b/homeworks/hw_6_p_8.c
new file mode 100644
index 0000000..56f199f
--- /dev/null
+++ b/homeworks/hw_6_p_8.c
@@ -0,0 +1,89 @@
+// compile & test w/
+// \--> gcc -I../inc/ -Wall hw_6_p_8.c ../lib/lizfcm.a -lm -o hw_6_p_8
+// \--> ./hw_6_p_8
+
+#include "lizfcm.h"
+#include <math.h>
+#include <stdio.h>
+
+double a(double t) {
+ double alpha = 0.1;
+ double beta = 0.001;
+ double p_0 = 2;
+ double p_infty = 29.75;
+
+ return p_0 * exp(t * (alpha - beta)) - p_infty;
+}
+
+double b(double t) {
+ double alpha = 0.1;
+ double beta = 0.001;
+ double p_0 = 2;
+ double p_infty = 115.35;
+
+ return p_0 * exp(t * (alpha - beta)) - p_infty;
+}
+
+double c(double t) {
+ double alpha = 0.1;
+ double beta = 0.0001;
+ double p_0 = 2;
+ double p_infty = 115.35;
+
+ return p_0 * exp(t * (alpha - beta)) - p_infty;
+}
+
+double d(double t) {
+ double alpha = 0.01;
+ double beta = 0.001;
+ double p_0 = 2;
+ double p_infty = 155.346;
+
+ return p_0 * exp(t * (alpha - beta)) - p_infty;
+}
+
+double e(double t) {
+ double alpha = 0.1;
+ double beta = 0.01;
+ double p_0 = 100;
+ double p_infty = 155.346;
+
+ return p_0 * exp(t * (alpha - beta)) - p_infty;
+}
+
+int main() {
+ uint64_t max_iterations = 1000;
+ double tolerance = 0.0000001;
+
+ Array_double *ivt_range = find_ivt_range(&a, -5.0, 3.0, 1000);
+ double approx_a = fixed_point_secant_bisection_method(
+ &a, ivt_range->data[0], ivt_range->data[1], tolerance, max_iterations);
+
+ free_vector(ivt_range);
+ ivt_range = find_ivt_range(&b, -5.0, 3.0, 1000);
+ double approx_b = fixed_point_secant_bisection_method(
+ &b, ivt_range->data[0], ivt_range->data[1], tolerance, max_iterations);
+
+ free_vector(ivt_range);
+ ivt_range = find_ivt_range(&c, -5.0, 3.0, 1000);
+ double approx_c = fixed_point_secant_bisection_method(
+ &c, ivt_range->data[0], ivt_range->data[1], tolerance, max_iterations);
+
+ free_vector(ivt_range);
+ ivt_range = find_ivt_range(&d, -5.0, 3.0, 1000);
+ double approx_d = fixed_point_secant_bisection_method(
+ &d, ivt_range->data[0], ivt_range->data[1], tolerance, max_iterations);
+
+ free_vector(ivt_range);
+ ivt_range = find_ivt_range(&e, -5.0, 3.0, 1000);
+ double approx_e = fixed_point_secant_bisection_method(
+ &e, ivt_range->data[0], ivt_range->data[1], tolerance, max_iterations);
+
+ printf("a ~ %f; P(%f) - P_infty = %f\n", approx_a, approx_a, a(approx_a));
+ printf("b ~ %f; P(%f) - P_infty = %f\n", approx_b, approx_b, b(approx_b));
+ printf("c ~ %f; P(%f) - P_infty = %f\n", approx_c, approx_c, c(approx_c));
+ printf("d ~ %f; P(%f) - P_infty = %f\n", approx_d, approx_d, d(approx_d));
+ printf("e ~ %f; P(%f) - P_infty = %f\n", approx_e, approx_e, e(approx_e));
+
+ return 0;
+}