UNPKG

numerical-methods

Version:

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

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