我正在生成对数趋势线并使用Excel公式。但我无法计算在Excel中计算的斜率和截距值。我想,我在公式中犯了一些错误。
这是我的代码
<template>
<div>
...
<div class="list-group">
<a :href="baseUrl+'/message/inbox'" class="list-group-item">
Message
</a>
<a :href="baseUrl+'/message/review'" class="list-group-item">
Review
</a>
<a :href="baseUrl+'/message/resolution'" class="list-group-item">
Resolution
</a>
</div>
...
</div>
</template>
<script>
export default {
...
data() {
return {
baseUrl: window.Laravel.baseUrl
}
},
...
}
</script>
Excel公式:
对数方程:y =(c * LN(x))+ b
其中:
var X= [10, 25, 30, 40]; Y= [5, 4, 7, 12];
var Slope, Intercept, SX = 0, SY = 0,
SXX = 0, SXY = 0, SYY = 0,
SumProduct = 0, N = X.length;
for (var i = 0; i < N; i++) {
SX = SX + X[i];
SY = SY + Y[i];
SXY = SXY + X[i] * Y[i];
SXX = SXX + X[i] * X[i];
SYY = SYY + Y[i] * Y[i];
}
Slope = ((N * SXY) - (SX * SY)) / ((N * SXX) - (SX * SX));
Intercept = (SY - (Slope * SX)) / N;
Excel输出的屏幕截图
请建议如何在JavaScript中派生Excel公式。
答案 0 :(得分:4)
您在Excel中错过Math.log()
ln()
。像这样编辑for
部分。
for (var i = 0; i < N; i++) {
SX = SX + Math.log(X[i]);
SY = SY + Y[i];
SXY = SXY + Math.log(X[i]) * Y[i];
SXX = SXX + Math.log(X[i]) * Math.log(X[i]);
SYY = SYY + Y[i] * Y[i];
}
我已经验证了输出是以Excel为单位的扫描。
> Slope
3.8860409979365333
> Intercept
-5.252238189415747