Linka
Dołączył: 13 Mar 2007
Posty: 98
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany: Wto 15:05, 27 Lis 2007 Temat postu: Metody Numeryczne - Zajecia |
|
|
To co dzis na zajeciach mamy zrobic:)
Kod: | implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
y, yr : array[1..1000] of single;
sum_sin, sum_cos, amp : array [0..500] of single;
xx,yy, aa : double;
i,n,j : integer;
plik, wynik : textfile;
begin
n:=1000;
//assignfile(plik,'c:\fou_dane.txt');
//assignfile(wynik,'c:\fou_dane_wyn.txt');
//rewrite(plik);
//rewrite(wynik);
// generowanie danych
//form1.series2.clear;
aa:=0.0;
for i:=1 to n do
begin
xx := i*0.1;
yy := xx+aa;
if yy>3 then aa:=aa-3;
y[i] := yy;
//writeln(plik,yy);
//form1.series2.addxy(xx,yy,'',clred);
form1.Canvas.pixels[i,trunc(abs(yy)*10)]:=clred;
//form1.Canvas.rectangle(i,trunc(abs(yy)*10),i+5,trunc(abs(yy)*10)+5);
end;
//closefile(plik);
// obliczanie współczynników
for j := 1 to (n div 2) - 1 do
begin
sum_sin[j] := 0.0;
sum_cos[j] := 0.0;
for i := 1 to n do
begin
sum_sin[j] := sum_sin[j] + y[i]*sin(2*pi*j*i/n);
sum_cos[j] := sum_cos[j] + y[i]*cos(2*pi*j*i/n);
end;
sum_sin[j] := sum_sin[j]*2/n;
sum_cos[j] := sum_cos[j]*2/n;
end;
// obliczenia zerowych współczynników
sum_sin[0] := 0.0;
sum_cos[(n div 2)] := 0.0;
for i := 1 to n do
begin
sum_sin[0] := sum_sin[0] + y[i];
sum_cos[(n div 2)] := sum_cos[(n div 2)] + y[i]*cos(pi*i);
end;
sum_sin[0] := sum_sin[0]/n;
sum_cos[0] := 0.0;
sum_cos[(n div 2)] := sum_cos[(n div 2)]/n;
sum_sin[(n div 2)] := 0.0;
// wydruk widma
//form1.series1.clear;
for j:=1 to (n div 2) do
begin
amp[j]:=sqrt(sqr(sum_sin[j])+sqr(sum_cos[j]));
xx:=j;
yy:=amp[j];
//writeln(wynik,yy);
//form1.series1.addxy(xx,yy,'',clred);
form1.Canvas.pixels[i,trunc(abs(yy)*10)]:=clred;
end;
//closefile(wynik);
// rekonstrukcja
for i:=1 to n do
begin
yr[i]:= 0.0;
//for j:=1 to (n div 2) do
for j:=100 to 150 do
yr[i]:=yr[i] + sum_sin[j]*sin(2*pi*j*i/n)+ sum_cos[j]*cos(2*pi*j*i/n);
yr[i]:=yr[i]+sum_sin[0];
end;
//form1.series3.clear;
for i:=1 to n do
begin
xx := i;
yy := yr[i];
//form1.series3.addxy(xx,yy,'',clred);
form1.Canvas.pixels[i,trunc(abs(yy)*10)]:=clred;
end;
end;
end.
|
wersja zmieniona:) :
Kod: |
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
y, yr : array[1..1000] of single;
sum_sin, sum_cos, amp : array [0..500] of single;
xx,yy, aa : double;
i,n,j : integer;
plik, wynik : textfile;
begin
n:=1000;
//assignfile(plik,'c:\fou_dane.txt');
//assignfile(wynik,'c:\fou_dane_wyn.txt');
//rewrite(plik);
//rewrite(wynik);
// generowanie danych
//form1.series2.clear;
aa:=0.0;
for i:=1 to n do
begin
xx := i*0.1;
//yy := xx+aa;
//if yy>3 then aa:=aa-3;
yy:=3.0*sin(xx)+cos(5.0*xx);
y[i] := yy;
//writeln(plik,yy);
//form1.series2.addxy(xx,yy,'',clred);
form1.Canvas.pixels[i,trunc(abs(yy)*10)]:=clred;
//form1.Canvas.rectangle(i,trunc(abs(yy)*100),i+5,trunc(abs(yy)*100)+5);
end;
//closefile(plik);
// obliczanie współczynników
for j := 1 to (n div 2) - 1 do
begin
sum_sin[j] := 0.0;
sum_cos[j] := 0.0;
for i := 1 to n do
begin
sum_sin[j] := sum_sin[j] + y[i]*sin(2*pi*j*i/n);
sum_cos[j] := sum_cos[j] + y[i]*cos(2*pi*j*i/n);
end;
sum_sin[j] := sum_sin[j]*2/n;
sum_cos[j] := sum_cos[j]*2/n;
end;
// obliczenia zerowych współczynników
sum_sin[0] := 0.0;
sum_cos[(n div 2)] := 0.0;
for i := 1 to n do
begin
sum_sin[0] := sum_sin[0] + y[i];
sum_cos[(n div 2)] := sum_cos[(n div 2)] + y[i]*cos(pi*i);
end;
sum_sin[0] := sum_sin[0]/n;
sum_cos[0] := 0.0;
sum_cos[(n div 2)] := sum_cos[(n div 2)]/n;
sum_sin[(n div 2)] := 0.0;
// wydruk widma
//form1.series1.clear;
for j:=1 to (n div 2) do
begin
amp[j]:=sqrt(sqr(sum_sin[j])+sqr(sum_cos[j]));
xx:=j;
yy:=amp[j];
//writeln(wynik,yy);
//form1.series1.addxy(xx,yy,'',clred);
memo1.lines.add(floattostr(yy));
//form1.Canvas.pixels[j,trunc(abs(yy)*1000)+100]:=clred;
form1.Canvas.rectangle(j,trunc(abs(yy)*1000)+100,j+5,trunc(abs(yy)*1000)+100+5);
end;
//closefile(wynik);
// rekonstrukcja
for i:=1 to n do
begin
yr[i]:= 0.0;
for j:=1 to (n div 2) do
//for j:=100 to 150 do
yr[i]:=yr[i] + sum_sin[j]*sin(2*pi*j*i/n)+ sum_cos[j]*cos(2*pi*j*i/n);
yr[i]:=yr[i]+sum_sin[0];
end;
//form1.series3.clear;
for i:=1 to n do
begin
xx := i;
yy := yr[i];
//form1.series3.addxy(xx,yy,'',clred);
form1.Canvas.pixels[i,trunc(abs(yy)*10)+300]:=clblue;
//form1.Canvas.rectangle(i,trunc(abs(yy)*100),i+5,trunc(abs(yy)*100)+5);
end;
end; |
Ostatnio zmieniony przez Linka dnia Wto 15:35, 27 Lis 2007, w całości zmieniany 2 razy
|
|