From ec2d633de85d800b829392d2adc64fe4d87d98b3 Mon Sep 17 00:00:00 2001 From: William Ball Date: Wed, 23 Jun 2021 15:16:41 -0400 Subject: [PATCH] added rust code --- .gitignore | 1 + fractal_dimension/bai_finch_rust/.gitignore | 1 + fractal_dimension/bai_finch_rust/Cargo.lock | 529 ++++++++++++++++++ fractal_dimension/bai_finch_rust/Cargo.toml | 13 + .../bai_finch_rust/src/complex.rs | 0 fractal_dimension/bai_finch_rust/src/main.rs | 169 ++++++ 6 files changed, 713 insertions(+) create mode 100644 fractal_dimension/bai_finch_rust/.gitignore create mode 100644 fractal_dimension/bai_finch_rust/Cargo.lock create mode 100644 fractal_dimension/bai_finch_rust/Cargo.toml create mode 100644 fractal_dimension/bai_finch_rust/src/complex.rs create mode 100644 fractal_dimension/bai_finch_rust/src/main.rs diff --git a/.gitignore b/.gitignore index be426cc..a9ef26f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ ./**/.ipynb_checkpoints/* +./**/target/* diff --git a/fractal_dimension/bai_finch_rust/.gitignore b/fractal_dimension/bai_finch_rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/fractal_dimension/bai_finch_rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/fractal_dimension/bai_finch_rust/Cargo.lock b/fractal_dimension/bai_finch_rust/Cargo.lock new file mode 100644 index 0000000..54b4e49 --- /dev/null +++ b/fractal_dimension/bai_finch_rust/Cargo.lock @@ -0,0 +1,529 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "addr2line" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a2e47a1fbe209ee101dd6d61285226744c6c8d3c21c8dc878ba6cb9f467f3a" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "approx" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "backtrace" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7815ea54e4d821e791162e078acbebfd6d8c8939cd559c9335dceb1c8ca7282" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "bai_finch" +version = "0.1.0" +dependencies = [ + "gad", + "nalgebra", + "num", + "peroxide", +] + +[[package]] +name = "cc" +version = "1.0.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a72c244c1ff497a746a7e1fb3d14bd08420ecda70c8f25c7112f2781652d787" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "crossbeam-channel" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +dependencies = [ + "cfg-if", + "lazy_static", +] + +[[package]] +name = "gad" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b94905d25b4e536e7622e6cb447d722bae8fb0f2dd65eb2196c18e40bf54d1" +dependencies = [ + "backtrace", + "id-arena", + "num", + "serde", + "thiserror", +] + +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4075386626662786ddb0ec9081e7c7eeb1ba31951f447ca780ef9f5d568189" + +[[package]] +name = "hermit-abi" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +dependencies = [ + "libc", +] + +[[package]] +name = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6" + +[[package]] +name = "libm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" + +[[package]] +name = "matrixmultiply" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a8a15b776d9dfaecd44b03c5828c2199cddff5247215858aac14624f8d6b741" +dependencies = [ + "num_cpus", + "once_cell", + "rawpointer", + "thread-tree", +] + +[[package]] +name = "memchr" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "nalgebra" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "462fffe4002f4f2e1f6a9dcf12cc1a6fc0e15989014efc02a941d3e0f5dc2120" +dependencies = [ + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "num-complex" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +dependencies = [ + "num-traits", + "serde", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a38f2be3697a57b4060074ff41b44c16870d916ad7877c17696e063257482bc7" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" + +[[package]] +name = "order-stat" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efa535d5117d3661134dbf1719b6f0ffe06f2375843b13935db186cd094105eb" + +[[package]] +name = "paste" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf547ad0c65e31259204bd90935776d1c693cec2f4ff7abb7a1bbbd40dfe58" + +[[package]] +name = "peroxide" +version = "0.30.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acb182c4e420fa22bc0a6a9eecb4162c744d8262b7ce238a424aff7fd301735c" +dependencies = [ + "matrixmultiply", + "order-stat", + "peroxide-ad", + "puruspe", + "rand", + "rand_distr", +] + +[[package]] +name = "peroxide-ad" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6fba8ff3f40b67996f7c745f699babaa3e57ef5c8178ec999daf7eedc51dc8c" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" + +[[package]] +name = "proc-macro2" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "puruspe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b7e158a385023d209d6d5f2585c4b468f6dcb3dd5aca9b75c4f1678c05bb375" + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_distr" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "051b398806e42b9cd04ad9ec8f81e355d0a382c543ac6672c62f5a5b452ef142" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rustc-demangle" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dead70b0b5e03e9c814bcb6b01e03e68f7c57a80aa48c72ec92152ab3e818d49" + +[[package]] +name = "serde" +version = "1.0.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "simba" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", +] + +[[package]] +name = "syn" +version = "1.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "thiserror" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa6f76457f59514c7eeb4e59d891395fab0b2fd1d40723ae737d64153392e9c6" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a36768c0fbf1bb15eca10defa29526bda730a2376c2ab4393ccfa16fb1a318d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread-tree" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd15110864dc0eccbd281d13c15a5863f7739a6fbcf710190a6d13e797aa1a57" +dependencies = [ + "crossbeam-channel", +] + +[[package]] +name = "typenum" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" diff --git a/fractal_dimension/bai_finch_rust/Cargo.toml b/fractal_dimension/bai_finch_rust/Cargo.toml new file mode 100644 index 0000000..d3ba21d --- /dev/null +++ b/fractal_dimension/bai_finch_rust/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "bai_finch" +version = "0.1.0" +authors = ["William Ball "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +num = "0.4.0" +nalgebra = "0.27.1" +peroxide = "0.30" +gad = "0.2.0" diff --git a/fractal_dimension/bai_finch_rust/src/complex.rs b/fractal_dimension/bai_finch_rust/src/complex.rs new file mode 100644 index 0000000..e69de29 diff --git a/fractal_dimension/bai_finch_rust/src/main.rs b/fractal_dimension/bai_finch_rust/src/main.rs new file mode 100644 index 0000000..a88f2e3 --- /dev/null +++ b/fractal_dimension/bai_finch_rust/src/main.rs @@ -0,0 +1,169 @@ +use gad::prelude::*; +// use gad::{arith::ArithAlgebra, core::CoreAlgebra, error::Result, prelude::GradientStore, Graph1}; +use nalgebra::{SMatrix, SVector}; +use num::Complex; + +type F = f64; +type Matrix2x2 = SMatrix, 2, 2>; + +fn sum( + g: &mut Graph1, + ar: &Value, + ai: &Value, + br: &Value, + bi: &Value, +) -> Result<(Value, Value)> { + Ok((g.add(ar, br)?, g.add(ai, bi)?)) +} + +fn product( + g: &mut Graph1, + ar: &Value, + ai: &Value, + br: &Value, + bi: &Value, +) -> Result<(Value, Value)> { + let t1 = g.mul(ar, br)?; + let t2 = g.mul(ai, bi)?; + let t3 = g.sub(&t1, &t2)?; + + let s1 = g.mul(ar, bi)?; + let s2 = g.mul(ai, br)?; + let s3 = g.add(&s1, &s2)?; + + Ok((t3, s3)) +} + +fn division( + g: &mut Graph1, + ar: &Value, + ai: &Value, + br: &Value, + bi: &Value, +) -> Result<(Value, Value)> { + let numerator1 = { + let t1 = g.mul(ar, br)?; + let t2 = g.mul(ai, bi)?; + g.add(&t1, &t2)? + }; + let denominator1 = { + let t1 = g.mul(br, br)?; + let t2 = g.mul(bi, bi)?; + g.add(&t1, &t2)? + }; + + let numerator2 = { + let t1 = g.mul(ar, bi)?; + let t2 = g.mul(ai, br)?; + g.sub(&t1, &t2)? + }; + let denominator2 = { + let t1 = g.mul(br, br)?; + let t2 = g.mul(bi, bi)?; + g.add(&t1, &t2)? + }; + + let f1 = g.div(&numerator1, &denominator1)?; + let f2 = g.div(&numerator2, &denominator2)?; + + Ok((f1, f2)) +} + +fn mobius_derivative(mat: Matrix2x2) -> Result> { + let mut g = Graph1::new(); + let x = g.variable(0.0); + let y = g.variable(0.0); + let a11r = g.constant(mat[(0, 0)].re); + let a12r = g.constant(mat[(0, 1)].re); + let a21r = g.constant(mat[(1, 0)].re); + let a22r = g.constant(mat[(1, 1)].re); + + let a11i = g.constant(mat[(0, 0)].im); + let a12i = g.constant(mat[(0, 1)].im); + let a21i = g.constant(mat[(1, 0)].im); + let a22i = g.constant(mat[(1, 1)].im); + + let (numeratorr, numeratori) = { + let (prodr, prodi) = product(&mut g, &x, &y, &a11r, &a11i)?; + sum(&mut g, &a12r, &a12i, &prodr, &prodi)? + }; + + let (denominatorr, denominatori) = { + let (prodr, prodi) = product(&mut g, &x, &y, &a21r, &a21i)?; + sum(&mut g, &a22r, &a22i, &prodr, &prodi)? + }; + + let (resultr, resulti) = division(&mut g, &numeratorr, &numeratori, &denominatorr, &denominatori)?; + + let x = x.gid()?; + + let gradients1 = g.evaluate_gradients(resultr.gid()?, 1f64)?; + let gradients2 = g.evaluate_gradients(resulti.gid()?, 1f64)?; + + let du_dx = gradients1.get(x).unwrap(); + let dv_dx = gradients2.get(x).unwrap(); + + Ok(Complex::new(*du_dx, -*dv_dx)) +} + +fn power_method( + vec: SVector, N>, + mat: SMatrix, N, N>, + iterations: usize, +) -> Complex { + let mut current = vec; + let mut previous = vec; + for _ in 0..iterations { + previous = current; + current = mat * current; + println!("current guess: {}", current[0] / previous[0]); + } + + current[0] / previous[0] +} + +fn secant_method(f: fn(F) -> F, x0: F, x1: F, accuracy: F, iterations: usize) -> F { + let mut x0 = x0; + let mut x1 = x1; + let mut y0 = f(x0); + let mut y1 = f(x1); + let mut count = 0; + + while y1.abs() >= accuracy && count < iterations { + let new_x = x0 - y0 * (x1 - x0) / (y1 - y0); + x0 = x1; + x1 = new_x; + y0 = y1; + y1 = f(x1); + println!("f({}) =\t{}", x1, y1); + count += 1; + } + x0 +} + +fn main() { + // let g = Matrix2x2::new( + // Complex::new(2.0 / 12.0, -2.0 / 12.0), + // Complex::new(-1.0 / 12.0, -5.0 / 12.0), + // Complex::new(4.0 / 12.0, -4.0 / 12.0), + // Complex::new(-2.0 / 12.0, -10.0 / 12.0), + // ); + + let mobius = Matrix2x2::new( + Complex::new(2.0, 0.0), + Complex::new(-3.0, 0.0), + Complex::new(4.0, 0.0), + Complex::new(0.0, -5.0), + ); + + println!("{}", mobius_derivative(mobius).unwrap()); + + // let r = Matrix2x2::new( + // Complex::new(-6.0 / 12.0, 8.0 / 12.0), + // Complex::new(0.0, 11.0 / 12.0), + // Complex::new(0.0, 4.0 / 12.0), + // Complex::new(-6.0 / 12.0, -8.0 / 12.0), + // ); + + // secant_method(|x: F| x.cos() - x, 0.0, 1.0, std::f64::EPSILON, 1000); +}