在油田行业对抽油机的做功情况进行测试,得到一条闭合曲线来显示井的做功情况,理论情况是一个平行四边形的闭合曲线, 但往常绘制的曲线是一条不规则的闭合曲线.
   行业对井的不同总结了几十种不同的闭合曲线,作为标准与所采的曲线进行比对得出当前井的井况.   请问,用什么方法实现对采集到的不规则闭合曲线和行业总结曲线进行比对判断, 近似的判定当前曲线属于哪种井况.    本人对模式识别不甚了解,求解决方法?"汉字识别"方法是否与我这曲线识别有相同之处!

解决方案 »

  1.   

    是判断图形的相似性! 有个朋友提出这样的方法:
       首先将待测曲线和已知曲线重心与坐标原点重合,过原点作一条直线相交于两条曲线,计算交点梯度方向,将两个交点梯度方向相减得A1,做足够多的直线,得到A2,...An的值,A1-An做和得S1。对每条已知曲线重复上述操作得到S2...Sn,min{Sn}可以被认为是最接近的曲线。
      
      请朋友们献言献策!   
      

  2.   

    阿丹提到的方法与我刚说的有相同之处!  我这闭合曲线,横坐标为位移(米),纵坐标为载荷(Mpa),二维显示.
      
      "蜗牛"兄提到的"把问题转换为其他形式来处理",指的是什么形式!
      
       谢谢对"特征抽取"的解释,但我这种闭合曲线比对能用上吗!
       
       还请赐教呀!
      

  3.   

    using System;
    using System.Collections.Generic;
    using System.Text;namespace ConsoleApplication3
    {
        class Program
        {
            static void Main(string[] args)
            {
                //三个样本
                double[] T1 = new double[] { 90d, 45d, 45d };
                double[] T2 = new double[] { 120d, 30d, 30d };
                double[] T3 = new double[] { 60d, 60d, 60d };            //取样图
                double[] t = new double[] { 92d, 46d, 46d };
                //比较余弦值,T1=1,与T1最接近
                writeCos(t, T1);
                writeCos(t, T2);
                writeCos(t, T3);            //比较余弦值,T3=1,与T3最接近
                t = new double[] { 60d, 60d, 60d };
                writeCos(t, T1);
                writeCos(t, T2);
                writeCos(t, T3);
                //比较余弦值,T2=0.99,与T3最接近
                t = new double[] { 122d, 29d, 29d };
                writeCos(t, T1);
                writeCos(t, T2);
                writeCos(t, T3);            Console.Read();
                
            }        /// <summary>
            /// 问候
            /// </summary>
            /// <returns>问候语</returns>
            static void writeCos(double[] t1,double[] t2)
            {            double cos = (t1[0] * t2[0] + t1[1] * t2[1] + t1[2] * t2[2]) / (Math.Pow(t1[0] * t1[0] + t1[1] * t1[1] + t1[2] * t1[2], 0.5) * Math.Pow(t2[0] * t2[0] + t2[1] * t2[1] + t2[2] * t2[2], 0.5));
                Console.WriteLine(cos);
            }
        }
    }