C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[51804] Re:Re:Re:TChart 관련 질문 입니다.
장성호 [nasilso] 1809 읽음    2008-01-04 15:54
예전에 Q&A에 올린 예제를 이용하셨군요

근데 무엇을 만들고 계시죠?
오실로스코프같은것이라도 만드시는지?

말씀하신대로
라그랑제 보간법을 이용할때는 몇가지 중요한  문제가 좀 있을것 같습니다.

라그랑제 보간법은 데이타(n)가 이미 저음부터 끝까지 확보된 상태에서
데이타의 모든 점을 지나는 n차 방정식을 구하여서 그리는것인데..

실시간적으로 data가 계속 늘어나게 된다면
1. 앞에 그려진 부분도 방정식이 바뀜에 따라 달라져 버리는 문제가 있을것이며
2. 또 짧은 시간 계속 들어오는 데이타에 맞게 그때 그때 라그랑제 방정식을 구하는데
    퍼포먼스가 많이 잡힐것 입니다.

3. 그리고 라그랑제 보간법에는 실제로 해보니까... 첫번째 데이타와 마지막 데이타 부근에는
    그래프가 진동이 심해지고 ... 발진하는 현상이있습니다.
    중간 부분에는 그럴듯 한데...


라그랑제 보간법 말고

주변에 있는 3~4개의 점을 가지고 방정식을 구해서 그리는 보간법을 이용하면 어떨까요?
3차 스플라인인가? 뭐시긴가.. 그런게 있었던것 같은데...
아주 짧은 시간 간격으로 들어오므로 3~4개 정도 뒤에 그린다고 크게 보이는데 문제되지는 않을것이구요

3차 스플라인도 문제가 없지는 않습니다.
실제 데이타는 모두 linear 하니  모두 미분가능해야 하는데...
라그랑제로 하면 n차 방정식이 나오므로  모든  X에 대해서 미분가능하지만
스플라인으로 보간한 경우 자세히 보면 각 데이타 점에서 꺽입니다.(미분가능하지 않다는것이죠)



기타
[ 펄스의 어느정도 일정한 패턴이 있다면]

       패턴이 있다면 패턴을 잘 이용하면 더욱 편리할것 같기도 합니다.( 한번도 해본적 없음)
        - 그러니까  puls가 뛰지 않고 가만히 있을때는 보간법을 이용하지 않고 그냥 그리구...
        - 펄스가 high 로 올라갈때부터 내려올때까지만 보간법을 이용하구..
       또
        - 기존에 있는 보간법을 이용하는것도 좋지만 패턴이 있는경우
           패턴에 맞게 보간법을 만들어서 사용하는것도 좋을듯( 어렵나? 저도 해보지 않았읍니다.)
           
          F(X) =  aX^3 + bX^2+cX+d ..     ==> 패턴 방정식이라하면
          f(x)  =  k * F(X)                         ==> 보간 방정식
       
         펄스가 올라갈때 패턴이 보통 F(X)와 같이 나온다면?
         실제 보간 f(x) 는  패턴 F(X)에 비례하지 않겠어요?  f(x) = kF(x) ...이런식으로...

        
     요 방식을 제가 해보려다가 포기했습니다.


별로 도움이 되지 않을것 같네요

좋은 아이디어가 있거나
해결방법을 찾으면 좀 올려봐 주세요

저도 시간되는데로 좀더 연구해 보고 싶습니다.

그럼..


                              

