about summary refs log tree commit diff
path: root/usth/MATH2.2/hw/cubic
diff options
context:
space:
mode:
Diffstat (limited to 'usth/MATH2.2/hw/cubic')
-rwxr-xr-xusth/MATH2.2/hw/cubic25
1 files changed, 25 insertions, 0 deletions
diff --git a/usth/MATH2.2/hw/cubic b/usth/MATH2.2/hw/cubic
new file mode 100755
index 0000000..ca24739
--- /dev/null
+++ b/usth/MATH2.2/hw/cubic
@@ -0,0 +1,25 @@
+#!/usr/bin/env octave
+disp ("Solve quadratic equation a*x^3 + b*x^2 + c*x + d = 0");
+a = input ("a = ");
+while (a == 0)
+  disp ("a must be nonzero");
+  a = input ("a = ");
+end
+b = input ("b = ");
+c = input ("c = ");
+d = input ("d = ");
+
+% Using the trigonometric and hyperbolic solutions on Wikipedia:
+% https://en.wikipedia.org/wiki/Cubic_function
+p = (3*a*c - b^2) / (3*a^2);
+q = (2*b^3 - 9*a*b*c + 27*a^2*d) / (27*a^3);
+if (p == 0)
+  disp ("The given cubic equation has only one distinct solution:");
+  x = cbrt(-q) - b/a/3
+else
+  r = 2 * sqrt(-p/3);
+  disp ("The three solutions of the given quadratic equation are:");
+  for k = 0 : 2
+    x = r * cos((acos(3*q/p/r) - 2*pi*k) / 3) - b/a/3
+  end
+end