Разложение в ряд Тейлора элементарных функций
Исходник здесь
=
=
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//----------------------------------------------------------------------
void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
Label2->Caption=ScrollBar1->Position-10;
}
//------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(ListBox1->ItemIndex==-1){ShowMessage("Выбери функцию из списка"); return;}
if( LabeledEdit1->Text=="") {ShowMessage("В поле Точность введите значение не больше еденици"); return;}
double eps= StrToFloat(LabeledEdit1->Text); //0.00001;
double si=0;
double s=0;
int mx=300;
int my=300;
int v= ScrollBar1->Position-10;
int XStart =Image1-> Width / 2;
int YStart = Image1->Height / 2;
Image1->Canvas->Pen->Color=clBlack;
Image1->Canvas->FillRect(Rect (0,0,Image1->Width, Image1->Height));
Image1->Canvas->MoveTo( XStart, 0 );
Image1->Canvas->LineTo(XStart, 1000);
Image1->Canvas->MoveTo( 0, YStart);
Image1->Canvas->LineTo(1000, YStart);
Label4->Caption= "0";
///////////////////////////////////////////////////////////////////////////////////////////////
if(ListBox1->ItemIndex==0){ mx=30; my=50;
for(float i= -10.0; i < 10.0; i=i+0.01){
s=mysin(i,eps);
si= sin(i);
if(CheckBox1->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart-my*si]=clRed;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart-my*si]=clRed; }
if(CheckBox2->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart+v-my*s]=clGreen;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart+v-my*s]=clGreen; }
}
Label4->Caption= countIter;
}
//////////////////////////////////////////////////////////////////////////////////
if(ListBox1->ItemIndex==1){ mx=30; my=50;
for(float i= -10.0; i < 10.0; i=i+0.01){
s=mycos(i,eps);
si=cos(i);
if(CheckBox1->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart-my*si]=clRed;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart-my*si]=clRed; }
if(CheckBox2->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart+v-my*s]=clGreen;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart+v-my*s]=clGreen; }
}
Label4->Caption= countIter;
}
///////////////////////////////////////////////////////////////////////////////////////
if(ListBox1->ItemIndex==2){ mx=200; my=200;
for(float i= -1.0; i < 1.0; i=i+0.001){
s= myarsh (i,eps);
si=ArcSinh(i);
if(CheckBox1->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart-my*si]=clRed;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart-my*si]=clRed; }
if(CheckBox2->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart+v-my*s]=clGreen;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart+v-my*s]=clGreen; }
}
Label4->Caption= countIter;
}
//////////////////////////////////////////////////////////////////////////////////////////
if(ListBox1->ItemIndex==3){ mx=150; my=150;
for(float i= -1.0; i < 1.0; i=i+0.001){
s=myarctg (i,eps);
si=atan(i);
if(CheckBox1->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart-my*si]=clRed;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart-my*si]=clRed; }
if(CheckBox2->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart+v-my*s]=clGreen;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart+v-my*s]=clGreen; }
}
Label4->Caption= countIter;
}
///////////////////////////////////////////////////////////////////////////////////////////
if(ListBox1->ItemIndex==4){ mx=30; my=30;
for(float i= -3.0; i < 3.0; i=i+0.001){
s=mycosh(i,eps);
si=cosh(i);
if(CheckBox1->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart-my*si]=clRed;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart-my*si]=clRed; }
if(CheckBox2->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart+v-my*s]=clGreen;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart+v-my*s]=clGreen; }
}
Label4->Caption= countIter;
}
///////////////////////////////////////////////////////////////////////////////////////////
if(ListBox1->ItemIndex==5){ mx=100; my=100;
for(float i= -1.0; i < 1.0; i=i+0.001){
s=myacos(i,eps);
si=acos(i);
if(CheckBox1->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart-my*si]=clRed;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart-my*si]=clRed; }
if(CheckBox2->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart+v-my*s]=clGreen;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart+v-my*s]=clGreen; }
}
Label4->Caption= countIter;
}
////////////////////////////////////////////////////////////////////////////////////////////
if(ListBox1->ItemIndex==6){ mx=50; my=50;
double si=0, co=0;
for(float i= -10.0; i < 10.0; i=i+0.005){
s=mytan(i,eps);
si=tan(i);
if(CheckBox1->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart-my*si]=clRed;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart-my*si]=clRed; }
if(CheckBox2->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart+v-my*s]=clGreen;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart+v-my*s]=clGreen; }
}
Label4->Caption= countIter;
}
//////////////////////////////////////////////////////////////////////////////////////////
if(ListBox1->ItemIndex==7){ mx=50; my=50;
for(float i= -5.0; i < 5.0; i=i+0.005){
s=mysinh(i,eps);
si= sinh(i);
if(CheckBox1->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart-my*si]=clRed;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart-my*si]=clRed; }
if(CheckBox2->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart+v-my*s]=clGreen;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart+v-my*s]=clGreen; }
}
Label4->Caption= countIter;
}
//////////////////////////////////////////////////////////////////////////////////
if(ListBox1->ItemIndex==8){ mx=150; my=150;
for(float i= -1.0; i < 1.0; i=i+0.001){
s=myasin(i,eps);
si= asin(i);
if(CheckBox1->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart-my*si]=clRed;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart-my*si]=clRed; }
if(CheckBox2->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart+v-my*s]=clGreen;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart+v-my*s]=clGreen; }
}
Label4->Caption= countIter;
}
//////////////////////////////////////////////////////////////////////////////////
if(ListBox1->ItemIndex==9){ mx=50; my=50;
for(float i= -3.0; i < 5.0; i=i+0.005){
s=myexp(i,eps);
si= exp(i);
if(CheckBox1->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart-my*si]=clRed;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart-my*si]=clRed; }
if(CheckBox2->Checked==true){
Image1->Canvas->Pixels[XStart+mx*i][YStart+v-my*s]=clGreen;
Image1->Canvas->Pixels[XStart+mx*i+1][YStart+v-my*s]=clGreen; }
}
Label4->Caption= "не определено";
}
//////////////////////////////////////////////////////////////////////////////////
}
//---------------------------------------------------------------------------
double __fastcall TForm1::MySum(double x,double epsilon)
{
double s=0;
double an;
int n,m=0;
n=1;
an=1;
while(fabs(an)>epsilon)
{
s+=an;
n++;
an*=x*n/(n-1);
m++;
}
countIter=m;
return s;
}
//---------------------------------------------------------------------------
double __fastcall TForm1::mycos(double x,double eps)
{
double s,an;
int n,m=0;
n=0.1;
an=1;
s=0;
while(fabs(an)>eps)
{
s+=an;
n++;
an*=-x*x/(2.*n-1.0)/(2.0*n);
m++;
}
countIter=m;
return s;
}
//--------------------------------------------------------------
double __fastcall TForm1::mysin(double x,double eps)
{
double s,an;
int n,m=0;
n=1;
an=x;
s=0;
while(fabs(an)>eps)
{
s+=an;
n++;
an*=-x*x/(2.*n-1.0)/(2.0*n-2.0);
m++;
}
countIter=m;
return s;
}
//--------------------------------------------------------------------------------
double __fastcall TForm1::mytan(double x, double eps)
{
double s,an;
int n,m=0;
n=1;
an=x;
s=0;
while(fabs(an)>eps)
{
s+=an;
n++;
an*=-x*x/(2.*n-1.0)/(2.0*n-2.0);
m++;
}
//----------------------------------------------------------------------------
double s1,an1;
int n1;
n1=0.1;
an1=1;
s1=0;
while(fabs(an1)>eps)
{
s1+=an1;
n1++;
an1*=-x*x/(2.*n1-1.0)/(2.0*n1);
}
countIter=m;
return s/s1;
}
//---------------------------------------------------------------------------
double __fastcall TForm1::mysinh(double x,double eps)
{
double s,an;
int n,m=0;
n=1;
an=x;
s=0;
while(fabs(an)>eps)
{
s+=an;
n++;
an*=x*x/(2.*n-1.0)/(2.0*n-2.0);
m++;
}
countIter=m;
return s;
}
//--------------------------------------------
double __fastcall TForm1::myasin(double x,double eps){
int i = 0;
double p = x;
double s = x;
while (p > eps){
p*=(x*x*(2*i + 1)*(2*i + 1))/(2*(i+1)*(2*i + 3));
s+=p;
i++;
}
countIter=i;
return s;
}
//---------------------------------------------------------------------------
double __fastcall TForm1::my_ln (double x)
{
const double eps=1e-6;
const double lnln=M_LN2; //ln2
int k=0;
while(x>2.0)
{
x/=2.0;
k++;
}
x-=1.;
double s=0;
int n=1;
double an=x;
while (fabs(an)>eps)
{
s+=an;
++n;
an*=-x*(n-1)/n;
}
s+=k*lnln;
return s;
}
//---------------------------------------------------------------------------
double __fastcall TForm1::myarctg (double x,double eps){
double dx = x;
double y = dx;
int n = 1,m=0;
while(fabs(dx) > eps){
++n;
dx *= -x*x*(2*n - 3)/(2*n - 1.);
y += dx;
m++;
}
countIter=m;
return y;
}
//--------------------------------------------------------------------------
double __fastcall TForm1::myarsh (double x,double eps){
double y=0;
int n=0;
double dx = x;
y = dx;
for (int i=1; fabs(dx)>eps; i++)
{
dx*=-x*x*(2.*i+1.)*(2.*i+1.)/(2.*i+2.)/(2.*i+3.);
// dx*= x*x/(2.*i+2.)/(2.*i+3.);
y+=dx;
n++;
}
countIter=n;
return y;
}
//-------------------------------------------------------------------
double __fastcall TForm1::mycosh(double x, double eps) //гепербол кос
{
double result = 1;
double member = 1;
int n=0;
for (int i = 1; abs(member) >= eps; i++)
{
member *= x * x;
member /= 2*i * (2*i - 1);
result += member;
n++;
}
countIter=n;
return result;
}
//----------------------------------------------------------------------
double __fastcall TForm1::myacos(double x, double eps){
int i = 0;
double p = x;
double s = x;
while (p > eps){
p*=(x*x*(2*i + 1)*(2*i + 1))/(2*(i+1)*(2*i + 3));
s+=p;
i++;
}
countIter=i;
return 3.14/2-s;
}
//---------------------------------------------------------------------------
double __fastcall TForm1::myexp(double x,double eps){
double s;
return s=1+(x/1)+(x*x/2)+(x*x*x/6)+(x*x*x*x/24)+(x*x*x*x*x/120)+(x*x*x*x*x*x/720)
+(x*x*x*x*x*x*x/5040)+(x*x*x*x*x*x*x*x/40320);
}
//------------------------------------------------------------------------------------
void __fastcall TForm1::LabeledEdit1KeyPress(TObject *Sender, char &Key)
{
if(Key >= '0' && Key <= '9' || Key == VK_BACK || Key == ',' ) return;
Key=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::LabeledEdit1ContextPopup(TObject *Sender,
TPoint &MousePos, bool &Handled)
{
Handled=true;
}
//---------------------------------------------------------------------------
=
=
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <math.h>
#include <Math.hpp>
#include <ExtCtrls.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TListBox *ListBox1;
TImage *Image1;
TScrollBar *ScrollBar1;
TBevel *Bevel1;
TCheckBox *CheckBox1;
TCheckBox *CheckBox2;
TLabel *Label1;
TLabel *Label2;
TLabeledEdit *LabeledEdit1;
TLabel *Label3;
TLabel *Label4;
TLabel *Label5;
void __fastcall Button1Click(TObject *Sender);
void __fastcall ScrollBar1Change(TObject *Sender);
void __fastcall LabeledEdit1KeyPress(TObject *Sender, char &Key);
void __fastcall LabeledEdit1ContextPopup(TObject *Sender,
TPoint &MousePos, bool &Handled);
private: // User declarations
public: // User declarations
int countIter;
double __fastcall MySum(double x,double epsilon);
double __fastcall mycos(double x,double eps);
double __fastcall mysin(double x,double eps);
double __fastcall mysinh(double x,double eps);
double __fastcall myasin(double x, double eps);
double __fastcall my_ln (double x);
double __fastcall myarctg (double x,double eps);
double __fastcall myarsh (double x,double eps);
double __fastcall mycosh(double x, double eps);
double __fastcall myacos(double x, double eps);
double __fastcall mytan(double x, double eps);
double __fastcall myexp(double x,double eps);
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
=
|