Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы / Интерполяция / Main
.cpp#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);
}
}
//---------------------------------------------------------------------------