about summary refs log tree commit diff
path: root/usth/MATH2.4/hw/cubic
diff options
context:
space:
mode:
authorNguyễn Gia Phong <vn.mcsinyx@gmail.com>2020-02-16 14:26:55 +0700
committerNguyễn Gia Phong <vn.mcsinyx@gmail.com>2020-02-16 14:26:55 +0700
commit82e6cf7d1046d6cee16f7e8b044ec33e7ec6c4b7 (patch)
treef7b7ae0bce69070c47a1b31a85bd2bc69dfecf09 /usth/MATH2.4/hw/cubic
parent29d1001e2e21eff289bff23412e284c8b2e44595 (diff)
downloadcp-82e6cf7d1046d6cee16f7e8b044ec33e7ec6c4b7.tar.gz
[usth] Numerical Method is MATH2.4
Diffstat (limited to 'usth/MATH2.4/hw/cubic')
-rwxr-xr-xusth/MATH2.4/hw/cubic25
1 files changed, 25 insertions, 0 deletions
diff --git a/usth/MATH2.4/hw/cubic b/usth/MATH2.4/hw/cubic
new file mode 100755
index 0000000..ca24739
--- /dev/null
+++ b/usth/MATH2.4/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