Java中变量有误差的非线性回归

f4t66c6m  于 2022-10-02  发布在  Java
关注(0)|答案(2)|浏览(202)

我需要一个健壮的曲线拟合算法,可以在浏览器中工作。也就是说,我需要它能够拟合多项式和三角(理想情况下是所有定制的)函数,而且它还必须考虑到这两个变量中的错误。

我想使用现有的库或重写用不同但可理解的语言编写的实现*(伪代码、Python、C#、没有太多内存魔力的C等)*。或者,如果可能的话,我也可以使用一个转换程序将其转换为JavaScript。然而,我已经搜索了几个小时,没有找到任何合适的JavaScript库,也没有一个简单的实现可以抄袭。

已经找到了两个可以做我想做的事情的软件。

  • 第一个是GNOUUPT,这是一个用C编写的实用程序。它是开源的,但我发现代码有些复杂,曲线拟合部分与程序的其他部分非常相互依赖,所以我没有设法将其移植到JavaScript。
  • 第二个是SciPy,这是一个用于Python的数学库。如果相关部分实际上是用Python编写的,那么这将是一次轻松的胜利。遗憾的是,事实并非如此,相反,它是一段经过修改的旧Fortran代码,以便它可以与Python通信。代码对我来说太难了,而且太古老了,Fortran到Java的转换程序也不能工作,因为代码中有特定于Python的东西。

你知道有什么我可以用的项目吗?我知道这不是一个“解决所有问题的答案”,但我会感激任何能让我更接近完成的事情。

vmdwslir

vmdwslir1#

可以通过Emscripten对GNOUPUPT进行代码转换,以在浏览器中以Java脚本的形式运行。请参见现场演示站点gnuplot + emscripten。作为结果的javascrip变体目前不受gnplot项目的支持,但是原理证明演示令人印象深刻。

jgzswidk

jgzswidk2#

Js将允许您将数据数据适合任意函数。

点击此处查看完整的示例https://pterodactylus.github.io/Alglib.js/curve_fitting.html

<script type="module">
    import {Alglib} from 'https://cdn.jsdelivr.net/gh/Pterodactylus/Alglib.js@master/Alglib-v1.1.0.js'
    //import {Alglib} from '../Alglib-v1.1.0.js'

    var f = function(a_n, x){
        return a_n[3]*Math.pow(x, 3)+a_n[2]*Math.pow(x, 2)+a_n[1]*Math.pow(x, 1)+a_n[0];
    }

    let data = [[-3, 8], [1,3], [5,3], [9,8], [10,16]]
    var fn1 = function(a){
        let sum = 0
        for (let i = 0; i < data.length; ++i) {
            sum = sum + Math.pow(data[i][1] - f(a, data[i][0]), 2)
        }
        let sse = Math.sqrt(sum)
        return sse
    }

    let solver = new Alglib()
    solver.add_function(fn1) //Add the first equation to the solver.

    solver.promise.then(function(result) { 
        var x_guess = [1,1,1,1] //Guess the initial values of the solution.
        var s = solver.solve("min", x_guess) //Solve the equation
        let x = solver.get_report()
        solver.remove() //required to free the memory in C++
    })
</script>

相关问题