Вход

разработка программы аппроксимации функциональной зависимости

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 276804
Дата создания 10 ноября 2014
Страниц 36
Покупка готовых работ временно недоступна.
1 670руб.

Описание

Задание.
«Разработать алгоритм и программу аппроксимации функции и получить зависимость от заданного параметра.» Вариант моего задания- 7.

1. Метод аппроксимации: полином Лагранжа.

2. Аналитическая функция, для аппроксимации:

где Значение параметров в этой формуле:

Параметр Его значение
I0 10-7 A
m 1.2
n 2
Cб0 30 пФ
φ0 0.8 В
τ 10-7 c
φN 0.026 В

3. Исследовать зависимость погрешности от расстояния между узлами интерполяции.
...

Содержание

Содержание.

Содержание………………………………………………………………………………...2
Задание……………………………………………………………………………………...3
Теория вопроса……………………………………………………………………………..4
Алгоритм программы……………………………………………………………………....7
Программа……………………………………………………………………………….....21
Пример работы……………………………………………………………………………..28
Проверка программы……………………………………………………………………....30
Исследовательская часть………………………………………………………………......32
Список литературы………………………………………………………………………...35

Введение

----

Фрагмент работы для ознакомления

x[k,j]:= UN+(j-1)*a;
end;
until j>n;
end;
Function F1(a:extended):extended;
var
Cb, t, f0, ft, m, I0: extended;
begin
Cb:=30*0.000000001; t:=0.0000001; f0:=0.8; ft:=0.026;
m:=1.2; I0:=0.0000001;
F1:=Cb*sqr(f0/(f0-a))+(t/(m*ft))*I0*exp(a/(m*ft));
end;
procedure TForm1.Button1Click(Sender: TObject);
var k,j,i,r: integer;
begin
UN := StrToFloat(edit1.Text);
DU := StrToFloat(edit3.Text);
sh[1] := StrToFloat(edit4.Text);
n := StrToInt(edit5.Text);
j:=0; StringGrid1.ColCount:=n+1;
StringGrid1.Cells[0,0]:= 'Узлы';
StringGrid1.Cells[0,1]:= 'Значения функции';
repeat
begin
j:=j+1;
x[1,j]:= UN+(j-1)*sh[1];
C[1,j]:= F1(x[1,j]);
StringGrid1.Cells[j,0]:= FloatToStr(x[1,j]);
StringGrid1.Cells[j,1]:= FloatToStr(C[1,j]);
end;
until j>=n;
UK:=(n-1)*sh[1]+UN;
StringGrid2.ColCount:= Trunc((UK-UN)/DU+1);
u:=UN; k:=1; S[1]:=0;
repeat
begin
W[1,k]:=0; T[k]:=0;
for j:=1 to n do
begin
Pol (x, j,n,1, u, L);
C[1,j]:= F1(x[1,j]);
W[1,k]:= W[1,k]+ C[1,j]*L[j];
StringGrid2.Cells[k,1]:= FloatToStr(W[1,k]);
StringGrid2.Cells[k,0]:= FloatToStr(u);
StringGrid2.Cells[0,0]:= 'Аргумент';
StringGrid2.Cells[0,1]:= 'Аппроксим';
StringGrid2.Cells[0,2]:= 'Точное';
StringGrid2.Cells[0,3]:= 'Погрешность %';
end;
T[k]:=F1(u);
StringGrid2.Cells[k,2]:= FloatToStr(T[k]);
EPS[k]:= abs(W[1,k]-T[k])/T[k];
S[1]:=S[1]+EPS[k];
StringGrid2.Cells[k,3]:= FloatToStr(EPS[k]*100);
u:=u+DU; k:=k+1;
end;
until u>UK;
S[1]:= S[1]/k;
Edit6.Text:= FloatToStr(S[1]*100);
r:=2; sh[r]:=0.05;
repeat
begin
Uzly (UN,n,sh[r],r,x);
u:=UN; k:=1; S[r]:=0; UK:=(n-1)*sh[r]+UN;
repeat
begin
W[r,k]:=0; T[k]:=0;
for j:=1 to n do
begin
Pol (x, j,n,r, u, L);
C[r,j]:= F1(x[r,j]);
W[r,k]:= W[r,k]+ C[r,j]*L[j];
end;
T[k]:=F1(u);
EPS[k]:= abs(W[r,k]-T[k])/T[k];
S[r]:=S[r]+EPS[k];
u:=u+DU; k:=k+1;
end;
until u>UK;
S[r]:=S[r]/k;
r:=r+1; sh[r]:=sh[r-1]+0.05;
end;
until r>6;
form2.show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;
end.
Программный код 2 формы:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls;
type
TForm2 = class(TForm)
Chart1: TChart;
Series1: TLineSeries;
Series2: TLineSeries;
Series3: TLineSeries;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses Unit1, Unit3;
procedure TForm2.Button1Click(Sender: TObject);
begin
series1.Clear;
series2.Clear;
series3.Clear;
end;
procedure TForm2.FormActivate(Sender: TObject);
var k: integer;
begin
series1.Clear;
series2.Clear;
series3.Clear;
u:=UN; k:=1;
repeat
begin
Chart1.SeriesList[0].addXY(u,W[1,k],'',clBlack);
Chart1.SeriesList[2].addXY(u,T[k],'',clBlue);
u:=u+DU; k:=k+1;
end;
until u>(n-1)*sh[1]+UN;
for k:=1 to n do
Chart1.SeriesList[1].addXY(x[1,k],C[1,k],'',clGreen)
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
form3.Show;
end;
end.
Программный код 3 формы:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls;
type
TForm3 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Chart1: TChart;
Series1: TLineSeries;
Chart2: TChart;
Series2: TLineSeries;
Series3: TLineSeries;
Series4: TLineSeries;
Chart3: TChart;
LineSeries1: TLineSeries;
LineSeries2: TLineSeries;
LineSeries3: TLineSeries;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm3.FormActivate(Sender: TObject);
var
i,k,r:integer;
begin
Edit1.Text:= FloatToStr(S[2]*100);
Edit2.Text:= FloatToStr(S[3]*100);
Edit3.Text:= FloatToStr(S[4]*100);
Edit4.Text:= FloatToStr(S[5]*100);
Edit5.Text:= FloatToStr(S[6]*100);
series1.Clear;
series2.Clear;
series3.Clear;
for i:=2 to 6 do
Chart1.SeriesList[0].addXY(sh[i],S[i]*100,'',clGreen);
u:=UN; k:=1; r:=2;
repeat
begin
Chart2.SeriesList[0].addXY(u,W[r,k],'',clBlack);
Chart2.SeriesList[1].addXY(u,T[k],'',clBlue);
u:=u+DU; k:=k+1;
end;
until u>(n-1)*sh[r]+UN;
for k:=1 to n do
Chart2.SeriesList[2].addXY(x[r,k],C[r,k],'',clGreen);
u:=UN; k:=1; r:=5;
repeat
begin
Chart3.SeriesList[0].addXY(u,W[r,k],'',clBlack);
Chart3.SeriesList[1].addXY(u,T[k],'',clBlue);
u:=u+DU; k:=k+1;
end;
until u>(n-1)*sh[r]+UN;
for k:=1 to n do
Chart3.SeriesList[2].addXY(x[r,k],C[r,k],'',clGreen);
end;
end.
Пример работы моей программы.
Шаг 1. Выберем следующие начальные параметры. Нижняя граница аппроксимации: 0,1. Выберем для аппроксимации 4 узла, расстояние между которыми 0,1. Для того чтобы функция выглядела непрерывной шаг изменения аргумента выберем 0,001.
Нажимаем кнопку «Строим» и видим, что на 1 форме заполнилась таблица (значения аргумента, аппроксимирующей и точной функции)
На 2 форме появились графики: аппроксимируемой и аппроксимирующей функции.
Нажмём на кнопку исследовательская часть и увидим следующее:

Проверка программы.
Для грамотной проверки правильности работы программы я составил подобную программу в системе MathCAD (параметры такие же) и сравнил результаты, выдаваемые обоими при одних и тех же входных данных.
Выберем 5 узлов интерполяции
Результат выдаваемой моей программой:
Видно что результаты полученые в двух средах разработках одинаковые.
Приведу для сравнения график самой зависимости, которую мы аппроксимируем. Полученный в MathCAD е.

Список литературы

Список используемой литературы:
http://ru.wikipedia.org./wiki
Справочная служба Maple.
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00413
© Рефератбанк, 2002 - 2024