From 422b9c94ba03716dbd840f61da464ffc3239c335 Mon Sep 17 00:00:00 2001 From: m93a Date: Wed, 5 Sep 2018 12:20:32 +0200 Subject: [PATCH] adding module ml-levenberg-marquardt --- types/ml-levenberg-marquardt/index.d.ts | 39 +++++++++++++++++++ .../ml-levenberg-marquardt-tests.ts | 31 +++++++++++++++ types/ml-levenberg-marquardt/tsconfig.json | 22 +++++++++++ types/ml-levenberg-marquardt/tslint.json | 1 + 4 files changed, 93 insertions(+) create mode 100644 types/ml-levenberg-marquardt/index.d.ts create mode 100644 types/ml-levenberg-marquardt/ml-levenberg-marquardt-tests.ts create mode 100644 types/ml-levenberg-marquardt/tsconfig.json create mode 100644 types/ml-levenberg-marquardt/tslint.json diff --git a/types/ml-levenberg-marquardt/index.d.ts b/types/ml-levenberg-marquardt/index.d.ts new file mode 100644 index 0000000000..813ae813c1 --- /dev/null +++ b/types/ml-levenberg-marquardt/index.d.ts @@ -0,0 +1,39 @@ +// Type definitions for ml-levenberg-marquardt 1.0.3 +// Project: https://github.com/mljs/levenberg-marquardt#readme +// Definitions by: m93a +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + + +declare namespace LM { + /** + * Function that receives an array of parameters and returns + * a function with the independent variable as a parameter. + */ + export type FittedFunction = (parameters: number[]) => (x: number) => number; + + /** + * Coordinates of points to fit. + */ + export interface Data { + x: number[]; + y: number[]; + } + + export type Options = { + damping: number, + initialValues: number[], + gradientDifference: number, + maxIterations: number, + errorTolerance: number + }; + + export type Result = { + iterations: number, + parameterError: number, + parameterValues: number[] + }; +} + +declare function LM(d: LM.Data, fn: LM.FittedFunction, o: LM.Options): LM.Result; + +export default LM; diff --git a/types/ml-levenberg-marquardt/ml-levenberg-marquardt-tests.ts b/types/ml-levenberg-marquardt/ml-levenberg-marquardt-tests.ts new file mode 100644 index 0000000000..514af7f901 --- /dev/null +++ b/types/ml-levenberg-marquardt/ml-levenberg-marquardt-tests.ts @@ -0,0 +1,31 @@ +import LM from 'ml-levenberg-marquardt'; + +function sinFunction([a, b]: number[]) { + return (t: number) => a * Math.sin(b * t); +} + +const data = { + x: [ + 0, Math.PI / 2, Math.PI, Math.PI * 3 / 2 + ], + y: [ + 0, 1, 0, -1 + ] +}; + +const initialValues = [ 2, 4 ]; + +const options = { + damping: 1.5, + initialValues, + gradientDifference: 10e-2, + maxIterations: 100, + errorTolerance: 10e-3 +}; + +const fittedParams = LM(data, sinFunction, options); + +// this doesn't make sense but it uses fittedParams... +if (fittedParams.iterations < 10) { + fittedParams.parameterValues[0] += fittedParams.parameterError; +} diff --git a/types/ml-levenberg-marquardt/tsconfig.json b/types/ml-levenberg-marquardt/tsconfig.json new file mode 100644 index 0000000000..7893b0e657 --- /dev/null +++ b/types/ml-levenberg-marquardt/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "ml-levenberg-marquardt-tests.ts" + ] +} diff --git a/types/ml-levenberg-marquardt/tslint.json b/types/ml-levenberg-marquardt/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/ml-levenberg-marquardt/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }