第一组:
0,0,0,20,3340,4820,4860,4900,4900,4900,4900,9660,19000,19080,19600,19380,19600,19540,19380,19660,19840,19180,19560,19500,19440,19580,19480,19580,19500,19560,19460,19580,19520,19600,19540,19560,19540,19580,19560,19540,19520,19560,19540,19560,19540,19560,19580,19560数据重0开始:
“0,0,0,20,3340,4820,4860,4900,4900,4900,4900”相当于车辆第一组轮胎进入电子秤
“9660,19000,19080,19600,19380,19600,19540,19380,19660,19840,19180,19560,19500,19440,19580,19480,19580,19500,19560,19460,19580,19520,19600,19540,19560,19540,19580,19560,19540,19520,19560,19540,19560,19540,19560,19580,19560”相当于车辆第二组轮胎进入电子秤因此得出结论:此车2轴,车货总重19560,第一轴大概重量4900,第二轴大概重量19560-4900=14660第二组:
0,0,0,1900,5120,5180,5480,5480,5320,5480,18940,19900,19920,19920,19900,20000,19980,19960,20060,19700,19900,19760,20020,20160,20140,19800,20100,19500,20760,20380,20060,19920,20200,19700,20360,19640,19600,20420,19740,20240,19940,20020,20040,20040,20040,20060,20020,20080,20020,20080,20020,20080,20020,20060,20060,20060,20080,20040,20080,20060,20040数据重0开始:
“0,0,0,1900,5120,5180,5480,5480,5320,5480”相当于车辆第一组轮胎进入电子秤
“18940,19900,19920,19920,19900,20000,19980,19960,20060,19700,19900,19760,20020,20160,20140,19800,20100,19500,20760,20380,20060,19920,20200,19700,20360,19640,19600,20420,19740,20240,19940,20020,20040,20040,20040,20060,20020,20080,20020,20080,20020,20080,20020,20060,20060,20060,20080,20040,20080,20060,20040”相当于车辆第二组轮胎进入电子秤因此得出结论:此车2轴,车货总重20420,第一轴大概重量5480,第二轴大概重量20420-5480=14940第三组:
0,0,0,1480,5420,5780,5760,5760,5760,5760,5760,5760,5760,5740,5660,5620,5540,5560,5540,5540,5560,5560,5560,5620,6880,12960,13120,13140,13180,13140,13160,13160,13200,16560,19940,20140,20120,20240,20200,20220,20180,20200,20200,20220,20140,20200,20160,20240,20220,20200,20200,20180,20160,20200,20240,20200,20220,20220,20240,20220,20240,20300,20540,20520,20580,20580,20580,20560,20600,20620,20680,20560,20560,20460,20340,20280,20300,20280,20280,20280,20260,20800,28000,31500,31700,31700,31720,31660,31680,31700,32140,38500,42620,42620,42620,42400,42360,42340,42200,42260,43060,47160,51660,52320,52060,52420,52600,52420,52160,52180,52220,52240,52320,52780,52200,52320,52400,52380,52180,52460,52420,52360,52380,52340,52400,52360,52380,52360,52380,52360数据重0开始:
“0,0,0,1480,5420,5780,5760,5760,5760,5760,5760,5760,5760,5740,5660,5620,5540,5560,5540,5540,5560,5560,5560,5620,6880”相当于车辆第一组轮胎进入电子秤“12960,13120,13140,13180,13140,13160,13160,13200,16560”相当于车辆第二组轮胎进入电子秤“19940,20140,20120,20240,20200,20220,20180,20200,20200,20220,20140,20200,20160,20240,20220,20200,20200,20180,20160,20200,20240,20200,20220,20220,20240,20220,20240,20300,20540,20520,20580,20580,20580,20560,20600,20620,20680,20560,20560,20460,20340,20280,20300,20280,20280,20280,20260,20800”相当于车辆第三组轮胎进入电子秤“28000,31500,31700,31700,31720,31660,31680,31700,32140”相当于车辆第四组轮胎进入电子秤“38500,42620,42620,42620,42400,42360,42340,42200,42260,43060,47160”相当于车辆第五组轮胎进入电子秤“51660,52320,52060,52420,52600,52420,52160,52180,52220,52240,52320,52780,52200,52320,52400,52380,52180,52460,52420,52360,52380,52340,52400,52360,52380,52360,52380,52360”相当于车辆第六组轮胎进入电子秤因此得出结论:此车6轴,车货总重52380,第一轴大概重量5560,第二轴大概重量13200-5560=7640,第三轴大概重量20580-13200=7380,第四轴大概重量31700-20580=11120,第五轴大概重量42620-31700=10920,第六轴大概重量52360-42620=9740
不知道这个如何做成数学模型,或者如何查找规律?希望大家给出建议!!

