numerical-methods
Version:
A library that I made while studying Computer Science at UFPB. Documentation's available through TypeScript.
2 lines (1 loc) • 3.63 kB
JavaScript
import{a as g}from"./chunk-EI7MMDWY.js";import{fixNumber as s}from"@hyoretsu/utils";import{derivative as Y,evaluate as h}from"mathjs";var y={bail:"boolean",conditionsWhitelist:"[boolean,boolean]",maxIterations:"number",origFunc:"string",relativeError:"boolean"},O={func:"string",interval:"[number,number]",precision:"number",options:y},S=g(({func:l,interval:[t,n],precision:u,options:{bail:M=!1,conditionsWhitelist:b=[!0,!0],maxIterations:p=Number.POSITIVE_INFINITY,origFunc:r,relativeError:o}={}})=>{u===0&&(u=1e-5);let f=[],i=-1,a=typeof o=="number"&&o;for(;;){let e=[t,n],c=[h(l,{x:t}),h(l,{x:n})],m=(t+n)/2,I=h(l,{x:m});i+=1;let P=Math.abs(n-t),N=Math.abs(I);Math.sign(I)===Math.sign(c[0])?(o&&!a&&(a=t),t=m):(o&&!a&&(a=n),n=m),f.push({iteration:i,interval:e.map(T=>s(T)),results:c.map(T=>s(T)),x:s(m),...r&&{y:h(r,{x:m})},...o&&a!==0&&{relativeError:s(Math.abs(m-a)/Math.abs(m))},condition1:s(P),condition2:s(N)});let w=!b[0]||P<u,x=!b[1]||N<u;if(!M&&w&&x||M&&(w||x)||i>=p)break}let d=Math.ceil((Math.log10(n-t)-Math.log10(u))/Math.log10(2));if(i<d&&p===Number.POSITIVE_INFINITY)throw new Error(`Something went wrong, less iterations than the minimum (${d}) were done.`);return{result:{iterations:i,interval:[t.toPrecision(21),n.toPrecision(21)]},details:f}},"bisection"),V=g(({func:l,interval:[t,n],precision:u,options:{bail:M=!1,conditionsWhitelist:b=[!0,!0],maxIterations:p=Number.POSITIVE_INFINITY,origFunc:r,relativeError:o=!1}={}})=>{u===0&&(u=1e-5);let f=[],i=-1,a=typeof o=="number"&&o;for(;;){let d=[t,n],e=[h(l,{x:t}),h(l,{x:n})],c=(t*e[1]-n*e[0])/(e[1]-e[0]),m=h(l,{x:c});i+=1;let I=Math.abs(n-t),P=Math.abs(h(l,{x:c}));switch(Math.sign(m)){case Math.sign(e[0]):o&&(a||(a=t),o=Math.abs(c-a)/Math.abs(c)),t=c;break;case Math.sign(e[1]):o&&(a||(a=n),o=Math.abs(c-a)/Math.abs(c)),n=c;break}f.push({iteration:i,interval:d.map(x=>s(x)),results:e.map(x=>s(x)),x:s(c),...r&&{y:h(r,{x:c})},...o&&{relativeError:s(o)},condition1:s(I),condition2:s(P)});let N=!b[0]||I<u,w=!b[1]||P<u;if(!M&&N&&w||M&&(N||w)||i>=p)break}return{result:{iterations:i,interval:[t.toPrecision(21),n.toPrecision(21)]},details:f}},"falsePosition"),_={func:"string",initialX:"number",precision:"number",options:y},v=g(({func:l,initialX:t,precision:n,options:{bail:u=!1,conditionsWhitelist:M=[!0,!0],maxIterations:b=Number.POSITIVE_INFINITY,origFunc:p,relativeError:r=!1}={}})=>{n===0&&(n=1e-5);let o=[],f=-1,i=typeof r=="number"&&r;for(;;){let a=h(l,{x:t}),d=Y(l,"x").evaluate({x:t}),e=t;t-=h(l,{x:t})/d,f+=1;let c=Math.abs(t-e),m=Math.abs(h(l,{x:t}));r&&(i||(i=e),r=Math.abs(t-i)/Math.abs(t)),o.push({iteration:f,prevX:s(e),prevY:s(a),diffY:s(d),x:s(t),...p&&{y:h(p,{x:t})},...r&&{relativeError:s(r)},condition1:s(c),condition2:s(m)});let I=!M[0]||c<n,P=!M[1]||m<n;if(!u&&I&&P||u&&(I||P)||f>=b)break}return{result:{iterations:f,x:t.toPrecision(21)},details:o}},"newtonRaphson"),R=g(({func:l,interval:[t,n],precision:u,options:{bail:M=!1,conditionsWhitelist:b=[!0,!0],maxIterations:p=Number.POSITIVE_INFINITY,origFunc:r,relativeError:o=!1}={}})=>{u===0&&(u=1e-5);let f=[],i=-1,a=typeof o=="number"&&o;for(;;){let d=[h(l,{x:t}),h(l,{x:n})],e=(t*d[1]-n*d[0])/(d[1]-d[0]);i+=1;let c=Math.abs(e-t),m=Math.abs(h(l,{x:e}));o&&(a||(a=n),o=Math.abs(e-a)/Math.abs(e)),f.push({iteration:i,interval:[s(t),s(n)],results:d.map(N=>s(N)),x:s(e),...r&&{y:h(r,{x:e})},...typeof o=="number"&&{relativeError:s(o)},condition1:s(c),condition2:s(m)});let I=!b[0]||c<u,P=!b[1]||m<u;if(!M&&I&&P||M&&(I||P)||i>=p)break;t=n,n=e}return{result:{iterations:i,interval:[t.toPrecision(21),n.toPrecision(21)]},details:f}},"secant");export{O as a,S as b,V as c,_ as d,v as e,R as f};