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.26 kB
"use strict";var E=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var P=Object.prototype.hasOwnProperty;var f=(t,e)=>E(t,"name",{value:e,configurable:!0});var T=(t,e)=>{for(var n in e)E(t,n,{get:e[n],enumerable:!0})},w=(t,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of L(e))!P.call(t,r)&&r!==n&&E(t,r,{get:()=>e[r],enumerable:!(a=v(e,r))||a.enumerable});return t};var N=t=>w(E({},"__esModule",{value:!0}),t);var k={};T(k,{interpolationParams:()=>A,lagrangeInterpolation:()=>G,newtonInterpolation:()=>O,vandermondeInterpolation:()=>y});module.exports=N(k);var p=require("@hyoretsu/utils"),b=require("mathjs");var m=require("@hyoretsu/utils"),M=require("mathjs");var F="number[][]";var R={coefficients:F,independentTerms:"number[]"};var _=f(t=>Math.max(...t.map((e,n)=>e.reduce((a,r)=>a+Math.abs(r),0)/Math.abs(e[n]))),"spectralRadius"),D={...R,precision:"number",options:{maxIterations:"number"}};var S=f(({coefficients:t,independentTerms:e,precision:n,options:{maxIterations:a=Number.POSITIVE_INFINITY}={}})=>{n===0&&(n=1e-5);let r=[...t],i=[...e],u=[],o=0,s=e.length,h=i.map(($,c)=>[...(0,m.range)(s-1).map(g=>{let l=g>=c?g+1:g;return`${-r[c][l]/r[c][c]} * ${String.fromCharCode(97+l)} + `}),String($/r[c][c])].join("")),d=i.map($=>0);for(;;){let $=[...d];h.forEach((l,C)=>{d[C]=(0,M.evaluate)(l,d.reduce((x,I)=>(x[String.fromCharCode(97+Object.entries(x).length)]=I,x),{}))}),o+=1;let c=Math.max(...d.map((l,C)=>Math.abs(l-$[C]))),g=c/Math.max(...d);if(u.push({iteration:o,currentGuess:$.map(l=>(0,m.fixNumber)(l)),nextGuess:d.map(l=>(0,m.fixNumber)(l)),absoluteError:(0,m.fixNumber)(c),relativeError:(0,m.fixNumber)(g)}),o>0&&g<n||o>=a)break}return{result:{iterations:o,iterationFunc:h,spectralRadius:_(t),solution:d},details:u}},"gaussSeidel");var A={x:"number[]",y:"number[]",targetX:"number|undefined"},G=f(({x:t,y:e,targetX:n})=>{let a=e.map((r,i)=>{let u="",o=1;return t.forEach((s,h)=>{h!==i&&(u+=`(x ${Math.sign(t[h])===1?"-":"+"} ${Math.abs(t[h])})`,o*=t[i]-t[h])}),`${r} * (${u})/${(0,p.fixNumber)(o)}`}).reduce((r,i)=>r?`${r} + ${i}`:i,"");return{result:a,details:{...n&&{targetResult:(0,p.fixNumber)((0,b.evaluate)(a,{x:n}))}}}},"lagrangeInterpolation"),y=f(({x:t,y:e,targetX:n})=>{let a=t.length,{result:{solution:r}}=S({coefficients:t.map((u,o)=>(0,p.range)(a).map(s=>u**s)),independentTerms:e,precision:1e-9}),i=r.reduce((u,o,s)=>s===0?String((0,p.fixNumber)(o)):`${u} ${Math.sign(o)===1?"+":"-"} ${Math.abs((0,p.fixNumber)(o))} * x^${s}`,"");return{result:i,details:{...n&&{targetResult:(0,p.fixNumber)((0,b.evaluate)(i,{x:n}))}}}},"vandermondeInterpolation"),O=f(({x:t,y:e,targetX:n})=>{let a=[];t.forEach((i,u)=>{if(u===0){a.push(e);return}let o=[];for(let s=0;s<t.length-u;s++)o.push((a[u-1][s+1]-a[u-1][s])/(t[u+s]-t[s]));a.push(o)});let r=a.map((i,u)=>{if(u===0)return String(i[0]);let o="";for(let s=0;s<u;s++)o+=`(x ${Math.sign(t[s])===1?"-":"+"} ${Math.abs(t[s])})`;return`${Math.sign(i[0])===1?"+":"-"} ${Math.abs(i[0])} * ${o}`}).join(" ");return{result:r,details:{dividedDifferences:a,...n&&{result:(0,b.evaluate)(r,{x:n})}}}},"newtonInterpolation");0&&(module.exports={interpolationParams,lagrangeInterpolation,newtonInterpolation,vandermondeInterpolation});