ウィキペディアでこれを見ました:高次方程式の一般化
実装しようとしたときの私のコード:
function generalSmoothStep(a, x) { //Generalized smoothstep
var result = 0;
for (var n = 0; n < a - 1; n ++) {
result += binom(-a, n) * binom(2 * a - 1, a - n - 1) * Math.pow(x, a + n);
}
return result;
}
function smoothStep(x) { //Normal smoothstep
return -2 * Math.pow(x, 3) + 3 * Math.pow(x, 2);
//I know about x * x * (3 - 2 * x);
}
function binom(a, b) { //Binomial coefficient
return Math.factorial(a) / (Math.factorial(a-b) * Math.factorial(b));
}
Math.factorial = function(value) { //Factorial
var result = 1;
if (value > 0) {
for (var count = 1; count <= value; count ++) {
result *= count;
}
} else if (value < 0) {
for (var count = -1; count >= value; count --) {
result *= count;
}
} else {
result = 1;
}
return result;
};
document.getElementById("normalStep").innerHTML = "smoothStep(0.2) = " + smoothStep(0.2);
document.getElementById("generalStep").innerHTML = "generalSmoothStep(2, 0.2) = " + generalSmoothStep(2, 0.2);
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-MML-AM_CHTML"></script>
<script>
MathJax.Hub.Config({
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});
</script>
</head>
<body>
<p>The function: $\operatorname{S}_a(x) = \sum_{n=0}^{a-1} \binom{-a}{n}\binom{2a - 1}{a - n - 1}x^{a + n}$</p>
<p>Here is the result when I run:</p>
<p id="normalStep"></p>
<p id="generalStep"></p>
</body>
二項係数と階乗については知っていますが、階乗は負の数で使用できないという問題があるため、トリックを使用してバイパスしようとしましたが、失敗しました...
また、 ()() が連鎖している部分は、上記のように binom 間の乗算 ()*() と x^(a+n) の乗算だと思いますが、それでも機能しません。
「一般的なスムーズなステップ」、「スムーズなステップの合計」などの単語でグーグルを使用しましたが、それでもそれについての良い説明は返されません...
私のコードが機能しない理由と、Javascriptで一般的なsmoothStep関数を実装する方法を知っている人は誰でも