首页 > 解决方案 > Kotlin - 如何使用 GraphView 以图形方式绘制数学函数?

问题描述

我有以下函数,它是正态分布的公式,我的目标是使用 GraphView 库对其进行绘图。好吧,我有以下内容:

代码 kotlin

class ExampleActivity : AppCompatActivity() {
    lateinit var series1: LineGraphSeries<DataPoint>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_example)

        series1 = LineGraphSeries<DataPoint>()

        val media = 8.0  
        val sd = 2.0  

        fun linspace(start: Double, stop: Double, num: Int) = Array(num) { start + it * ((stop - start) / (num - 1)) }

        val x1 = linspace(media - 3*sd, media + 3*sd, 10)
        val normal = NormalDistribution(media,sd)

        for (i in x1){
            val y = normal.cumulativeProbability(i)
            series1.appendData(DataPoint(i,y),false,x1.size)
        }
        plot.viewport.isXAxisBoundsManual = true
        plot.viewport.setMaxX(20.0)
        plot.viewport.isYAxisBoundsManual = true
        plot.viewport.setMaxY(2.0)
        //plot.viewport.isScalable = true
        plot.addSeries(series1)
    }
}

结果 参考

这很奇怪,在python中我也用过,结果更完整,我给你看。

代码蟒蛇

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import math

mu = 8
sigma = 2
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 10)
print(np.linspace(mu - 3*sigma, mu + 3*sigma, 10))
plt.plot(x, stats.norm.pdf(x, mu, sigma))
plt.show()

结果蟒蛇 参考蟒蛇

信息

代码 kotlin val x1 = linspace(media - 3*sd, media + 3*sd, 10)

==

代码 Python x = np.linspace(mu - 3*sigma, mu + 3*sigma, 10)

你能帮我吗,我需要添加什么?

标签: androidkotlinandroid-graphview

解决方案


看起来 python 示例正在绘制.pdf“概率密度函数”,而 kotlin 示例正在绘制.cumulativeProbability本质上是 PDF 积分的函数。您很可能希望改用该.density方法。


推荐阅读