Методы решения типовых математических задач
Программирование процесса определения погрешности значений функций, приближенного решения систем уравнений, аппроксимации функций, вычисления интегралов, численного интегрирования дифференциальных уравнений, используя среду разработки Borland Delphi.
Рубрика | Математика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 12.12.2012 |
Размер файла | 302,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Задание 1. Определение погрешности значений функций
Задание 2. Приближенное решение уравнений
Задание 3. Приближенное решение систем уравнений
Задание 4. Аппроксимация функций
Задание 5. Приближенное вычисление интегралов
Задание 6. Численное интегрирование дифференциальных уравнений
Задание 1. Определение погрешности значений функций
Вычислите значения величин х и у и оцените абсолютные и относительные погрешности этих значений при заданных значениях параметров a, b, c (указанные значащие цифры каждого из них являются верными).
Решение
Найдем значение х 0 и у 0 при а 0=1; b0=3; c0=1
Найдем значение х 1 и у 1 при а=1,25; b=3; c=1
Вычислим приближенные значения х 2 и у 2 при а 0=1,25; b0=3; c0=1
;
;
Абсолютная погрешность:
Относительная погрешность:
;
Задание 2. Приближенное решение уравнений
Дано уравнение f(x) = 0. Требуется:
1. Локализовать действительные корни уравнения;
2. Осуществить вручную 3 шага вычислений одного из корней указанным методом;
3. Составить программу, реализующую на компьютере указанный в варианте метод расчета;
4. Найти все корни уравнения с точностью = 10 - 4 с помощью программы.
В вариантах с номерами 5п-4 использовать метод половинного деления; с номерами 5п-3 - метод хорд; с номерами 5п-2 - метод касательных; с номерами 5п-1 - комбинированный метод хорд и касательных; с номерами 5п - метод простых итераций. Здесь п - натуральное число(1, 2, 3, и т.д.).
1. Локализовать действительные корни уравнения
Интервалы изоляции корня определяем графически как абсциссу точки пересечения графиков функций:
рис.1.
Из графика находим интервал (1;2)
2. Осуществить вручную 3 шага вычислений одного из корней указанным методом.
Метод касательных.
Схематично последовательное нахождение приближений к корню рассматриваемым методом изображено на рис.2.
Рис.2
Каждое следующее приближение определяется как первая координата точки пересечения касательной к графику функции у = f(x) с осью 0x.
Итерационная схема отыскания корня имеет вид:
(2.5)
Здесь f (x) - первая производная функции f(x).
Условием окончания расчетов по формулам (2.5) может служить неравенство:
(2.6),
;
на , тогда итерационная формула имеет вид:
причем х0=а, в нашем случае, а=1, x0=1.
1) итерация
2) итерация
3) итерация
4) итерация
3. Составить программу, реализующую на компьютере указанный в варианте метод расчета
Программа
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Image1: TImage;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function fx(x:real): real; // объявление функции
begin
fx:=ln(x*x+2)-exp(-2*x)-1; // сама функция
end;
function fx2(x:real): real;
begin
fx2:= (4-2*x*x)/sqr((x*x+2))-4*exp(-2*x);
end;
function fx1(x:extended): extended;
begin
fx1:=2*x/(x*x+2)+2*exp(-2*x);
end;
procedure TForm1.Button1Click(Sender: TObject);
label 1;
var
a,b,e,ep: real; // объявление переменных
x0,f1,f2,x1,x: real;
k:integer;
s1,s2:string;
begin
a:=strtofloat(edit1.Text);
b:=strtofloat(edit2.Text);
e:=StrToFloat(edit3.Text);
k:=0;
ep:=e;
x:=(a+b)/2;
if fx1(x)*fx2(x)>0 then
x0:=b else x0:=a;
x1:=x0-fx(x0)/fx1(x0);
while abs(x1-x0)>e do
begin
x0:=x1;
x1:=x0-fx(x0)/fx1(x0);
end;
str(x1:10:8,s1);
str(f2:10:8,s2);
label1.Caption:='x='+floattostr(x1);
label2.Caption:='f(x)='+floattostr(fx(x1));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
end.
Результат
Задание 3. Приближенное решение систем уравнений
Дана система четырех линейных уравнений с четырьмя неизвестными х 1, х 2, х 3, х 4. Расширенная матрица этой системы имеет вид:
где В=(b1, b2, b3, b4)T- столбец свободных членов системы Ах = В.
Требуется:
1. Найти приближенно решение данной системы, сделав три итерации вручную и взяв в качестве начального приближения нулевой набор
2. Составить программу для нахождения приближенного, с заранее заданной точностью , решения данной системы.
В нечетных вариантах применить метод простых итераций, в четных - метод Зейделя. В программе предусмотреть возможность варьирования точности, вывода как искомых решений, так и невязок
(п - номер итерации).
Требуется:
1. Найти приближенное решение данной системы, сделав три итерации вручную и взяв в качестве начального приближения нулевой набор
2. Составить программу для нахождения приближенного, с заранее заданной точностью е, решения данной системы.
В программе предусмотреть возможность варьирования точности, вывода как искомых решений, так и невязок
(n- номер итерации)
Метод Зейделя
1) Условие сходимости
Следовательно, система сходится. За начальную итерацию принимаем
Первая итерация
Вторая итерация
Третья итераций
Программа
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit1: TEdit;
Label9: TLabel;
Image1: TImage;
Label10: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a: array [1..4,1..4] of real;
b: array [1..4] of real;
e: real;
n: integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
a[1,1]:=9; a[1,2]:=-2; a[1,3]:=1; a[1,4]:=3; b[1]:=4 ;
a[2,1]:=3; a[2,2]:=10; a[2,3]:=1; a[2,4]:=-1; b[1]:=-4;
a[3,1]:=-1; a[3,2]:=2; a[3,3]:=8; a[3,4]:=3; b[1]:=2;
a[4,1]:=1; a[4,2]:=-1; a[4,3]:=-3; a[4,4]:=11; b[1]:=4;
n:=4;
end;
procedure TForm1.Button1Click(Sender: TObject);
label l1;
var
i,j,k: integer;
s,e,ep: real;
x: array [1..4] of real;
xn: array [1..4] of real;
t: array [1..4] of real;
bool: boolean;
s1,s2,s3,s4,s5,s6,s7,s8: string;
begin
x[1]:=0;
x[2]:=0;
x[3]:=0;
x[4]:=0;
e:=strtofloat(edit1.Text);
ep:= e;
k:=0;
repeat
ep:=ep*10;
k:=k+1;
until ep>=1;
bool:=false;
for i:=1 to 4 do x[i]:=b[i];
//while not bool do
// begin
l1: for i:=1 to 4 do
begin
s:=0;
for j:=1 to 4 do s:=s+a[i,j]*x[j];
xn[i]:=(b[i]-s)/a[i,i]+x[i];
t[i]:=abs(xn[i]-x[i]);
x[i]:=xn[i];
end;
for i:=1 to 4 do
begin
if t[i]>e then goto l1;
end;
str(x[1]:k+4:k,s1);
str(x[2]:k+4:k,s2);
str(x[3]:k+4:k,s3);
str(x[4]:k+4:k,s4);
str(t[1]:k+3:k+1,s5);
str(t[2]:k+3:k+1,s6);
str(t[3]:k+3:k+1,s7);
str(t[4]:k+3:k+1,s8);
Label1.Caption:='x1 = '+ s1;
Label2.Caption:='x2 = '+ s2;
Label3.Caption:='x3 = '+ s3;
Label4.Caption:='x4 = '+ s4;
Label5.Caption:='Невязка 1 = '+s5;
Label6.Caption:='Невязка 2 = '+s6;
Label7.Caption:='Невязка 3 = '+s7;
Label8.Caption:='Невязка 4 = '+s8;
end;
end.
Результат
Задание 4. Аппроксимация функций
уравнение интеграл дифференциальный delphi
Даны наборы десяти значений независимой переменной x и соответствующих им значений функции y. Требуется:
1) Методом наименьших квадратов (МНК) найти аппроксимацию зависимости y(x) в виде . С помощью найденной зависимости найти значения и .
2) Найти те же значения и методом квадратичной интерполяции (МКИ).
3) Программными средствами построить на одной координатной плоскости параболы, полученные с помощью МНК и с помощью МКИ.
Х |
0,1 |
0,2 |
0,3 |
0,4 |
0,5 |
0,6 |
0,7 |
0,8 |
0,9 |
1,0 |
|
У |
0,1 |
0,2 |
0,4 |
0,7 |
0,9 |
1,3 |
1,9 |
2,6 |
3,5 |
4,6 |
|
Х 1=0,84 |
Х 2=0,27 |
Программа
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ExtCtrls, TeeProcs, TeEngine, Chart, StdCtrls,math,
Series;
type
TForm1 = class(TForm)
Chart1: TChart;
StringGrid1: TStringGrid;
Series1: TLineSeries;
Series2: TPointSeries;
Series3: TPointSeries;
Series4: TPointSeries;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Series5: TPointSeries;
Series6: TPointSeries;
GroupBox1: TGroupBox;
Button2: TButton;
Button3: TButton;
GroupBox2: TGroupBox;
Button1: TButton;
Button4: TButton;
Image1: TImage;
Series7: TLineSeries;
Series8: TLineSeries;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Label4: TLabel;
Label5: TLabel;
Button8: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x1:array[1..10] of real = (0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1);
x2:array[1..10] of real = (0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1);
y1:array[1..10] of real = (8.3,7.2,6.4,5.9,5.8,5.6,5.5,5.2,5.1,4.9);
y2:array[1..10] of real = (8.3,7.2,6.4,5.9,5.8,5.6,5.5,5.2,5.1,4.9);
k:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
sx1,sx2,sx3,sx4,sx2y,sxy,sy:real;
det,deta,detb,detc:real;
a,b,c:real;
y11,y22,x11,x22: real;
s1,s2: string;
q:array[1..3,1..3] of real;
w:array[1..3] of real;
y:array[1..10] of real;
begin
if RadioButton1.Checked then
begin
for i:=1 to 10 do
begin
x1[i]:=x2[i];
y1[i]:=y2[i];
end;
end;
if RadioButton2.Checked then
begin
for i:=1 to 10 do
begin
x1[i]:=strtofloat(StringGrid1.Cells[i,0]);
y1[i]:=strtofloat(StringGrid1.Cells[i,1]);
end;
end;
sx1:=0; sx3:=0; sx2y:=0; sy:=0;
sx2:=0; sx4:=0; sxy:=0;
for i:=1 to 10 do
begin
sx1 := sx1+x1[i];
sx2 := sx2+power(x1[i],2);
sx3 := sx3+power(x1[i],3);
sx4 := sx4+power(x1[i],4);
sx2y := sx2y + power(x1[i],2)*y1[i];
sxy := sxy + x1[i]*y1[i];
sy := sy + y1[i];
end;
q[1,1]:=sx4; q[1,2]:=sx3; q[1,3]:=sx2; w[1]:=sx2y;
q[2,1]:=sx3; q[2,2]:=sx2; q[2,3]:=sx1; w[2]:= sxy;
q[3,1]:=sx2; q[3,2]:=sx1; q[3,3]:=10; w[3]:=sy;
det:= (q[1,1]*q[2,2]*q[3,3]+q[2,1]*q[3,2]*q[1,3]+q[1,2]*q[2,3]*q[3,1])-(q[1,3]*q[2,2]*q[3,1]+q[2,3]*q[3,2]*q[1,1]+q[1,2]*q[2,1]*q[3,3]);
deta:= (w[1]*q[2,2]*q[3,3]+w[2]*q[3,2]*q[1,3]+q[1,2]*q[2,3]*w[3])-(q[1,3]*q[2,2]*w[3]+q[2,3]*q[3,2]*w[1]+q[1,2]*w[2]*q[3,3]);
detb:= (q[1,1]*w[2]*q[3,3]+q[2,1]*w[3]*q[1,3]+w[1]*q[2,3]*q[3,1])-(q[1,3]*w[2]*q[3,1]+q[2,3]*w[3]*q[1,1]+w[1]*q[2,1]*q[3,3]);
detc:= (q[1,1]*q[2,2]*w[3]+q[2,1]*q[3,2]*w[1]+q[1,2]*w[2]*q[3,1])-(w[1]*q[2,2]*q[3,1]+ w[2]*q[3,2]*q[1,1]+q[1,2]*q[2,1]*w[3]);
a := deta/det;
b := detb/det;
c := detc/det;
series1.Clear;
series2.Clear;
series3.Clear;
series4.Clear;
for i:=1 to 10 do
begin
y[i]:=a*x1[i]*x1[i]+b*x1[i]+c;
str (y[i]:10:4,s1);
str (x1[i]:10:4,s2);
series1.AddXY(x1[i],y[i]);
series2.AddXY(x1[i],y1[i]);
end;
x11:=0.27;
x22:=0.84;
y11:=a*x11*x11+b*x11+c;
y22:=a*x22*x22+b*x22+c;
series3.AddXY(x11,y11);
series4.AddXY(x22,y22);
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
StringGrid1.Cells[0,0]:= 'Значение Х ';
StringGrid1.Cells[0,1]:= 'Значение У ';
for i:=1 to 10 do
begin
StringGrid1.Cells[i,0]:=floattostr(x1[i]);
StringGrid1.Cells[i,1]:=floattostr(y1[i]);
end;
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.RadioButton1Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to 10 do
begin
StringGrid1.Cells[i,0]:=floattostr(x2[i]);
StringGrid1.Cells[i,1]:=floattostr(y2[i]);
end;
if RadioButton1.Checked then StringGrid1.Enabled:=false;
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
if RadioButton2.Checked then StringGrid1.Enabled:=true;
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
x11,y11: real; //qwy massiwi
a,b,c:real;
t1,t2,t3:real;
nen:real;
xim1,xi1,xip1: real;
q:array[1..3,1..3] of real;
w:array[1..3] of real;
y3:array[1..10] of real;
yim1,yi,yip1:real;
det,deta,detb,detc:real;
begin
if RadioButton1.Checked then
begin
for i:=1 to 10 do
begin
x1[i]:=x2[i];
y1[i]:=y2[i];
end;
end;
if RadioButton2.Checked then
begin
for i:=1 to 10 do
begin
x1[i]:=strtofloat(StringGrid1.Cells[i,0]);
y1[i]:=strtofloat(StringGrid1.Cells[i,1]);
Button1.Click;
end;
end;
t1:=x1[1];
t2:=x1[1];
t2:=x1[1];
x11:=0.27;
//------
for i:=1 to 10 do
begin
if abs(t1-x11)<abs(x1[i]-x11) then
xim1:=t1
else
t1:=x1[i-1];
nen:=xim1;
end;
//------
for i:=1 to 10 do
begin
if (abs(t2-x11)<abs(x1[i]-x11))and(t2<>t1) then
xi1:=t2
else
t2:=x1[i-1];
nen:=xi1;
end;
//-----
for i:=1 to 10 do
begin
if (abs(t3-x11)<abs(x1[i]-x11))and(t3<>t1)and(t3<>t2) then
xip1:=t3
else
t3:=x1[i-1];
nen:=xip1;
end;
for i:=1 to 10 do
begin
if t1=x1[i]then
yim1:=y1[i];
if t2=x1[i]then
yi:=y1[i];
if t3=x1[i]then
yip1:=y1[i];
end;
q[1,1]:=xim1*xim1; q[1,2]:=xim1; q[1,3]:=1; w[1]:=yim1;
q[2,1]:=xi1*xi1; q[2,2]:=xi1; q[2,3]:=1; w[2]:= yi;
q[3,1]:=xip1*xip1; q[3,2]:=xip1; q[3,3]:=1; w[3]:=yip1;
det:= (q[1,1]*q[2,2]*q[3,3]+q[2,1]*q[3,2]*q[1,3]+q[1,2]*q[2,3]*q[3,1])-(q[1,3]*q[2,2]*q[3,1]+q[2,3]*q[3,2]*q[1,1]+q[1,2]*q[2,1]*q[3,3]);
deta:= (w[1]*q[2,2]*q[3,3]+w[2]*q[3,2]*q[1,3]+q[1,2]*q[2,3]*w[3])-(q[1,3]*q[2,2]*w[3]+q[2,3]*q[3,2]*w[1]+q[1,2]*w[2]*q[3,3]);
detb:= (q[1,1]*w[2]*q[3,3]+q[2,1]*w[3]*q[1,3]+w[1]*q[2,3]*q[3,1])-(q[1,3]*w[2]*q[3,1]+q[2,3]*w[3]*q[1,1]+w[1]*q[2,1]*q[3,3]);
detc:= (q[1,1]*q[2,2]*w[3]+q[2,1]*q[3,2]*w[1]+q[1,2]*w[2]*q[3,1])-(w[1]*q[2,2]*q[3,1]+ w[2]*q[3,2]*q[1,1]+q[1,2]*q[2,1]*w[3]);
a := deta/det;
b := detb/det;
c := detc/det;
series5.Clear;
series8.Clear;
y11:=a*x11*x11+b*x11+c;
series5.AddXY(x11,y11);
for i:=1 to 10 do
begin
y3[i]:=a*x1[i]*x1[i]+b*x1[i]+c;
series8.AddXY(x1[i],y3[i]);
end;
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
x11,y11: real; //qwy massiwi
a,b,c:real;
t1,t2,t3:real;
nen:real;
xim1,xi1,xip1: real;
q:array[1..3,1..3] of real;
w:array[1..3] of real;
y3:array[1..10] of real;
yim1,yi,yip1:real;
det,deta,detb,detc:real;
begin
if RadioButton1.Checked then
begin
for i:=1 to 10 do
begin
x1[i]:=x2[i];
y1[i]:=y2[i];
end;
end;
if RadioButton2.Checked then
begin
for i:=1 to 10 do
begin
x1[i]:=strtofloat(StringGrid1.Cells[i,0]);
y1[i]:=strtofloat(StringGrid1.Cells[i,1]);
Button1.Click;
end;
end;
t1:=x1[1];
t2:=x1[1];
t2:=x1[1];
x11:=0.84;
//------
for i:=1 to 10 do
begin
if abs(t1-x11)<=abs(x1[i]-x11) then
xim1:=t1
else
t1:=x1[i-1];
nen:=xim1;
end;
//------
for i:=1 to 10 do
begin
if (abs(t2-x11) < abs(x1[i]-x11)) and (t2<>t1) then
xi1:=t2
else
t2:=x1[i-1];
nen:=xi1;
end;
//-----
for i:=1 to 10 do
begin
if (abs(t3-x11)<=abs(x1[i]-x11))and(t3<>t1)and(t3<>t2) then
xip1:=t3
else
t3:=x1[i-1];
nen:=xip1;
end;
for i:=1 to 10 do
begin
if t1=x1[i]then
yim1:=y1[i];
if t2=x1[i]then
yi:=y1[i];
if t3=x1[i]then
yip1:=y1[i];
end;
q[1,1]:=xim1*xim1; q[1,2]:=xim1; q[1,3]:=1; w[1]:=yim1;
q[2,1]:=xi1*xi1; q[2,2]:=xi1; q[2,3]:=1; w[2]:= yi;
q[3,1]:=xip1*xip1; q[3,2]:=xip1; q[3,3]:=1; w[3]:=yip1;
det:= (q[1,1]*q[2,2]*q[3,3]+q[2,1]*q[3,2]*q[1,3]+q[1,2]*q[2,3]*q[3,1])-(q[1,3]*q[2,2]*q[3,1]+q[2,3]*q[3,2]*q[1,1]+q[1,2]*q[2,1]*q[3,3]);
deta:= (w[1]*q[2,2]*q[3,3]+w[2]*q[3,2]*q[1,3]+q[1,2]*q[2,3]*w[3])-(q[1,3]*q[2,2]*w[3]+q[2,3]*q[3,2]*w[1]+q[1,2]*w[2]*q[3,3]);
detb:= (q[1,1]*w[2]*q[3,3]+q[2,1]*w[3]*q[1,3]+w[1]*q[2,3]*q[3,1])-(q[1,3]*w[2]*q[3,1]+q[2,3]*w[3]*q[1,1]+w[1]*q[2,1]*q[3,3]);
detc:= (q[1,1]*q[2,2]*w[3]+q[2,1]*q[3,2]*w[1]+q[1,2]*w[2]*q[3,1])-(w[1]*q[2,2]*q[3,1]+ w[2]*q[3,2]*q[1,1]+q[1,2]*q[2,1]*w[3]);
a := deta/det;
b := detb/det;
c := detc/det;
series6.Clear;
series7.Clear;
//Button1.Click;
y11:=a*x11*x11+b*x11+c;
for i:=1 to 10 do
begin
y3[i]:=a*x1[i]*x1[i]+b*x1[i]+c;
series7.AddXY(x1[i],y3[i]);
end;
series6.AddXY(x11,y11);
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Timer1Timer(Sender: TObject);
var
DateTime : TDateTime;
str : string;
begin
DateTime := Time;
str := TimeToStr(DateTime);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
form1.Close;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
series1.Clear;
series3.Clear;
series4.Clear;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
series5.Clear;
series8.Clear;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
series6.Clear;
series7.Clear;
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
Series2.Clear;
end;
end.
Результат
Задание 5. Приближенное вычисление интегралов
Дан интеграл . Требуется:
1. Вычислить вручную методом, указанным в варианте, приближенное значение интеграла, разбив отрезок интегрирования на 8 частей.
2. Составить программу для вычисления на компьютере данного интеграла методом, указанным в варианте. В программе должна быть предусмотрена возможность варьирования точности.
В вариантах с номерами 3n-2 использовать метод прямоугольников, в вариантах с номерами 3n-1 - метод трапеций, в вариантах с номерами 3n - метод Симпсона. (n=1,2,…)
1. Вычислить вручную определенный интеграл указанным методом, приняв число интервалов разбиения отрезка интегрирования N=8 (метод прямоугольников).
Разобьем отрезок на 8 части. Шаг разбиения . Вычисляем в каждой точке разбиения значения подынтегральной функции
i |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
X |
1 |
1,125 |
1,25 |
1,375 |
1,5 |
1,625 |
1,75 |
1,875 |
2 |
|
Y |
0,910239 |
1,198449 |
1,544581 |
1,959033 |
2,455553 |
3,052755 |
3,776527 |
4,664044 |
5,77078 |
Формула прямоугольников
,
2. Составить программу для вычисления на компьютере данного интеграла методом прямоугольников. В программе должна быть предусмотрена возможность варьирования точности.
Программа
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Image1: TImage;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function fx(x:real):real;
begin
fx:=x*x/ln(4-x);
end;
procedure TForm1.Button1Click(Sender: TObject);
// процедура на расчет методом прямоугольников
var
ep,a,b: real;
i1,h,s,x,e,r,i: extended;
ii: integer;
k,n: integer;
s1: string;
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
e:=strtofloat(edit3.text);
n:=round(1/e);
k:=0;
ep:=e;
e:=1/n;
h:=(b-a)/n;
i1:=0;
i:=0;
r:=2*e;
while r>e do
begin
s:=0;
for ii:=1 to round(int((b-a)/ h)) do
begin
x:=a+h;
s:=s+fx(x);
end;
i:= h*s;
r:=abs(i-i1);
h:=h/2;
i1:=i;
end;
label1.Caption:=floattostr(i);
end;
end.
Результат
Задание 6. Численное интегрирование дифференциальных уравнений
Дано обыкновенное дифференциальное уравнение . Требуется приближенно найти частное решение этого уравнения, удовлетворяющее начальному условию . Для этого следует:
1) Вычислить вручную, с шагом h=0.1, пять последовательных значений искомого частного решения (в четных вариантах - методом Эйлера, в нечетных - методом Адамса).
2) Составить программу для расчета и построения на компьютере соответствующей этому решению интегральной кривой. Ограничиться значениями аргумента на отрезке [0;1]. В вариантах с четными номерами расчеты провести с использованием как метода Эйлера, так и метода Рунге- Кутта 3-го порядка; в вариантах с нечетными номерами - как метода Адамса, так и метода Рунге-Кутта 4-го порядка. В программах предусмотреть возможность варьирования шага h.
, y(0)= 0
Решение
При разбиении отрезка на 5 частей шаг постоянный h=0.2, значение
k |
x |
y |
|
0 |
0 |
0 |
|
1 |
0,2 |
0,1 |
|
2 |
0,4 |
0,217038 |
|
3 |
0,6 |
0,344405 |
|
4 |
0,8 |
0,475873 |
|
5 |
1 |
0,607114 |
Программа:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
y0, x0, a, b, h: extended;
implementation
{$R *.dfm}
function fxy(x,y: extended): extended;
begin
fxy:=(x+exp(y))/(y*y+exp(y));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x,y : extended;
K1,X1,Y1,K2,Y2,
K3,Y3,x2,k4,dy :extended;
begin
y0 := StrToFloat(Edit1.Text);
x0 := 0;
a := StrToFloat(Edit2.Text);
b := StrToFloat(Edit3.Text);
h := StrToFloat(Edit4.Text);
memo1.Lines.Add(' Метод Рунге-Кутта');
x:=x0;
y:=y0;
memo1.Lines.Add(' x='+floattostr(x)+'; y='+floattostr(y));
while x<=b do
begin
k1:=h*fxy(x,y);
x1:=x+h/2;
y1:=y+k1/2;
k2:=h*fxy(x1,y1);
y2:=y+k2/2;
k3:=h*fxy(x1,y2);
y3:=y+k3;
x2:=x+h;
k4:=h*fxy(x2,y3);
dy:=(k1+2*k2+2*k3+k4)/6;
y:=y+dy;
x:=x+h;
memo1.Lines.Add(' x='+floattostr(x)+'; y='+floattostr(y));
end;
memo1.Lines.Add('');
memo1.Lines.Add(' Метод Адамса ');
x:=x0;
y:=y0;
memo1.Lines.Add(' x='+floattostr(x)+'; y='+floattostr(y));
while x<=b do
begin
x:=x+h;
y:=y+h*fxy(x,y);
memo1.Lines.Add(' x='+floattostr(x)+'; y='+floattostr(y));
end;
end;
end.
Результат
Размещено на Allbest.ru
...Подобные документы
Численные методы решения систем линейных уравнений: Гаусса, простой итерации, Зейделя. Методы аппроксимации и интерполяции функций: неопределенных коэффициентов, наименьших квадратов. Решения нелинейных уравнений и вычисление определенных интегралов.
курсовая работа [322,7 K], добавлен 27.04.2011Вычисление приближенных величин и погрешностей. Решение алгебраических и трансцендентных уравнений, интерполяция функций и методы численного интегрирования. Применение метода наименьших квадратов к построению эмпирических функциональных зависимостей.
курсовая работа [378,5 K], добавлен 08.01.2013Задачи Коши и методы их решения. Общие понятия, сходимость явных способов типа Рунге-Кутты, практическая оценка погрешности приближенного решения. Автоматический выбор шага интегрирования, анализ брюсселятора и метод Зонневельда для его расчета.
курсовая работа [1,7 M], добавлен 03.11.2011Определение дифференциальных уравнений в частных производных параболического типа. Приведение уравнения второго порядка к каноническому виду. Принцип построения разностных схем. Конечно-разностный метод решения задач. Двусторонний метод аппроксимации.
дипломная работа [603,8 K], добавлен 24.01.2013Основные понятия теории погрешностей. Приближенное решение некоторых алгебраических трансцендентных уравнений. Приближенное решение систем линейных уравнений. Интерполирование функций и вычисление определенных интегралов, дифференциальных уравнений.
методичка [899,4 K], добавлен 01.12.2009Изучение численных методов приближенного решения нелинейных систем уравнений. Составление на базе вычислительных схем алгоритмов; программ на алгоритмическом языке Фортран - IV. Приобретение практических навыков отладки и решения задач с помощью ЭВМ.
методичка [150,8 K], добавлен 27.11.2009Дифференциальные уравнения как математический инструмент моделирования и анализа разнообразных явлений и процессов в науке и технике. Описание математических методов решения систем дифференциальных уравнений. Методы расчета токов на участках цепи.
курсовая работа [337,3 K], добавлен 19.09.2011Анализ методов решения систем дифференциальных уравнений, которыми можно описать поведение материальных точек в силовом поле, законы химической кинетики, уравнения электрических цепей. Этапы решения задачи Коши для системы дифференциальных уравнений.
курсовая работа [791,0 K], добавлен 12.06.2010Постановка задачи вычисления значения определённых интегралов от заданных функций. Классификация методов численного интегрирования и изучение некоторых из них: методы Ньютона-Котеса (формула трапеций, формула Симпсона), квадратурные формулы Гаусса.
реферат [99,0 K], добавлен 05.09.2010Неизвестная функция, ее производные и независимые переменные - элементы дифференциального уравнения. Семейство численных алгоритмов решения обыкновенных дифференциальных уравнений, их систем. Методы наименьших квадратов, золотого сечения, прямоугольников.
контрольная работа [138,9 K], добавлен 08.01.2016Исследование функции, построение ее графика, используя дифференциальное исчисление. Вычисление неопределенных интегралов, используя методы интегрирования. Пределы функции. Определение области сходимости степенного ряда. Решение дифференциальных уравнений.
контрольная работа [592,7 K], добавлен 06.09.2015Понятие, закономерности формирования и решения дифференциальных уравнений. Теорема о существовании и единственности решения задачи Коши. Существующие подходы и методы решения данной задачи, оценка погрешности полученных значений. Листинг программы.
курсовая работа [120,8 K], добавлен 27.01.2014Решение систем линейных алгебраических уравнений методом простой итерации. Полиномиальная интерполяция функции методом Ньютона с разделенными разностями. Среднеквадратическое приближение функции. Численное интегрирование функций методом Гаусса.
курсовая работа [2,4 M], добавлен 14.04.2009Решение систем линейных алгебраических уравнений методом исключения Гаусса. Табулирование и аппроксимация функций. Численное решение обыкновенных дифференциальных уравнений. Приближенное вычисление определенных интегралов. Решение оптимизационных задач.
курсовая работа [1,6 M], добавлен 21.11.2013Метод последовательного исключения неизвестных (метод Гаусса) при решении задач аппроксимации функции в прикладной математике. Метод Гаусса с выбором главного элемента и оценка погрешности при решении системы линейных уравнений, итерационные методы.
контрольная работа [94,4 K], добавлен 04.09.2010Методы решения систем линейных алгебраических уравнений (СЛАУ): Гаусса и Холецкого, их применение к конкретной задаче. Код программы решения перечисленных методов на языке программирования Borland C++ Builder 6. Понятие точного метода решения СЛАУ.
реферат [58,5 K], добавлен 24.11.2009Методы оценки погрешности интерполирования. Интерполирование алгебраическими многочленами. Построение алгебраических многочленов наилучшего среднеквадратичного приближения. Численные методы решения задачи Коши для обыкновенных дифференциальных уравнений.
лабораторная работа [265,6 K], добавлен 14.08.2010Приближенные числа и действия над ними. Решение систем линейных алгебраических уравнений. Интерполирование и экстраполирование функций. Численное решение обыкновенных дифференциальных уравнений. Отделение корня уравнения. Поиск погрешности результата.
контрольная работа [604,7 K], добавлен 18.10.2012Понятие и характеристика неопределенного интеграла, его свойства. Методы интегрирования функций: разложение, замена переменной, по частям. Задача Коши, ее содержание. Дисперсия случайной величины. Решения для дифференциальных уравнений n-порядка.
лекция [187,9 K], добавлен 17.12.2010Методы численного интегрирования, основанные на том, что интеграл представляется в виде предела суммы площадей. Геометрическое представление метода Гаусса с двумя ординатами. Численные примеры и сравнение методов. Решение систем алгебраических уравнений.
курсовая работа [413,4 K], добавлен 11.06.2014