Forum Forum 1 Grupy Ćwiczeniowej Strona Główna

Forum 1 Grupy Ćwiczeniowej
Forum studentów informatyki Politechniki Białostockiej
 

Metody Numeryczne - Zajecia

 
Napisz nowy temat   Odpowiedz do tematu    Forum Forum 1 Grupy Ćwiczeniowej Strona Główna -> 3 semestr
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Linka



Dołączył: 13 Mar 2007
Posty: 98
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysł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
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Forum 1 Grupy Ćwiczeniowej Strona Główna -> 3 semestr Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
deoxBlue v1.0 // Theme created by Sopel stylerbb.net & programosy.pl

Regulamin