Помощь в написании студенческих работ
Антистрессовый сервис

Интерполяция табличной функции по методу Ньютона

Курсовая Купить готовую Узнать стоимостьмоей работы

Minx, miny, maxx, maxy, dx, dy, tx: real; If (minx < maxx) and (miny < maxy) then. Function CalcIY (const Y: real):integer; Function CalcIX (const X: real):integer; Dy := imgWork. Height/(maxy — miny); For j := dgrdMain. RowCount to i do. Dx := imgWork. Width/(maxx — minx); Iy := CalcIY (pln.GetNode (i-1).y); Ix := CalcIX (pln.GetNode (i-1).x); If not pln. CalculateDelta (i, j). Result :=Round… Читать ещё >

Интерполяция табличной функции по методу Ньютона (реферат, курсовая, диплом, контрольная)

Содержание

  • Задание на курсовую работу
  • Интерполяция по Ньютону Разработка алгоритма решения задачи
  • Организация ввода и вывода данных
  • Организация контроля ошибочных действий пользователя
  • Приложение 1. Текст кода программы
  • Приложение 2. Руководство пользователя программы

btnSelFileClick (Sender: TObject);

begin

dgrdMain.Options := dgrdMain. Options — [goEditing];

edtCount.Enabled := false;

btnFileName.Enabled:= true;

edtFilename.Enabled := true;

btnLoad.Enabled := true;

end;

procedure TfrmMain. edtCountExit (Sender: TObject);

var j, i: integer;

begin

i:=StrToIntDef (edtCount.Text, 0);

if (i<3) then

begin

ShowMessage ('Количество узлов в сетке не может быть меньше 3');

edtCount.SetFocus;

exit;

end

else

begin

for j := dgrdMain. RowCount to i do

begin

dgrdMain.Cells[0,j] := InttoStr (j);

dgrdMain.Cells[1,j] := '';

dgrdMain.Cells[2,j] := '';

end;

dgrdMain.RowCount := i+1;

end;

end;

procedure TfrmMain. btnCalculateClick (Sender: TObject);

var

f: TextFile;

n:integer;

minx, miny, maxx, maxy, dx, dy, tx: real;

x, y: real;

i, j: Integer;

ix, iy: integer;

flag:boolean;

rct:TRect;

// Функции пересчёта из вещественных координат в экранные

function CalcIX (const X: real):integer;

begin

Result :=Round ((x — minx)*dx);

end;

function CalcIY (const Y: real):integer;

begin

Result :=Round ((maxy — y)*dy);

end;

begin

N:= dgrdMain. RowCount-1;

pln.Clear;

for I := 1 to N do

try

j:=1;

x := StrToFloat (dgrdMain.Cells[j, I]);

j:=2;

y := StrToFloat (dgrdMain.Cells[j, I]);

pln.Add (x, y);

if (i=1) then

begin

minx := x;

maxx := x;

miny := y;

maxy := y;

end

else

begin

if (x < minx) then minx := x;

if (x > maxx) then maxx := x;

if (y < miny) then miny := y;

if (y > maxy) then maxy := y;

end

except

ShowMessage (Format ('Ошибка в исходных данных Строка %d Столбец %d',[I, j]));

exit;

end;

if not pln. CalculateDelta (i, j)

then

begin

ShowMessage (Format ('Ошибка в исходных данных Разность x%d и x%d нулевая',[I, j]));

exit;

end;

// Строим график

x := minx;

if (minx < maxx) and (miny < maxy) then

begin

// Считаем коээффициенты

dx := imgWork. Width/(maxx — minx);

tx := 1/(maxx — minx);

dy := imgWork. Height/(maxy — miny);

y := pln. CalculateY (x, flag);

ix := CalcIX (x);

iy := CalcIY (y);

rct.Left:=0;

rct.Top:=0;

rct.Right:=imgWork.Width;

rct.Bottom:=imgWork.Height;

imgWork.Canvas.FillRect (rct);

imgWork.Canvas.MoveTo (ix, iy);

while (x < maxx) do

begin

x :=x + tx;

y := pln. CalculateY (x, flag);

ix := CalcIX (x);

iy := CalcIY (y);

imgWork.Canvas.LineTo (ix, iy);

end;

end;

for I := 1 to N do

begin

ix := CalcIX (pln.GetNode (i-1).x);

iy := CalcIY (pln.GetNode (i-1).y);

imgWork.Canvas.Rectangle (ix-5,iy-5,ix+5,iy+5);

end;

end;

procedure TfrmMain. btnClearClick (Sender: TObject);

var j: integer;

rct:TRect;

begin

edtCount.Text := '3';

edtFilename.Text := '';

dgrdMain.RowCount := 4;

pln.Clear;

for j := dgrdMain. RowCount-1 downto 1 do

begin

dgrdMain.Cells[0,j] := InttoStr (j);

dgrdMain.Cells[1,j] := '';

dgrdMain.Cells[2,j] := '';

end;

rct.Left:=0;

rct.Top:=0;

rct.Right:=imgWork.Width;

rct.Bottom:=imgWork.Height;

imgWork.Canvas.FillRect (rct);

end;

procedure TfrmMain. btnExitClick (Sender: TObject);

begin

Close;

end;

procedure TfrmMain. FormCreate (Sender: TObject);

begin

pln := TPolyNome. Create;

dgrdMain.ColCount := 3;

btnClearClick (Sender);

dgrdMain.FixedRows := 1;

dgrdMain.Cells[0,0] := 'i';

dgrdMain.Cells[1,0] := 'Xi';

dgrdMain.Cells[2,0] := 'Yi';

end;

procedure TfrmMain. FormDestroy (Sender: TObject);

begin

pln.Free;

end;

end.

Приложение 2. Руководство пользователя программы.

Порядок работы с программой Выбрать способ ввода исходных данных переключением радиокнопок:

Из файла Непосредственный ввод Если выбран способ «Из файла», то далее следует ввести имя файла в поле ввода имени файла, или выбрать файл с помощью кнопки «…»

После ввода имени файла, следует нажать кнопку «Загрузка», чтобы загрузить данные из файла в программу.

Если выбран способ «Непосредственный ввод», то далее следует ввести количество узлов табличной функции в поле «количество узлов сетки». Количество узлов не должно быть меньше 3.

После ввода количества узлов, нужно ввести данные узлов в сетку данных, причём во второй столбец следует вводить Xi, а в третий — Yi.

После ввода данных любым способом, для отображения графика нужно нажать кнопку «Расчёт».

Для очистки графика и вода новых данных нужно нажать кнопку «Очистить»

Для выхода из программы нужно нажать кнопку «Выход»

(1) Формалев В. Ф., Ревизников Д. Л. Численные методы. — Москва: ФИЗМАТЛИТ, 2004. с 106

Показать весь текст

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

  1. В. Ф., Ревизников Д. Л. Численные методы. — Москва: ФИЗМАТЛИТ, 2004. — 400 с.
Заполнить форму текущей работой
Купить готовую работу

ИЛИ