Ste*_*ven 5 java algorithm math
我有如下代码:
`if (a <= 10){
z = 5;
} else {
z = -1;
}`
Run Code Online (Sandbox Code Playgroud)
我发现当s(10 - a) = |10 - a| / (10 - a)它输出 1 或 -1 时。它输出1ifa < 10和-1if a > 10。
然后,我只是求解线性方程z = s(10 - a) * m + b,以找到常数 m 和 b。
5 = 1 * m + b 和-1 = -1 * m + b
哪个输出b = 2, m = 3。
那么这可以建模为z = 3 * s(10 - a) + 2.
现在这个问题变得更加棘手。如果嵌套 if 语句中有两个变量怎么办?如:
`if (a <= 10){
if(b <= 3){
z = 3;
} else {
z = 1;
}
} else {
if(b <= -5){
z = -11;
} else {
z = 4;
}
}`
Run Code Online (Sandbox Code Playgroud)
我尝试使用另一系列线性方程来解决这个问题。
3 = A * s(10 - a) + B * s(3 - b) + C1 = A * s(10 - a) + B * s(3 - b) + C-11 = A * s(10 - a) + D * s(-5 - b) + C4 = A * s(10 - a) + D * s(-5 - b) + C以 A、B、C、D 作为常数。然而,这并没有给我正确的答案。我究竟做错了什么?
可以使用以下技巧将 if 语句转换为公式:我们需要找到一个公式,如果该if语句为真,则为1 ,否则为 0。我们可以为此使用 signum 函数:
f(x, y) = (sign(y - x) + 1) / 2
Run Code Online (Sandbox Code Playgroud)
如果 x < y,f(x, y) 为 1,如果 x > y,则为 0。逆 g(x, y) = 1 - f(x, y)。
因此,通过这两个公式,我们可以轻松地将整个事情放在一起:
f(a, 10) * (f(b, 3) * 3 + g(b, 3) * 1) + g(a, 10) * (f(b, -5) * -11 + g(b, -5) * 4)
Run Code Online (Sandbox Code Playgroud)