Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2012, 19:38   #1
SkreII4ik
Новичок
Джуниор
 
Регистрация: 16.03.2012
Сообщений: 3
По умолчанию Построение графика(Полином Лагранжа)

Здравствуйте, написал с учителем программу, которая строит полином Лагранжа по заданным точкам, всё работает, но проблема в том, что программа строит график от первой до последней из указанных точек, получается кусок, вырванный из графика, а мне нужно полный график, полный его вид, а не кусок на интервале. Крайний срок это воскресение. Очень нужно. Спасибо большое.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, XPMan, unit2, Buttons, TeEngine, Series,
  ExtCtrls, TeeProcs, Chart;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    StringGrid1: TStringGrid;
    XPManifest1: TXPManifest;
    Button2: TButton;
    Memo1: TMemo;
    Chart1: TChart;
    Series1: TLineSeries;
    BitBtn1: TBitBtn;
    Label2: TLabel;
    RadioGroup1: TRadioGroup;
    Memo2: TMemo;
    LabeledEdit1: TLabeledEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Edit5: TEdit;
    Label3: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Meth:Methods;
  flag:bool;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Meth:=Methods.Create;
  RadioGroup1.ItemIndex:=0;
  StringGrid1.Cells[0,0]:='¹ óçëà';
  StringGrid1.Cells[0,1]:='x[i]';
  StringGrid1.Cells[0,2]:='y[i]';
  StringGrid1.Cells[1,0]:=IntToStr(1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  Meth.N:=StrToInt(Edit1.Text);
  StringGrid1.ColCount:=Meth.N+1;
  for i:=1 to Meth.N do
  begin
    StringGrid1.Cells[i,0]:=IntToStr(i);
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
  Memo1.Clear;
  Memo2.Clear;
  Series1.Clear;
  Meth.Step:=StrToFloat(LabeledEdit1.Text);
  for i:=1 to Meth.N do
  begin
    Meth.x[i]:=StrToFloat(StringGrid1.Cells[i,1]);
    Meth.y[i]:=StrToFloat(StringGrid1.Cells[i,2]);
  end;
  for i:=0 to Meth.N-1 do
  begin
    Meth.x1[i]:=StrToFloat(StringGrid1.Cells[i+1,1]);
    Meth.y1[i]:=StrToFloat(StringGrid1.Cells[i+1,2]);
  end;
  if RadioGroup1.ItemIndex = 0 then
    Meth.Graf;
  if RadioGroup1.ItemIndex = 1 then
    Meth.Newton;
end;

end.
Вложения
Тип файла: rar Программа.rar (4.9 Кб, 49 просмотров)
SkreII4ik вне форума Ответить с цитированием
Старый 16.03.2012, 19:39   #2
SkreII4ik
Новичок
Джуниор
 
Регистрация: 16.03.2012
Сообщений: 3
По умолчанию

Код:

unit Unit2;

interface
  uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls,Math;
type
Tvector = array [1..10] of real;
Tvector1 = array [0..9] of real;
TMatr = array [1..10] of array[1..10] of real;
Methods = class
  N:integer;
  x,y,a:Tvector;
  y1,x1:Tvector1;
  mas:TMatr;
  Step:real;
  Polinom: string;
  procedure Graf;
  function PointLag(point:real):real;
  procedure Razn();
  function RealD(xk:real;x0:real):real;
  function Factorial(Number:integer): integer;
  procedure Newton();
  function PointNew(point:real):real;
end;

implementation
uses Unit1;

procedure Methods.Graf();
Var
  MassivA: array [1..10]of array [1..10]of real;
  MassivB: array[1..10] of real;
  MassivX: array[1..10] of  real;
  i,j,k:byte;
  h, step, count:real;
  Mx,My:real;
begin
  for i:=1 to N do
  begin
    MassivB[i]:=y[i];
    for j:=1 to N do
      MassivA[j,i]:=Power(x[j],i-1);
  end;
  for k:=1 to n-1 do
    for i:=k+1 to n do
    begin
      MassivA[i,k]:=-MassivA[i,k]/MassivA[k,k];
      for j:=k+1 to n do
      begin
        MassivA[i,j]:=MassivA[i,j]+MassivA[i,k]*MassivA[k,j];
      end;
      MassivB[i]:=MassivB[i]+MassivA[i,k]*MassivB[k];
    end;
   MassivX[n]:=MassivB[n]/MassivA[n,n];

  for k:=n-1 downto 1 do
  begin
    h:=MassivB[k];
    for j:=k+1 to n do
      h:=h-MassivX[j]*MassivA[k,j];
    MassivX[k]:=h/MassivA[k,k];
  end; 
  for i:=1 to n do
    a[i]:=MassivX[i];

  Polinom:='';
  // ïîñòðîåíèå ìíîãî÷ëåíà
  for i:=0 to N-1 do
  begin
    if ((i=N-1) or (i=0)) then
    begin
      if (i=N-1) then
      begin
        if(a[N-i]<0) then
          Polinom:=Polinom+FloatToStr(a[N-i])
        else
          Polinom:=Polinom+ '+'+FloatToStr(a[N-i]);
      end
      else
        Polinom:=Polinom+FloatToStr(a[N-i])+'x^'+IntToStr(N-i-1);
    end
    else
    begin
      if(a[N-i]<0) then
        Polinom:=Polinom+FloatToStr(a[N-i])+'x^'+IntToStr(N-i-1)
      else
        Polinom:=Polinom + '+'+FloatToStr(a[N-i])+'x^'+IntToStr(N-i-1);
    end;
  end;
  Form1.Memo2.Lines.Add(Polinom);


  // ïîñòðîåíèå ãðàôèêà
  step:=x[1];
  while step<=x[N] do
  begin
    Mx:=step;
    My:=0;
    for i:=1 to N do
    begin
      My:=My+a[i]*Power(Mx,i-1);
    end;
    Form1.Series1.AddXY(Mx,My);
    step:=step + 0.001;
  end;
  //óïëîòíåíèå òàáëèöû
  step:=x[1];
  count:= StrToFloat(Form1.LabeledEdit1.Text);
  while step<=x[N] do
  begin
    Mx:=step;
    My:=0;
    for i:=1 to N do
    begin
      My:=My+a[i]*Power(Mx,i-1);
    end;
    Form1.Memo1.Lines.Add('x= '+Format('%.3f',[Mx])+' y= '+Format('%.4f',[My]));
    step:=step + count;
  end;
end;

function Methods.PointLag(point:real):real;
var
  i:byte;
begin
  for i:=1 to N do
    result:=result+a[i]*Power(point,i-1);
end;

// êîíå÷íåå ðàçíîñòè
procedure Methods.Razn();
var
i, j: byte;
begin
  for j:=1 to N-1 do
    mas[j,1]:= y[j+1]-y[j];
  for i:=2 to N do
    for j:=1 to N-i+1 do
      mas[j,i]:= mas[j+1,i-1]-mas[j,i-1];
end;

// âûâîä D
function Methods.RealD(xk:real;x0:real):real;
begin
  result:=(xk-x0)/(x[2]-x[1]);
end;

function Methods.Factorial(Number:integer):integer;
var
  i:integer;
begin
  result:=1;
  for i:=1 to Number  do
    Result:= Result*Number;
end;

procedure Methods.Newton();
var
  i,j:integer;
  New, Ndop, d:real;
  xn, xk, point:real;
begin
  xn:=  x[1];
  xk:=  StrToFloat(Form1.Edit5.Text);
  point:= StrToFloat(Form1.Edit4.Text);
 // d:= RealD(xk,xn);
  Razn;
  while (point<=xk) do
  begin
    New:=y[1];
    for i:=1 to N-1 do
    begin
      d:= RealD(point,xn);
      Ndop:=d*mas[1,i]/Factorial(i);
      if (i>1) then
      begin
        for j:=1 to i-1 do
          Ndop:=Ndop*(d-j);
      end;
      New:=New+Ndop;
    end;
    Form1.Series1.AddXY(point,New);
    Form1.Memo1.Lines.Add('x= '+Format('%.3f',[point])+' y= '+Format('%.4f',[New]));
    point:=point+Step;
  end;
  Form1.Memo2.Lines.Add(Polinom);
end;

function Methods.PointNew(point:real):real;
var
  New, Ndop, d:real;
  i, j: byte;
begin
  New:=y[1];
  for i:=1 to N-1 do
  begin
    d:= RealD(point,x[1]);
    Ndop:=d*mas[1,i]/Factorial(i);
    if (i>1) then
    begin
      for j:=1 to i-1 do
        Ndop:=Ndop*(d-j);
    end;
    result:=New+Ndop;
    end;
end;
end.
SkreII4ik вне форума Ответить с цитированием
Старый 16.03.2012, 19:39   #3
SkreII4ik
Новичок
Джуниор
 
Регистрация: 16.03.2012
Сообщений: 3
По умолчанию

Нужно срочно. Прошу помогите
SkreII4ik вне форума Ответить с цитированием
Старый 22.12.2013, 22:15   #4
sportic
Новичок
Джуниор
 
Регистрация: 11.11.2013
Сообщений: 1
По умолчанию

как работает программа, будьте добры объясните
// вычисление
procedure TForm1.N5Click(Sender: TObject);
var
i: integer;
begin
Memo1.Clear;
Memo2.Clear;
Series1.Clear;
Meth.Step:=StrToFloat(LabeledEdit1. Text);
for i:=1 to Meth.N do
begin
Meth.x[i]:=StrToFloat(StringGrid1.Cells[i,1]);
Meth.y[i]:=StrToFloat(StringGrid1.Cells[i,2]);
end;
for i:=0 to Meth.N-1 do
begin
Meth.x1[i]:=StrToFloat(StringGrid1.Cells[i+1,1]);
Meth.y1[i]:=StrToFloat(StringGrid1.Cells[i+1,2]);
end;
Meth.Lagr;
Edit3.Text:=FloatToStr(Meth.PointLa g(StrToFloat(Edit2.Text)))
end;

unit Unit2;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls,Math;
type
Tvector = array [1..10] of real;
Tvector1 = array [0..9] of real;
TMatr = array [1..10] of array[1..10] of real;
Methods = class
N:integer;
x,y,a:Tvector;
y1,x1:Tvector1;
mas:TMatr;
Step:real;
Polinom: string;

procedure Lagr;
function PointLag(point:real):real;





end;

implementation
uses Unit1;

procedure Methods.Lagr();
Var
MassivA: array [1..10]of array [1..10]of real;
MassivB: array[1..10] of real;
MassivX: array[1..10] of real;
i,j,k:byte;
h, step, count:real;
Mx,My:real;
begin
for i:=1 to N do
begin
MassivB[i]:=y[i];
for j:=1 to N do
MassivA[j,i]:=Power(x[j],i-1);
end;
{прямой ход -исключение переменных}
for k:=1 to n-1 do
for i:=k+1 to n do
begin
MassivA[i,k]:=-MassivA[i,k]/MassivA[k,k];
for j:=k+1 to n do
begin
MassivA[i,j]:=MassivA[i,j]+MassivA[i,k]*MassivA[k,j];
end;
MassivB[i]:=MassivB[i]+MassivA[i,k]*MassivB[k];
end;
MassivX[n]:=MassivB[n]/MassivA[n,n];

{обратный ход нахождение корней}
for k:=n-1 downto 1 do
begin
h:=MassivB[k];
for j:=k+1 to n do
h:=h-MassivX[j]*MassivA[k,j];
MassivX[k]:=h/MassivA[k,k];
end;
for i:=1 to n do
a[i]:=MassivX[i];

Polinom:='y(x)= ';
// построение многочлена
for i:=0 to N-1 do
begin
if ((i=N-1) or (i=0)) then
begin
if (i=N-1) then
begin
if(a[N-i]<0) then
Polinom:=Polinom+FloatToStr(RoundTo (a[N-i], -4))
else
Polinom:=Polinom+ '+'+FloatToStr(RoundTo(a[N-i], -4));
end
else
Polinom:=Polinom+FloatToStr(RoundTo (a[N-i], -4))+'x^'+IntToStr(N-i-1);
end
else
begin
if(a[N-i]<0) then
Polinom:=Polinom+FloatToStr(RoundTo (a[N-i], -4))+'x^'+IntToStr(N-i-1)
else
Polinom:=Polinom + '+'+FloatToStr(RoundTo(a[N-i], -4))+'x^'+IntToStr(N-i-1);
end;
end;
Form1.Memo2.Lines.Add(Polinom);
sportic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение графика в VC++ taralesh Помощь студентам 0 24.05.2011 19:18
Построение графика интерполяционного многочлена Лагранжа (Delphi) RobSys Помощь студентам 4 29.10.2010 21:08
построение графика tanka123 Microsoft Office Excel 1 17.06.2009 09:17
полином лагранжа milate Общие вопросы C/C++ 10 24.05.2009 13:44
построение графика deadh5n1 Помощь студентам 2 13.09.2008 19:06