我陷入了从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;
}
这就是我需要的东西
问题在于不知道如何获得Math.pow
的反向版本。
我将不胜感激。
答案 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)