解决方案 »

  1.   

    哥哥我看回复看得蛋疼,《股票分析》都出来了,贴代码吧,大概就是这个意思:
            static void Main()
            {
                const double a = 800;      //正的变化率阀值,轮组进入
                const double b = -800;     //负的变化率阀值,轮组离开
                string inputstr = "0,0,0,1480,5420,5780,5760,5760,5760,5760,5760,5760,5760,5740,5660,5620,5540,5560,5540,5540,5560,5560,5560,5620,6880,12960,13120,13140,13180,13140,13160,13160,13200,16560,19940,20140,20120,20240,20200,20220,20180,20200,20200,20220,20140,20200,20160,20240,20220,20200,20200,20180,20160,20200,20240,20200,20220,20220,20240,20220,20240,20300,20540,20520,20580,20580,20580,20560,20600,20620,20680,20560,20560,20460,20340,20280,20300,20280,20280,20280,20260,20800,28000,31500,31700,31700,31720,31660,31680,31700,32140,38500,42620,42620,42620,42400,42360,42340,42200,42260,43060,47160,51660,52320,52060,52420,52600,52420,52160,52180,52220,52240,52320,52780,52200,52320,52400,52380,52180,52460,52420,52360,52380,52340,52400,52360,52380,52360,52380,52360";
                string[] inputsplit = inputstr.Split(new char[] { ',' });
                double[] inputdouble=new double[inputsplit.Length];//重量数据流
                for (int i = 0; i < inputsplit.Length; i++)
                {
                    inputdouble[i] = Convert.ToDouble(inputsplit[i]);
                }
                double[] rate = new double[inputsplit.Length];     //变化率数据流,时间单位为1
                int[] signal = new int[inputdouble.Length];        //阀值量化信号数据流
                for (int i = 1; i < inputdouble.Length; i++)
                {
                    rate[i] = inputdouble[i] - inputdouble[i - 1];
                    if (rate[i] > a)
                        signal[i] = 1;
                    else if (rate[i] < b)
                        signal[i] = -1;
                    else
                        signal[i] = 0;
                }
                int bit = 0;
                List<int> index = new List<int>();
                for (int i = 1; i < inputdouble.Length; i++)
                {
                    if (bit == 0 && signal[i] == 1)
                    {
                        bit = 1;
                        index.Add(i - 1);           //轮组开始进入时的inputdouble下标
                    }
                    if (bit == 1 && signal[i] == 0)
                    {
                        bit = 0;
                        index.Add(i);               //轮组稳定时的inputdouble下标
                    }
                }
                index.Add(inputdouble.Length-1);     //因为你原始数据并不是整个过程,而是轮组进入的数据流,为了处理方便,记录最后一个数据的下标
                for (int i = 2; i < index.Count; i=i+2)
                {
                    double avg = 0;
                    for (int j = index[i - 1]; j <= index[i]; j++)
                        avg = avg + inputdouble[j];
                    avg=avg/(index[i]-index[i-1]+1);              //取得重平均值
                    Console.Write(((int)avg).ToString()+",");
                }
            }
    输出结果:
    5663,13157,20322,31757,42482,52348
    对应于你最后一组数据。
    阀值是关键,如果想做的更好一点,阀值看能不能动态确定。
      

  2.   

    static void Main() 
            { 
                const double a = 800;      //正的变化率阀值,轮组进入 
                const double b = -800;    //负的变化率阀值,轮组离开 
                string inputstr = "0,0,0,1480,5420,5780,5760,5760,5760,5760,5760,5760,5760,5740,5660,5620,5540,5560,5540,5540,5560,5560,5560,5620,6880,12960,13120,13140,13180,13140,13160,13160,13200,16560,19940,20140,20120,20240,20200,20220,20180,20200,20200,20220,20140,20200,20160,20240,20220,20200,20200,20180,20160,20200,20240,20200,20220,20220,20240,20220,20240,20300,20540,20520,20580,20580,20580,20560,20600,20620,20680,20560,20560,20460,20340,20280,20300,20280,20280,20280,20260,20800,28000,31500,31700,31700,31720,31660,31680,31700,32140,38500,42620,42620,42620,42400,42360,42340,42200,42260,43060,47160,51660,52320,52060,52420,52600,52420,52160,52180,52220,52240,52320,52780,52200,52320,52400,52380,52180,52460,52420,52360,52380,52340,52400,52360,52380,52360,52380,52360"; 
                string[] inputsplit = inputstr.Split(new char[] { ',' }); 
                double[] inputdouble=new double[inputsplit.Length];//重量数据流 
                for (int i = 0; i < inputsplit.Length; i++) 
                { 
                    inputdouble[i] = Convert.ToDouble(inputsplit[i]); 
                } 
                double[] rate = new double[inputsplit.Length];    //变化率数据流,时间单位为1 
                int[] signal = new int[inputdouble.Length];        //阀值量化信号数据流 
                for (int i = 1; i < inputdouble.Length; i++) 
                { 
                    rate[i] = inputdouble[i] - inputdouble[i - 1]; 
                    if (rate[i] > a) 
                        signal[i] = 1; 
                    else if (rate[i] < b) 
                        signal[i] = -1; 
                    else 
                        signal[i] = 0; 
                } 
                int bit = 0; 
                List <int> index = new List <int>(); 
                for (int i = 1; i < inputdouble.Length; i++) 
                { 
                    if (bit == 0 && signal[i] == 1) 
                    { 
                        bit = 1; 
                        index.Add(i - 1);          //轮组开始进入时的inputdouble下标 
                    } 
                    if (bit == 1 && signal[i] == 0) 
                    { 
                        bit = 0; 
                        index.Add(i);              //轮组稳定时的inputdouble下标 
                    } 
                } 
                index.Add(inputdouble.Length-1);    //因为你原始数据并不是整个过程,而是轮组进入的数据流,为了处理方便,记录最后一个数据的下标 
                for (int i = 2; i < index.Count; i=i+2) 
                { 
                    double avg = 0; 
                    for (int j = index[i - 1]; j <= index[i]; j++) 
                        avg = avg + inputdouble[j]; 
                    avg=avg/(index[i]-index[i-1]+1);              //取得重平均值 
                    Console.Write(((int)avg).ToString()+","); 
                } 
            }
      

  3.   

    数据变化
    x[i]= x1,x2....xi
    b[i]= (x1-0) * 10/x1, (x2-x1) * 10/x2,... ...,(xi-xi-1)/xi。注xi为0时 bi=1
    c[i]= |bi - 10| / n ; 注n为一个常量,例n可表示为max(x) 的10% 或者
    此时得到的c数据应为 0,0,0,0,1,1,1,1,1,3,3,3,3,3,555555555,66666666666
    判断不同值个数。算法优化
    1、b[i]的取得,例如 bi = (xi+1 +  xi-1)/(xi * 2)等
    2、n的取值情况,
    3、c[i]的取得情况,例如c[i] =  [bi+1 + bi + bi-1 - 30]/n
      

  4.   

    b[i]= (x1-0) * 10/x1, (x2-x1) * 10/x2,... ...,(xi-xi-1)/xi。注xi为0时 bi=1
    c[i]= |bi - 10| / n ; 注n为一个常量,例n可表示为max(x) 的10% 或者为什么是10这个参数?
      

  5.   


    啊哈!伙计明白人!!协商神马的就没有见过!伙计有发我看看!我一般是使用串口调试程序截数据自己分析![email protected]