UNPKG

numerical-methods

Version:

A library that I made while studying Computer Science at UFPB. Documentation's available through TypeScript.

2 lines (1 loc) 4.84 kB
"use strict";var T=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var g=(s,t)=>T(s,"name",{value:t,configurable:!0});var S=(s,t)=>{for(var n in t)T(s,n,{get:t[n],enumerable:!0})},V=(s,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of k(t))!O.call(s,r)&&r!==n&&T(s,r,{get:()=>t[r],enumerable:!(i=X(t,r))||i.enumerable});return s};var _=s=>V(T({},"__esModule",{value:!0}),s);var j={};S(j,{bisection:()=>R,falsePosition:()=>F,newtonRaphson:()=>Z,newtonRaphsonParams:()=>z,secant:()=>$,zerosFunctionParams:()=>v});module.exports=_(j);var o=require("@hyoretsu/utils"),c=require("mathjs");var Y={bail:"boolean",conditionsWhitelist:"[boolean,boolean]",maxIterations:"number",origFunc:"string",relativeError:"boolean"},v={func:"string",interval:"[number,number]",precision:"number",options:Y},R=g(({func:s,interval:[t,n],precision:i,options:{bail:r=!1,conditionsWhitelist:b=[!0,!0],maxIterations:p=Number.POSITIVE_INFINITY,origFunc:m,relativeError:e}={}})=>{i===0&&(i=1e-5);let d=[],u=-1,l=typeof e=="number"&&e;for(;;){let a=[t,n],h=[(0,c.evaluate)(s,{x:t}),(0,c.evaluate)(s,{x:n})],f=(t+n)/2,I=(0,c.evaluate)(s,{x:f});u+=1;let P=Math.abs(n-t),N=Math.abs(I);Math.sign(I)===Math.sign(h[0])?(e&&!l&&(l=t),t=f):(e&&!l&&(l=n),n=f),d.push({iteration:u,interval:a.map(y=>(0,o.fixNumber)(y)),results:h.map(y=>(0,o.fixNumber)(y)),x:(0,o.fixNumber)(f),...m&&{y:(0,c.evaluate)(m,{x:f})},...e&&l!==0&&{relativeError:(0,o.fixNumber)(Math.abs(f-l)/Math.abs(f))},condition1:(0,o.fixNumber)(P),condition2:(0,o.fixNumber)(N)});let w=!b[0]||P<i,x=!b[1]||N<i;if(!r&&w&&x||r&&(w||x)||u>=p)break}let M=Math.ceil((Math.log10(n-t)-Math.log10(i))/Math.log10(2));if(u<M&&p===Number.POSITIVE_INFINITY)throw new Error(`Something went wrong, less iterations than the minimum (${M}) were done.`);return{result:{iterations:u,interval:[t.toPrecision(21),n.toPrecision(21)]},details:d}},"bisection"),F=g(({func:s,interval:[t,n],precision:i,options:{bail:r=!1,conditionsWhitelist:b=[!0,!0],maxIterations:p=Number.POSITIVE_INFINITY,origFunc:m,relativeError:e=!1}={}})=>{i===0&&(i=1e-5);let d=[],u=-1,l=typeof e=="number"&&e;for(;;){let M=[t,n],a=[(0,c.evaluate)(s,{x:t}),(0,c.evaluate)(s,{x:n})],h=(t*a[1]-n*a[0])/(a[1]-a[0]),f=(0,c.evaluate)(s,{x:h});u+=1;let I=Math.abs(n-t),P=Math.abs((0,c.evaluate)(s,{x:h}));switch(Math.sign(f)){case Math.sign(a[0]):e&&(l||(l=t),e=Math.abs(h-l)/Math.abs(h)),t=h;break;case Math.sign(a[1]):e&&(l||(l=n),e=Math.abs(h-l)/Math.abs(h)),n=h;break}d.push({iteration:u,interval:M.map(x=>(0,o.fixNumber)(x)),results:a.map(x=>(0,o.fixNumber)(x)),x:(0,o.fixNumber)(h),...m&&{y:(0,c.evaluate)(m,{x:h})},...e&&{relativeError:(0,o.fixNumber)(e)},condition1:(0,o.fixNumber)(I),condition2:(0,o.fixNumber)(P)});let N=!b[0]||I<i,w=!b[1]||P<i;if(!r&&N&&w||r&&(N||w)||u>=p)break}return{result:{iterations:u,interval:[t.toPrecision(21),n.toPrecision(21)]},details:d}},"falsePosition"),z={func:"string",initialX:"number",precision:"number",options:Y},Z=g(({func:s,initialX:t,precision:n,options:{bail:i=!1,conditionsWhitelist:r=[!0,!0],maxIterations:b=Number.POSITIVE_INFINITY,origFunc:p,relativeError:m=!1}={}})=>{n===0&&(n=1e-5);let e=[],d=-1,u=typeof m=="number"&&m;for(;;){let l=(0,c.evaluate)(s,{x:t}),M=(0,c.derivative)(s,"x").evaluate({x:t}),a=t;t-=(0,c.evaluate)(s,{x:t})/M,d+=1;let h=Math.abs(t-a),f=Math.abs((0,c.evaluate)(s,{x:t}));m&&(u||(u=a),m=Math.abs(t-u)/Math.abs(t)),e.push({iteration:d,prevX:(0,o.fixNumber)(a),prevY:(0,o.fixNumber)(l),diffY:(0,o.fixNumber)(M),x:(0,o.fixNumber)(t),...p&&{y:(0,c.evaluate)(p,{x:t})},...m&&{relativeError:(0,o.fixNumber)(m)},condition1:(0,o.fixNumber)(h),condition2:(0,o.fixNumber)(f)});let I=!r[0]||h<n,P=!r[1]||f<n;if(!i&&I&&P||i&&(I||P)||d>=b)break}return{result:{iterations:d,x:t.toPrecision(21)},details:e}},"newtonRaphson"),$=g(({func:s,interval:[t,n],precision:i,options:{bail:r=!1,conditionsWhitelist:b=[!0,!0],maxIterations:p=Number.POSITIVE_INFINITY,origFunc:m,relativeError:e=!1}={}})=>{i===0&&(i=1e-5);let d=[],u=-1,l=typeof e=="number"&&e;for(;;){let M=[(0,c.evaluate)(s,{x:t}),(0,c.evaluate)(s,{x:n})],a=(t*M[1]-n*M[0])/(M[1]-M[0]);u+=1;let h=Math.abs(a-t),f=Math.abs((0,c.evaluate)(s,{x:a}));e&&(l||(l=n),e=Math.abs(a-l)/Math.abs(a)),d.push({iteration:u,interval:[(0,o.fixNumber)(t),(0,o.fixNumber)(n)],results:M.map(N=>(0,o.fixNumber)(N)),x:(0,o.fixNumber)(a),...m&&{y:(0,c.evaluate)(m,{x:a})},...typeof e=="number"&&{relativeError:(0,o.fixNumber)(e)},condition1:(0,o.fixNumber)(h),condition2:(0,o.fixNumber)(f)});let I=!b[0]||h<i,P=!b[1]||f<i;if(!r&&I&&P||r&&(I||P)||u>=p)break;t=n,n=a}return{result:{iterations:u,interval:[t.toPrecision(21),n.toPrecision(21)]},details:d}},"secant");0&&(module.exports={bisection,falsePosition,newtonRaphson,newtonRaphsonParams,secant,zerosFunctionParams});