![]() |
#1 (permalink) |
Member
Регистрация: 23.06.2011
Сообщений: 94
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 164
|
![]() Прошу помощи у знающих людей. По предмету вычислительная математика дали задание, которое никак не получается. Конец сессии нужно срочно сдать. суть вот в чем: Нужно провести интерполяцию функции F=x*x+4*x+3, используя интерполяционную формулу Ньютона(метод разделенных разностей) на интервале [-10..10] взяв количество узлов интерполяции равных 3. Построить графики исходной функции и интерполирующей функции, а так же график погрешности интерполяции. Сделать нужно, используя формулы разделенных разностей. В моем случае уравнение получается вида: Pn(x)=f(x[0])+f(x[i],x[i+1])*(x-x[0])+f(x[i],x[i+1],x[i+2])*(x-x[0])*(x-x[1]). Написал функцию, но работать она не хочет: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, Math; type TForm1 = class(TForm) Chart1: TChart; Chart2: TChart; Series1: TLineSeries; Series2: TLineSeries; Series3: TLineSeries; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; const xmin=-10; xmax=10; n=3; var Form1: TForm1; i,j: integer; x1,x2,x3,h: real; x,fx: array [1..3] of real; implementation {$R *.dfm} function yf(x:real):real; begin yf:=x*x+4*x+3; end; Function Newton(n: integer; d:real; x,y :array of real):real; var l,l2:real; j,i,k,u:integer; p,p2: real; y1,y2: array [0..2] of real; begin L:=fx[1]; P:=1; p2:=1; for j:=1 to n do begin p:=p*(D-X[j-1]); p2:=p2*(D-x[j-1])*(D-x[j]); for i:=0 to (n-j) do begin Y1[i]:=(y[i+1]-y[i])/(x[i+j]-x[i]); end; for I := 1 to (n-j) do begin y2[i]:=(((y[i+2]-y[i+1])/(x[i+j]-x[i]))-(y[i+1]-y[i])/(x[i+j]-x[i]))/(x[i+2]-x[i]); end; l:=l+p*y1[i]+p2*y2[i]; end; Newton:=l; end; procedure TForm1.FormCreate(Sender: TObject); begin x1:=xmin; while x1<=xmax do begin Series1.AddXY(x1,yf(x1)); x1:=x1+1; end; x2:=-1; for i:=1 to n do begin x[i]:=x2; fx[i]:=yf(x[i]); x2:=x2+1; end; x3:=xmin; while x3<=xmax do begin for i:=1 to 10 do begin Series2.AddXY(x3,Newton(n,x3,x,fx)); Series3.AddXY(x3, abs (yf(x3)-Newton(n,x3,x,fx)) ); x3:=x3+0.01; end; end; end; end. |
![]() |
![]() |
|
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Наверняка вам будет полезна информация которая содержится в данных обсуждениях DELPHI Ошибка в Delphi |
![]() |
#2 (permalink) |
Member
Регистрация: 23.06.2011
Сообщений: 94
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 164
|
![]()
тему можно закрыть/удалить. программу сделал сам
|
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
Опции темы | |
Опции просмотра | |
|
|