UNPKG

numerical-methods

Version:

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

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