From f2f10bd02d37a107c1fabd324819d049bf49b6ca Mon Sep 17 00:00:00 2001 From: Piotr Idzik Date: Thu, 7 Mar 2024 22:09:16 +0000 Subject: [PATCH 1/2] fix: hadnle zeros at the endpoints --- Maths/BisectionMethod.js | 9 ++++----- Maths/test/BisectionMethod.test.js | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/Maths/BisectionMethod.js b/Maths/BisectionMethod.js index 49b8c8ecc0..4539e6d466 100644 --- a/Maths/BisectionMethod.js +++ b/Maths/BisectionMethod.js @@ -23,7 +23,7 @@ const findRoot = (a, b, func, numberOfIterations) => { // Bolzano theorem const hasRoot = (a, b, func) => { - return func(a) * func(b) < 0 + return func(a) * func(b) <= 0 } if (hasRoot(a, b, func) === false) { throw Error( @@ -45,10 +45,9 @@ const findRoot = (a, b, func, numberOfIterations) => { const prod2 = fm * func(b) // Depending on the sign of the products above, decide which position will m fill (a's or b's) - if (prod1 > 0 && prod2 < 0) return findRoot(m, b, func, --numberOfIterations) - else if (prod1 < 0 && prod2 > 0) - return findRoot(a, m, func, --numberOfIterations) - else throw Error('Unexpected behavior') + if (prod2 <= 0) return findRoot(m, b, func, --numberOfIterations) + + return findRoot(a, m, func, --numberOfIterations) } export { findRoot } diff --git a/Maths/test/BisectionMethod.test.js b/Maths/test/BisectionMethod.test.js index ad865b6ad6..764b36047e 100644 --- a/Maths/test/BisectionMethod.test.js +++ b/Maths/test/BisectionMethod.test.js @@ -35,3 +35,28 @@ test('Equation f(x) = sqrt(x) + e^(2*x) - 8*x = 0, has root x = 0.93945851 in [a ) expect(Number(Number(root).toPrecision(8))).toBe(0.93945851) }) + +test('Equation f(x) = x^3 = 0, has root x = 0.0 in [a, b] = [-1.0, 1.0]', () => { + const root = findRoot( + -1.0, + 1.0, + (x) => { + return Math.pow(x, 3) + }, + 32 + ) + expect(root).toBeCloseTo(0.0, 5) +}) + +test('Throws an error when function does not change sign', () => { + expect(() => + findRoot( + -1.0, + 1.0, + (x) => { + return Math.pow(x, 2) + }, + 10 + ) + ).toThrowError() +}) From c7cda09fe0f88c84dc7f84688f7427f263852ab0 Mon Sep 17 00:00:00 2001 From: Piotr Idzik Date: Tue, 26 Mar 2024 22:02:21 +0000 Subject: [PATCH 2/2] style: use simpler syntax express polynomials Co-authored-by: appgurueu <34514239+appgurueu@users.noreply.github.com> --- Maths/test/BisectionMethod.test.js | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/Maths/test/BisectionMethod.test.js b/Maths/test/BisectionMethod.test.js index 764b36047e..4a49e8f6a4 100644 --- a/Maths/test/BisectionMethod.test.js +++ b/Maths/test/BisectionMethod.test.js @@ -1,14 +1,7 @@ import { findRoot } from '../BisectionMethod' test('Equation f(x) = x^2 - 3*x + 2 = 0, has root x = 1 in [a, b] = [0, 1.5]', () => { - const root = findRoot( - 0, - 1.5, - (x) => { - return Math.pow(x, 2) - 3 * x + 2 - }, - 8 - ) + const root = findRoot(0, 1.5, (x) => x ** 2 - 3 * x + 2, 8) expect(root).toBe(0.9990234375) }) @@ -37,26 +30,10 @@ test('Equation f(x) = sqrt(x) + e^(2*x) - 8*x = 0, has root x = 0.93945851 in [a }) test('Equation f(x) = x^3 = 0, has root x = 0.0 in [a, b] = [-1.0, 1.0]', () => { - const root = findRoot( - -1.0, - 1.0, - (x) => { - return Math.pow(x, 3) - }, - 32 - ) + const root = findRoot(-1.0, 1.0, (x) => x ** 3, 32) expect(root).toBeCloseTo(0.0, 5) }) test('Throws an error when function does not change sign', () => { - expect(() => - findRoot( - -1.0, - 1.0, - (x) => { - return Math.pow(x, 2) - }, - 10 - ) - ).toThrowError() + expect(() => findRoot(-1.0, 1.0, (x) => x ** 2, 10)).toThrowError() }) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy