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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2011, 00:29   #1
Михаил1800
 
Регистрация: 07.10.2010
Сообщений: 4
По умолчанию Интерполяция сплайнами

есть код
кидаю на форму - ничего не работает
или я что-то не то задаю
не понимаю ((((



unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
DefinitionMatrix: TStringGrid;
Button1: TButton;
Button2: TButton;
Chart1: TChart;
Series1: TLineSeries;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
Nmax=100;
Type
Mas1 = array[1..Nmax] of extended;

var
Form1: TForm1;
x:mas1;
y:mas1;
a,b,c,d,h,s,alpha,beta: mas1;
t,k: extended; // abcissa
n: integer; //chislo uzlovih to4ek

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var ret,s1,s2: extended;
i,j,truex: integer;
a1,c1,b1,f1,z1: extended;
h1,h2: mas1;
left,right,q: extended;
begin
series1.Clear;
n:=StrToInt(Edit1.Text);
t:=StrToFloat(Edit2.Text);

truex:=0;

for i:=1 to n-1 do
x[i]:=StrToFloat(DefinitionMatrix.Cells[1,i]);
for i:=1 to n-1 do
y[i]:=StrToFloat(DefinitionMatrix.Cells[2,i]);
for i:=1 to n-2 do
If x[i]<x[i+1] then
else truex:=truex+1;

If truex=0 then
begin
for i:=2 to n-1 do
begin
h1[i]:=x[i]-x[i-1];
end;
h1[1]:=h1[2];
c[1]:=0;
c[n-1]:=0;

alpha[1]:=0;
beta[1]:=0;
for i:=2 to n-2 do
begin
h1[i]:=x[i]- x[i - 1];
h2[i]:=x[i + 1] - x[i];
A1:= h1[i];
C1:=2* (h1[i] + h2[i]);
B1:= h2[i];
F1:= 6* ((y[i + 1] - y[i]) / h2[i] - (y[i] - y[i - 1]) / h1[i]);
z1:= (A1 * alpha[i - 1] + C1);
alpha[i] := -B1 / z1;
beta[i] := (F1 - A1 * beta[i - 1]) / z1;




end;

for i:=n-2 downto 1 do
begin
c[i] := alpha[i+1] * c[i+1] + beta[i+1];

end;
for i:=2 to n-1 do
begin
h1[i]:=x[i] - x[i - 1];
d[i]:=(c[i]-c[i-1])/h1[i];
b[i]:=h1[i]*c[i]/2-Sqr(h1[i])*d[i]/6+(y[i]-y[i-1])/h1[i];
end;
memo1.Lines.Add('s0(x)='+floattostr (y[1]));
for i:=2 to n-1 do
begin

memo1.Lines.Add('');
memo1.Lines.Add('s'+inttostr(i)+'(x )='+floattostr(y[i])+'+('+floattostr(b[i])+')(x-('+floattostr(x[i])+'))+('+floattostr(c[i])+'/2)(x-('+floattostr(x[i])+'))^2+('+floattostr(d[i])+'/6)(x-('+floattostr(x[i])+'))^3');

memo1.Lines.Add('na intervale['+floattostr(x[i-1])+';'+floattostr(x[i])+']');

end;

for i:=1 to n-2 do
begin
if (t>=x[i]) and (t<x[i+1]) then
begin
memo1.Lines.Add(' ');
s1:=y[i]+b[i]*(t-x[i])+(c[i]/2)*(t-x[i])*(t-x[i])+(d[i]/6)*(t-x[i])*(t-x[i])*(t-x[i]);

end;
end;
memo1.Lines.Add(floattostr(s1));


q:=x[1];
series1.AddXY(x[1],y[1],'');
for i:=2 to n-2 do
begin
repeat
s2:=y[i]+b[i]*(q-x[i])+(c[i]/2)*(q-x[i])*(q-x[i])+(d[i]/6)*(q-x[i])*(q-x[i])*(q-x[i]);
series1.AddXY(q,s2,'');
q:=q+1;
until (q>x[i+1]);
end;
series1.AddXY(x[n-1],y[n-1],'');



end
else showmessage ('Must x1<X2<X3<...<Xn');

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
n:=StrToInt(Edit1.Text);
DefinitionMatrix.RowCount:=n;

end;


end.
Михаил1800 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
интерполяция сплайнами tanek Помощь студентам 5 06.07.2011 00:23
Интерполяция кубическими сплайнами Franzs Общие вопросы Delphi 0 25.04.2010 10:05
Интерполяция изображений(Сплайн интерполяция)?????) Danyla Помощь студентам 0 13.04.2010 09:08
Помогите со сплайнами KnDmPetr Паскаль, Turbo Pascal, PascalABC.NET 1 25.03.2008 16:13
соединение точек с помощью линейной интерпаляции и интерпаляции кубическими сплайнами. yulia Помощь студентам 6 09.10.2007 07:38