Автор работы: Пользователь скрыл имя, 24 Июня 2013 в 09:49, курсовая работа
Целью курсовой работы является разработка программ:
Численных методов интегрирования функции;
Численных методов дифференцирования функции;
Численных методов решения дифференциального уравнения;
Для достижения данной цели есть необходимость выделить следующие основные задачи:
Практически закрепить и повторить знания основ языка C++Builder 6, для успешного программирования;
Повторить теоретический материал по численным методам;
Написать программы численных методов соответственно заданию;
Сравнить методы и сделать выводы по проделанной работе.
Введение 3
Теоретическая часть 4
1. Численные методы интегрирования функций 4
1.2 Формула Ньютона – Котеса: метод трапеций. 5
1.3 Формула Ньютона – Котеса: метод Симпсона. 6
1.4 Метод Лежандра – Гаусса. 7
1.5 Метод Монте-Карло. 8
2. Численные методы дифференцирования функций 9
2.1 Интерполяционная формула Ньютона 10
3. Численные методы решения дифференциальных уравнений 11
3.1 Метод Эйлера 11
3.2 Методы Рунге-Кутты 12
Практическая часть 14
Заключение 21
Список использованных источников 22
19
КП.230100. 08 .ПЗ
ти следует увеличить количество шагов.
Изм.
Лист
№ докум.
Подпись
Дата
Лист
20
КП.230100. 08 .ПЗ
По результатам проделанной работы мы запрограммировали численные методы интегрирования функций, дифференцирования функций и методы решения дифференциальных уравнений. Вычислили эти методы ручным способом в программе Excel. Результаты, полученные в программе, совпадают с ручными вычислениями. Так же был произведен анализ полученных результатов с точными результатами. Точность методов зависит от количества шагов, от точности округления, от выбранного метода. Сравнивая методы Симпсона, трапеций и прямоугольников, метод Симпсона дает нам самый точный результат, но для его решения нужно больше времени по сравнению с методом прямоугольника. Метод Эйлера имеет высокую погрешность по сравнению с методом Рунге – Кутта, Изм.
Лист
№ докум.
Подпись
Дата
Лист
21
КП.230100. 08 .ПЗ
метод Рунге – Кутта требует большего объема вычислений, и это дает более высокую точность полученного решения. У каждого метода есть свои плюсы и недостатки, например, удобство вычисления, быстрота нахождения результата, большая погрешность метода и т. д. Для выбора метода нужно понять цель исходного задания и в зависимости от этого выбрать подходящий метод решения определенной задачи. Численные методы решения используются в тех случаях, когда не удается найти их решение в аналитическом виде.
Изм.
Лист
№ докум.
Подпись
Дата
Лист
22
КП.230100. 08 .ПЗ
Листинг главной страницы:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form6->Show(); //Вызов следующего окна
}
//----------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ Close(); } //Выход
Листинг выбора задания курсового проекта:
void __fastcall TForm6::Button2Click(TObject *Sender)
{Изм.
Лист
№ докум.
Подпись
Дата
Лист
23
КП.230100. 08 .ПЗ
if (RadioGroup1->ItemIndex==0) //условие выбора задания
Form2->Show(); //Выбор задания 1
if (RadioGroup1->ItemIndex==1)
Form7->Show(); //Выбор задания 2
if (RadioGroup1->ItemIndex==2)
Form8->Show(); //Выбор задания 3
}
//----------------------------
void __fastcall TForm6::Button1Click(TObject *Sender)
{ Close(); } //Выход
Листинг задания 1:
void __fastcall TForm2::Button1Click(TObject *Sender)
{ Close(); } //Выход
//----------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
int n,i;
float a, b, h, C1, C2, t=1.09903;
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
n=StrToFloat(Edit3->Text);
float x[100];float y[100],xis[100],yis[100],S1,
h=(b-a)/n;
StringGrid1->Cells[0][0] = "Номер узла";
for(i=1;i<=11;i++)
StringGrid1->Cells[0][i]=i;
StringGrid1->Cells[0][0] = "Номер узла";
StringGrid1->Cells[1][0]="x[i]
StringGrid1->Cells[2][0]="y[i]
StringGrid1->Cells[3][0]="x[
StringGrid1->Cells[4][0]="y[
x[0]=a; y[0]=(x[0]*x[0]+1)*sin(x[0]-0.
StringGrid1->Cells[1][1]=x[0];
StringGrid1->Cells[2][1]=y[0];
for(i=1;i<=n;i++)
{x[i]=x[i-1]+h;
StringGrid1->Cells[1][i+1]=x[
y[i]=(x[i]*x[i]+1)*sin(x[i]-0.
StringGrid1->Cells[2][i+1]=y[
}
for(i=0;i<n;i++)
{xis[i]=(x[i]+x[i+1])/2; Изм.
Лист
№ докум.
Подпись
Дата
Лист
24
КП.230100. 08 .ПЗ
StringGrid1->Cells[3][i+2]=
yis[i]=(xis[i]*xis[i]+1)*sin(
StringGrid1->Cells[4][i+2]=
S1=S2=S3=0;
for(i=0;i<n;i++)
S1=S1+h*y[i];
Label1->Caption="Метод левых прямоугольников = " + FloatToStr(S1);
for(i=1;i<=n;i++)
S2=S2+h*y[i];
Label2->Caption="Метод правых прямоугольников = " + FloatToStr(S2);
for(i=0;i<n;i++)
S3=S3+h*yis[i];
Label3->Caption="Метод средних прямоугольников = " + FloatToStr(S3);
for(i=1;i<n;i++)
R=R+y[i];
S4=h*((y[0]+y[n])/2+R);
Label4->Caption="Метод трапеций = " + FloatToStr(S4);
for(i=1;i<n;i++)
{if(i%2==0)
C2=C2+2*y[i];
else C1=C1+4*y[i];
}
S5=h/3*(y[0]+C1+C2+y[n]);
Label5->Caption="Метод Симпсона = " + FloatToStr(S5);
Label19->Caption=S1-t;
Label20->Caption=S2-t;
Label21->Caption=S3-t;
Label22->Caption=S4-t;
Label23->Caption=S5-t;
}
Листинг задания 2:
void __fastcall TForm7::Button1Click(TObject *Sender)
{
int i, j;
float a, b, n, h, f, t, s;
float x[100], y[100], q[100], w[100], e[100], r[100], g[100], u[100], o[100];
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
h=StrToFloat(Edit3->Text);
s=StrToFloat(Edit4->Text);
n=(b-a)/h;
StringGrid2->Cells[0][0] = "Номер узла";
for(i=0;i<=4;i++)
StringGrid2->Cells[0][i+1]=i;
StringGrid2->Cells[1][0]="x";
StringGrid2->Cells[2][0]="y";
StringGrid2->Cells[3][0]="y(x)
StringGrid2->Cells[7][0]="y'(
for(i=4;i<7;i++)
StringGrid2->Cells[i][0]="dx"+
StringGrid2->Cells[1][1]=0.70;
StringGrid2->Cells[1][2]=0.75;
StringGrid2->Cells[1][3]=0.80;
StringGrid2->Cells[1][4]=0.85;
StringGrid2->Cells[1][5]=0.90;
Изм.
Лист
№ докум.
Подпись
Дата
Лист
25
КП.230100. 08 .ПЗ
for(i=0;i<5;i++)
{ x[i]=StrToFloat(StringGrid2->
y[i]=StrToFloat(StringGrid2->
for (i=0;i<10;i++)
q[i]=w[i]=e[i]=0;
for(i=0;i<4;i++)
{q[i]=y[i+1]-y[i];
StringGrid2->Cells[4][i+1]=q[
}
for(i=0;i<4-1;i++)
{w[i]=q[i+1]-q[i];
StringGrid2->Cells[5][i+1]=w[
}
for(i=0;i<4-2;i++)
{e[i]=w[i+1]-w[i];
StringGrid2->Cells[6][i+1]=e[
}
i=0;
do i++;
while(s>x[i]) ;
u[0]=(y[i]-y[i-1])/(x[i]-x[i-
o[0]=y[i-1]-u[0]*x[i-1];
g[0]=u[0]*s+o[0];
StringGrid2->Cells[3][1]=g[0];
h=x[i+1]-x[i]; t=(s-x[0])/h;
f=(1/h)*((q[i]+(2*t-1)*w[i]/2+
StringGrid2->Cells[7][1]=f;
}
//----------------------------
void __fastcall TForm7::Button2Click(TObject *Sender)
{ Close(); }
Листинг задания 3:
void __fastcall TForm8::Button1Click(TObject *Sender)
{ int i,n,j,k;
float a, c, b, h, x[100], y[100], q[100],w[100],e[100],r[100],z[
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
c=StrToFloat(Edit3->Text);
n=StrToFloat(Edit4->Text);
StringGrid1->Cells[0][0] = "i";
StringGrid2->Cells[0][0] = "i";
StringGrid3->Cells[0][0] = "Погрешность" ;
for(i=0;i<=n+1;i++)
{ StringGrid1->Cells[0][i+1]=i;
StringGrid2->Cells[0][i+1]=i;
StringGrid1->Cells[1][0]="x";
StringGrid1->Cells[2][0]="y";
StringGrid1->Cells[3][0]="y'";
StringGrid2->Cells[1][0]="x";
StringGrid2->Cells[2][0]="ki(
StringGrid2->Cells[3][0]="ki(
StringGrid2->Cells[4][0]="ki(
StringGrid2->Cells[5][0]="ki(
StringGrid2->Cells[6][0]="y";
Изм.
Лист
№ докум.
Подпись
Дата
Лист
26
КП.230100. 08 .ПЗ
h=(b-a)/n; //метод эйлера
StringGrid1->Cells[2][1]=c;
x[0]=a; y[0]=c; k=0;
for(i=0;i<n+1;i++)
{ StringGrid1->Cells[1][i+1]=x[
x[i+1]=x[i]+h;}
for (i=0;i<n+1;i++)
{
StringGrid1->Cells[2][i+1]=y[
z[i]=2.5*x[i]+cos(y[i]+0.6);
y[i+1]=y[i]+h*z[i];
if(k<n) {k++;
StringGrid1->Cells[3][i+1]=z[
}
s[0]=a; f[0]=c; // метод рунге-кутта
for(i=0;i<n+1;i++)
{ StringGrid2->Cells[1][i+1]=s[
s[i+1]=s[i]+h;}
for(i=0;i<n+1;i++)
{ q[i]=2.5*s[i]+cos(f[i]+0.6);
w[i]=2.5*(s[i]+h/2)+cos(f[i]+
e[i]=2.5*(s[i]+h/2)+cos(f[i]+
r[i]=2.5*(s[i]+h)+cos(f[i]+e[
f[i+1]=f[i]+(h/6)*(q[i]+w[i]*
StringGrid2->Cells[2][i+1]=q[
StringGrid2->Cells[3][i+1]=w[
StringGrid2->Cells[4][i+1]=e[
StringGrid2->Cells[5][i+1]=r[
StringGrid2->Cells[6][i+1]=f[
for(i=0;i<n+1;i++)
StringGrid3->Cells[0][i+1]=
}
//----------------------------
void __fastcall TForm8::Button2Click(TObject *Sender)
{ Close(); }
Изм.
Лист
№ докум.
Подпись
Дата
Лист
27
КП.230100. 08 .ПЗ
Рис.8. Главное окно программы
Рис.9. Выбор задания курсового проекта
Информация о работе Численные методы решения дифференциальных уравнений