Witam wszystkich.
Przepraszam , że wam zaśmiecam forum ale mam ogromną prośbę. Jako ze nie jestem kumaty w programowaniu zwracam się do was z ogromna prośbą. Otóż nasz kochany profesor ze studiów zadał nam pewien projekt do realizacji. Mamy układ mechaniczny , który mamy zapisać w postaci równania różniczkowego i dla danego równania dokonać obliczeń. Problem w tym ze w projekcie tym ma znaleźć się program komputerowy ( najlepiej pascal) który będzie to równanie liczyć. Poszukałem po necie i trochę poczytałem i napisałem ten program przed chwilką i nie wiem czy jest dobrze. Cichłbym as prosić abyście sprawdzili czy dany program jets prawidłowy ( ewentualnie go zmodyfikowali)...ale najgorsze jest to ze musze także przedstawić obliczenie tego równania na wykresie a nie mam pojęcia jak w Pascalu robi się wykresy. Był bym bardzo wdzięczny gdy jakaś osoba mi pomogła. potrzebuje ten projekt jak najszybciej. Mam już wszystko obliczone i zrobione ale został mi jeszcze właśnie program i wykres.
a oto równanie:
y" = -(Kr/m)y' - Ks/my + Kr/m*x'
gdzie : Kr, Ks, m to dane parametry a x= 1 a w drugim programie x= Asinwt
mam to równanie różniczkowe rozwiązać za pomocą podwójnego kroku całkowania a to mój program:
Program Marcin M;{metoda o podwójnym kroku całkowania}
uses crt;
var
y1,y0,yp0,yp1,zp0,zp1,z0,z1,t,x,Kr,Ks,dt,tk:real;
i,m:integer;
begin
write(?krok cal. Dt=?);readln(dt);
write(?czas obserwacji Tk?);readln(tk);
write(?wydruk wyników m?);readln(m);
writeln;
writeln(?Tk=?,tk4,? ?,?dt=?,dt4);
t:=0;y1:=0;y0:=0;{ustawienie warunków początkowych}
repeat
for i:=0 to m do
begin
x:=1;{obliczenie zmiennych parametrów i funkcji zależnych od czasu}
z0:=y1+Kr/m;z1:=-(Kr/m)y1-(Ks/m)y0;{oblicz wartości na wejściach bloków całkujących}
yp0:=yo+z0dt;yp1:=y1+z1*dt;{oblicz wartości na wyjściach bloków całkujących}
zp0:=yp1+Kr/m,zp1:=-(Kr/m)yp1-(Ks/m)yp0;
y0:=y0+0.5dt(z0+zp0);y1:=y1+0.5dt(z1+zp1);
t:=t+dt;{aktualizacja czasu}
end;
writeln(t6,? ?,y06);{wydruk wyników obliczeń}
until t>=tk;
end.
i drugi dla x=Asinwt
Program Marcin Mann;{metoda o podwójnym kroku całkowania}
uses crt;
var
y1,y0,yp0,yp1,zp0,zp1,z0,z1,w,t,x,Kr,Ks,dt,tk:real;
i,m:integer;
begin
write(?krok cal. Dt=?);readln(dt);
write(?czas obserwacji Tk?);readln(tk);
write(?wydruk wyników m?);readln(m);
writeln;
writeln(?Tk=?,tk4,? ?,?dt=?,dt4);
t:=0;y1:=0;y0:=0;{ustawienie warunków początkowych}
repeat
for i:=0 to m do
begin
x:=(A/w)cos(wt);{obliczenie zmiennych parametrów i funkcji zależnych od czasu}
z0:=y1;z1:=(Kr/m)x-(Kr/m)y1-(Ks/m)y0;{oblicz wartości na wejściach bloków całkujących}
yp0:=yo+z0dt;yp1:=y1+z1dt;{oblicz wartości na wyjściach bloków całkujących}
zp0:=yp1,zp1:=(Kr/m)x(t+dt)-(Kr/m)yp1-(Ks/m)yp0;
y0:=y0+0.5dt(z0+zp0);y1:=y1+0.5dt(z1+zp1);
t:=t+dt;{aktualizacja czasu}
end;
writeln(t6,? ?,y06);{wydruk wyników obliczeń}
until t>=tk;
end.