Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简化巨型条件语句 摘要_C#_Optimization_Boolean Logic_Boolean Expression - Fatal编程技术网

C# 简化巨型条件语句 摘要

C# 简化巨型条件语句 摘要,c#,optimization,boolean-logic,boolean-expression,C#,Optimization,Boolean Logic,Boolean Expression,在生活中,有时你的信号很嘈杂,你想从中解脱出来 对此 有许多现有的方法允许您平滑数据:局部线性回归和多项式回归,不同类型的移动平均: 然而,我发现对于我的情况,最适合的方法是高斯核平滑。它在桌面上对我来说就像一个魔咒,但当切换到移动设备时,由于高计算要求,算法使设备停止运行 其中一个原因是,在平滑之前,我必须使采样率与其他信号相等,这大大增加了采样率,从而增加了处理所需的数据量 这也导致了这样一个事实,即高斯核的大小必须是成千上万个分量,这直接影响了算法的复杂性。对于我的天真方法

在生活中,有时你的信号很嘈杂,你想从中解脱出来

对此

有许多现有的方法允许您平滑数据:局部线性回归和多项式回归,不同类型的移动平均:

然而,我发现对于我的情况,最适合的方法是高斯核平滑。它在桌面上对我来说就像一个魔咒,但当切换到移动设备时,由于高计算要求,算法使设备停止运行

其中一个原因是,在平滑之前,我必须使采样率与其他信号相等,这大大增加了采样率,从而增加了处理所需的数据量

这也导致了这样一个事实,即高斯核的大小必须是成千上万个分量,这直接影响了算法的复杂性。对于我的天真方法,它需要滤波器中的成千上万个元素与信号中的成千上万个分量相乘和和,以仅接收一个信号平滑数据的组件

有一种方法可以有效地进行高斯核平滑,这需要使用傅里叶变换,而傅里叶变换的实现非常复杂

因此,我不想沿着这条路径走,而是认为实际上可以更有效地进行平滑处理,而不必深入傅里叶变换的复杂性

基本上,任何信号都只是按时间排序的成对的集合。当使用线性插值进行插值时,它始终可以用表示,并且实际上可以通过分析平滑(即)的一个组件。我将不深入讨论如何在解析定义的线段上计算解析定义的核函数。这里值得一提的是,结果是一个巨大的分段函数:

这会产生许多
if
语句:

public static Double Solution(Double x, Double w, Double x1, Double y1, Double x2, Double y2)
{
    Double result;

    if (x + w < x2 && w + x1 <= x)
    {
        result = (x * y1 - x2 * y1 - x * y2 + x1 * y2) / (x1 - x2);
    }
    else if (x1 < x + w && x < x1 && x + w < x2)
    {
        result = Math.Pow(w + x - x1, 2) * ((w + x + 2 * x1 - (3 * x2)) * y1 - (w + x - x1) * y2) * Math.Pow(w, -2) / (x1 - x2) / 6;
    }
    else if (x == x1 && x + w < x2)
    {
        result = y1 / 2 + w * (y1 - y2) / (x1 - x2) / 6;
    }
    else if (x + w < x2 && x1 < x && x < w + x1)
    {
        result = Math.Pow(w, -2) / (x1 - x2) * (Math.Pow(w, 3) * (y1 - y2) + 3 * w * w * (-x2 * y1 + x * (y1 - y2) + x1 * y2) - Math.Pow(x - x1, 2) * ((x + 2 * x1 - (3 * x2)) * y1 + (-x + x1) * y2) + 3 * w * (x - x1) * ((x + x1 - (2 * x2)) * y1 + (-x + x1) * y2)) / 6;
    }
    else if (x2 <= x + w && x < x1)
    {
        result = (x1 - x2) * (2 * y1 * x1 + x2 * y1 + x1 * y2 + 2 * x2 * y2 - 3 * w * (y1 + y2) - 3 * x * (y1 + y2)) * Math.Pow(w, -2) / 6;
    }
    else if (x2 <= x && w + x1 <= x && x < w + x2)
    {
        result = -Math.Pow(w - x + x2, 2) * ((w - x + x2) * y1 + (-w + x - 3 * x1 + (2 * x2)) * y2) * Math.Pow(w, -2) / (x1 - x2) / 6;
    }
    else if (x2 <= x && x < w + x1)
    {
        result = -(x1 - x2) * (2 * y1 * x1 + x2 * y1 + x1 * y2 + 2 * x2 * y2 + 3 * w * (y1 + y2) - 3 * x * (y1 + y2)) * Math.Pow(w, -2) / 6;
    }
    else if (x == x1 && (x + w == x2 && (x2 <= x && x + w < x1 && w + x2 <= x || x < w + x1) || x < w + x1 && x2 <= x + w && x < x2))
    {
        result = (-x1 + x2) * (3 * w * (y1 + y2) + (x1 - x2) * (y1 + 2 * y2)) * Math.Pow(w, -2) / 6;
    }
    else if (x < x2 && x2 <= x + w && w + x1 <= x)
    {
        result = Math.Pow(w, -2) / (x1 - x2) * (Math.Pow(w, 3) * (-y1 + y2) + 3 * w * w * (-x2 * y1 + x * (y1 - y2) + x1 * y2) + Math.Pow(x - x2, 2) * ((-x + x2) * y1 + (x - 3 * x1 + (2 * x2)) * y2) + 3 * w * (x - x2) * (-2 * x1 * y2 + x * (-y1 + y2) + x2 * (y1 + y2))) / 6;
    }
    else if (x < x2 && x2 <= x + w && x1 < x && x < w + x1)
    {
        result = Math.Pow(w, -2) / (x1 - x2) * (-2 * Math.Pow(x1, 3) * y1 + 3 * x1 * x1 * x2 * y1 + Math.Pow(x2, 3) * y1 - Math.Pow(x1, 3) * y2 - 3 * x1 * (x2 * x2) * y2 + 2 * Math.Pow(x2, 3) * y2 + 2 * Math.Pow(x, 3) * (-y1 + y2) - 3 * w * Math.Pow(x1 - x2, 2) * (y1 + y2) + 6 * x * x * (x2 * y1 - x1 * y2) + 3 * x * (2 * x1 * x2 * (-y1 + y2) + x1 * x1 * (y1 + y2) - (x2 * x2) * (y1 + y2))) / 6;
    }
    else
    {
        result = 0.0e0;
    }

    return result;
}
公共静态双解(双x、双w、双x1、双y1、双x2、双y2)
{
双重结果;

如果(x+w