Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Закрытая тема
 
Опции темы Опции просмотра
Старый 23.06.2011, 22:40   #1 (permalink)
hatabi4
Member
 
Аватар для hatabi4
 
Регистрация: 23.06.2011
Сообщений: 94
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 164
По умолчанию Помощь с Delphi

Добрый вечер всем.
Прошу помощи у знающих людей. По предмету вычислительная математика дали задание, которое никак не получается. Конец сессии нужно срочно сдать. суть вот в чем:
Нужно провести интерполяцию функции 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.
Помогите пожалуйста с кодом функции.
Миниатюры
7c0bed2631463ce80e431d05aed296376f3d51fc0427eb43ac28473a.jpg  
hatabi4 вне форума  

Старый 23.06.2011, 22:40
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Наверняка вам будет полезна информация которая содержится в данных обсуждениях

DELPHI
Ошибка в Delphi

Старый 30.06.2011, 19:45   #2 (permalink)
hatabi4
Member
 
Аватар для hatabi4
 
Регистрация: 23.06.2011
Сообщений: 94
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 164
По умолчанию

тему можно закрыть/удалить. программу сделал сам
hatabi4 вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Закрытая тема


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 21:00.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.