코코정 님이 쓰신 글 :
: 제가 계속해서 자료도 찾아보고 저 나름대로 계산공식을 이용해서 해봤는데여
: 잘 안되서 이렇게 다시 질문을 드립니다.
: 제가 멀티미디어 타이머를 사용하여 데이터를 받아들이고 있는데여
: Interval : 2msec 이구요
: 근데 문제가 실시간으로 그려야 한다는 점인데...장성호님 께서 예제를 올려주신거 가지구 해봤는데
: 제가 잘못한건지 안되더라구요..뭐가 잘못된건지 확인 좀 부탁드립니다..죄송합니다...
: void __fastcall TFrmMain::MonitorTimerTimer(TObject *Sender)
: {
:     double tmpx;
:     double X,Y;
:     Cnt++;
:     //TCP.ST.Pressure = random (10000);
:     for (int i = 0; i < caView->SeriesCount(); i++)
:     {
:         double  XV  = caView->Series[i]->XValues->Value[1] ;
:         double  X1V = caView->Series[i]->XValues->Value[0];
:                if(SKNum == i)
:                {
:                     MaxVal = caView->Series[i]->XValues->Value[40];
:                }
:                caView->Series[i]->Delete(0);
:                caView->BottomAxis->Maximum = 40 + Cnt;
:                caView->BottomAxis->Minimum = Cnt;
:                tmpx = XV - X1V;
:                X = caView->Series[i]->XValues->Last() + tmpx;
:                Y = Lagrange(XV,X1V,TCP.ST.Pressure,1,XV)  ;
:                //caView->Series[i]->AddXY(
:                //caView->Series[i]->XValues->Last() + tmpx,TCP.ST.Pressure, "",clTeeColor);
:                caView->Series[i]->AddXY(X,Y,"",clTeeColor);
:     }
: }
: //---------------------------------------------------------------------------
: double __fastcall TFrmMain:: Lagrange(double x,double x1,double y,int n,double t)
: {
:      int i,j;
:      double s,p;
:
:      s = 0.0;
:      for(i=0; i<n; i++)
:      {
:           p=y;
:           for(j=0;j<n;j++)
:           {
:                if(i != j)
:                {
:                     p=p*(t-x1)/(x-x1);
:                }
:
:           }
:           s=s+p;
:      }
:      return s;
: }
:
: 장성호 님이 쓰신 글 :
: : TChart문제는 아니구요
: :
: : 원인은 샘플링한 데이타가  값의 변화에 비해 적기때문입니다.
: :
: : 해결은?
: :
: : 1. 샘플링 주기를 짧게 하여 데이타를 많이 확보하는것이 가장 확실합니다.
: :
: :
: : 2. 시스템적인 한계가 있어서 데이타를 더 많이 확보하기는 힘든경우에는?
: :   
: :    대개..  제한적인 데이타를 이용하여 Real Curve에 가까운 함수를 구하는
: :    보간법을 이용합니다.
: :
: :    보간법에는  선형 , 라그랑제 , 스플라인 , 뉴턴 등이 있습니다.
: :
: : 그럼..
: :
: :
: : 코코정 님이 쓰신 글 :
: : : 새해 복 많이 받으시구요 하시는 일들 잘 되었으면 합니다.
: : : 제가 질문 할 내용은...
: : : 통신으로 받은 데이터를 그리고 있는데여
: : : 그래프 모양자체가 너무 각이 있어서 그 각을 없애는 방법이 있나해서여..
: : : 데이터를 확인 해 보니 정상적으로 받아서 그리는데 그래프는 너구 각이 져여...그림파일 보시면
: : : 실제로는 저렇게 사다리꼴 모양이 아닌데...저렇게 나오는 이유를 모르겠는데여
: : : 어떤식으로 해결을 해야 하나요...?

+ -

관련 글 리스트
51776 TChart 관련 질문 입니다. 코코정 1329 2008/01/02
51807     Re:TChart 관련 질문 입니다. 최보현.현지아빠 1279 2008/01/04
51780     Re:TChart 관련 질문 입니다. civilian,안영제 1294 2008/01/02
51777     Re:TChart 관련 질문 입니다. 장성호 1216 2008/01/02
51803         Re:Re:TChart 관련 질문 입니다. 코코정 1270 2008/01/04
51804             Re:Re:Re:TChart 관련 질문 입니다. 장성호 1809 2008/01/04
51778         Re:Re:TChart 관련 질문 입니다. 코코정 1277 2008/01/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.