指数减少

时间:2018-01-11 15:29:14

标签: javascript chart.js

我陷入了从100到0的指数下降。 这就是我设法得到的:

var time_data = [];
var value_data = [];
var left = 100;
var  i = 1;

while (i <= 30) 
{
	left = left-Math.pow(i,i);
	
	if(left < 0)
	{
		left = 0;

	}
	
	value_data.push(left);
	time_data.push(i);
	
	i+=1;
}

var canvas = document.getElementById('myChart');
var data = {
    labels: time_data,
    datasets: [
        {
            label: "My First dataset",
            fill: false,
            lineTension: 0.1,
            backgroundColor: "rgba(75,192,192,0.4)",
            borderColor: "rgba(75,192,192,1)",
            borderCapStyle: 'butt',
            borderDash: [],
            borderDashOffset: 0.0,
            borderJoinStyle: 'miter',
            pointBorderColor: "rgba(75,192,192,1)",
            pointBackgroundColor: "#fff",
            pointBorderWidth: 1,
            pointHoverRadius: 5,
            pointHoverBackgroundColor: "rgba(75,192,192,1)",
            pointHoverBorderColor: "rgba(220,220,220,1)",
            pointHoverBorderWidth: 2,
            pointRadius: 5,
            pointHitRadius: 10,
            data: value_data,
        }
    ]
};

var option = {
	showLines: true
};
var myLineChart = Chart.Line(canvas,{
	data:data,
  options:option
});

function adddata(){
	myLineChart.data.datasets[0].data[7] = 50;
  myLineChart.data.labels[7] = "test add";
  myLineChart.update();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.3/Chart.min.js"></script>
<canvas id="myChart" width="400" height="250"></canvas>

while (i <= 30) 
{
    left = left-Math.pow(i,i);

    if(left < 0)
    {
        left = 0;

    }

这就是我需要的东西

enter image description here

问题在于不知道如何获得Math.pow的反向版本。

我将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果您正在寻找指数衰减,是否需要使用Math.pow()?像

这样的东西有什么问题
left = left*factor

0 < factor < 1

查看Math.pow()的一些documentation,这两个参数是base和exponent。在您的示例中,left - 30^30没有多大意义,因为它会产生一个非常负的数字,然后默认为0.

使用Math.pow()的表达式将给出指数衰减序列的i

start_value * Math.pow(factor, i)

再次,0 < factor < 1。您开始的值的减少在每次迭代时呈指数级复合。

答案 1 :(得分:0)

根据图表,你想要的是从(0,10)开始,然后每当y加1时将x除以2。

试试这个:

var time_data = [];
var value_data = [];

for (let i=0;i<=10;++i) {
    time_data.push(i);
    value_data.push(10/Math.pow(2,i));
}

这可以在数学上写成递减指数:10 * 2^(-x)或者如果您更喜欢10 * exp(-ln(2) * x)