Скачиваний:
21
Добавлен:
02.05.2014
Размер:
2.72 Кб
Скачать
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
#include <stdio.h>
#include <math.h>
#pragma package(smart_init)
#pragma resource "*.dfm"
void __fastcall TfrmMain::Gen(int Q)
{
    delete X;
    delete Y;

    X = new double[Q+1];
    Y = new double[Q+1];

    X[0]=-3.1415926;
    X[Q]=3.1415926;
    Y[0]=sin(X[0]);
    Y[Q]=sin(X[Q]);

    Series1->Clear();
    double R=(X[Q]-X[0])/Q;
    for(int i=1;i<=Q;i++)
    {
        X[i]=X[i-1]+R;
        Y[i]=sin(X[i]);
        Series1->AddXY(X[i],Y[i],"",clGreen);
    }
}
double __fastcall TfrmMain::Pn(double x,double *X, double *Y, double Q)
{
//    Gen(Q);
    double S=0,tmp;
    for(int j=0;j<=Q;j++)
    {
        tmp=Y[j];
		for(int i=0;i<=Q;i++)
        if (i!=j)
            tmp*=((x-X[i])/(X[j]-X[i]));
        S+=tmp;
    }
    return(S);
}
TfrmMain *frmMain;
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
        : TForm(Owner)
{
    sgMstk->Cells[0][0]="n";
    sgMstk->Cells[1][0]="Dn";
    sgMstk->Cells[2][0]="Ddn";
    sgMstk->Cells[3][0]="Kd";
}
void __fastcall TfrmMain::btnInptClick(TObject *Sender)
{
    FILE *fl;
    fl = fopen("inpt.txt","rt");
    fscanf(fl,"%i",&N);
    mmOutpt->Lines->Add(FloatToStr(N));
//    Gen(N);

    X = new double[N+1];
    Y = new double[N+1];

    for(int i=0;i<=N;i++)
    {
        fscanf(fl,"%lf",&X[i]);
        fscanf(fl,"%lf",&Y[i]);
        Series1->AddXY(X[i],Y[i],"",clGreen);
    }

    fclose(fl);
}
void __fastcall TfrmMain::btnExtClick(TObject *Sender)
{
    Close();
}
void __fastcall TfrmMain::btnClcltClick(TObject *Sender)
{
    double Dn,Ddn,kd;
    double x;
    x = StrToFloat(edtArgmnt->Text);
    Dn=Pn(x,X,Y,N-2)-Pn(x,X,Y,N-1);
    Ddn=Pn(x,X,Y,N-1)-sin(x);
    if (Dn!=0) kd=1-fabs(Ddn/Dn); else kd=9999;
    mmOutpt->Lines->Add(FloatToStrF(Dn,ffExponent,20,15));
    mmOutpt->Lines->Add(FloatToStrF(Ddn,ffExponent,20,15));
    mmOutpt->Lines->Add(FloatToStrF(kd,ffExponent,20,15));
    for (int n=1;n<=N;n++)
    {
       Dn=Pn(x,X,Y,n)-Pn(x,X,Y,n+1);
        Ddn=Pn(x,X,Y,n+1)-sin(x);//Pn(x,X,Y,n+2);
        if (Dn!=0) kd=1-fabs(Ddn/Dn); else kd=9999;
        sgMstk->Cells[0][n]=FloatToStr(n);
        sgMstk->Cells[1][n]=FloatToStr(Dn);//,ffFixed,5,5);
        sgMstk->Cells[2][n]=FloatToStr(Ddn);//,ffFixed,5,5);
        sgMstk->Cells[3][n]=FloatToStr(kd);//,ffFixed,5,5);
   }


   x=X[0]+0.00001;
   double R=(X[1]-X[0])/100.0;
   while (x<X[1])
   {
        x+=R;
        Dn=Pn(x,X,Y,5)-Pn(x,X,Y,6);
            if (Dn!=0)
        Series2->AddXY(x,-log10(fabs(Dn)),"",clGreen);
   }
}
//---------------------------------------------------------------------------


Соседние файлы в папке Интерполяция