Układ równań różniczkowych

0

[rotfl] Problem na którym stanąłem polega na tym, że chciałbym móc wpisywać w jakieś pole edycyjne postać równań. Mają tworzyć one układ który wygląda np w ten sposób:

procedure F(var F:TIteracja; const X:TIteracja;
                t:TFloat; N:Integer);
//Prawa strona układu równań nieliniowych
begin
  F.D[1]:=(10-(10+10)*X.D[1]-10*X.D[2])/6;
  F.D[2]:=(10-(10+10)*X.D[2]+11*X.D[1])/4;
  F.D[3]:=10*X.D[1]+X.D[2]-3;
  F.D[4]:=X.D[2]*X.D[3]+5;
  F.D[5]:=X.D[4]*X.D[1]+5;
  F.D[6]:=X.D[1]*X.D[2]+15;
  F.D[7]:=X.D[1]*X.D[3]+2;
end{ F };

procedura ta jest następnie wczytywana do algorytmu rozwiązywania równań różniczkowych.
Próbowałem zapisywać taką oto postać do innego pliku *.pas z obiektu memo, ale nie przyniosło to pożądanego efektu. Może jednak coś przeoczyłem. Proszę o pomoc i dziękuję za jakiekolwiek zainteresowanie moim problemem. [!!!]

0

ale w czym problem, bo zapomniałeś napisać...

0

No właśnie napisałem o co mi chodzi i na czym polega problem. Z tym, że faktycznie jest to z deczko zakręcone. Mam dany układ równań w procedurze F. Ale postać tych równań jest z góry ustalona przed uruchomieniem programu - bo jest to kod programu. Nie wiem jak zrobić, żeby dało się wpisywać postać tych równań (procedury F) w oknie programu. Innymi słówy, żeby użytkownik mógl po uruchomieniu programu wpisać dowolną postać tych równań [w jakieś pole np memo) . Przykładowa postać równań przedstawia się następująco:
F.D[1]:=(10-(10+10)X.D[1]-10X.D[2])/6;
F.D[2]:=(10-(10+10)X.D[2]+11X.D[1])/4;
F.D[3]:=10*X.D[1]+X.D[2]-3;
F.D[4]:=X.D[2]*X.D[3]+5;
F.D[5]:=X.D[4]*X.D[1]+5;
F.D[6]:=X.D[1]*X.D[2]+15;
F.D[7]:=X.D[1]*X.D[3]+2;
Tych równań może być więcej/mniej. Tworzą one wspomniany układ równań różniczkowych.

0

Trop:
a zmienia Ci sie postac rownan czy tylko wspolczynniki? :)

0

Zmienia się postać równań jak i współczynniki. To jest tak ze y(F.D)= cos tam y'/dt (X.D).

0
Placente82 napisał(a)

Zmienia się postać równań jak i współczynniki. To jest tak ze y(F.D)= cos tam y'/dt (X.D).

To poszukaj interpreterow Pascala.

0

A jakieś sugestie?? i jak takie coś użyć? Bo z tego co wiem to napisanie czegoś takiego to kupa zachodu, a ja nie mam już za dużo czasu.:) Najpepiej jakby to były gotowe komponenty jakieś. W chwili obecnej działam na Delphi 6 Personal. Za wszelkie wskazówki z góry dziękuję.:) Pozdro.

0

Widze że próbujesz coś obliczyć, o czym pewnie w ogóle nie masz pojęcia. Takie układy równań różniczkowych są bardzo skomplikowane i trzeba znać algorytm ich rozwiązywania.. dowiedziałeś się czegoś na ten temat ?

0

Apropos algorytmu to już wszystko mam. Program działa i liczy pięknie. Nie ukrywam, że kod programu powstał z pomocami nieodzownymi. Dopiero zaczynam zabawę w programowanie w delphi, więc prosze o wyrozumiałość. Algorytm uzyty(na marginesie powiem, że jest to algorytm Geara z członem przewidywania Fehlberga) jednak nie ma dużego znaczenia jeśli chodzi o mój problem, bardziej struktura danych itp. Na razie sprawa wygląda tak, że badany układ równań wprowadza jako daną do struktury algorytmu jako procedure zdefiniowaną następująco:

Podstawienie = procedure (var F:TIteracja; const X:TIteracja;
                        t:TFloat; N:Integer);
//procedura realizująca podstawienie dX/dt=F(X,t)
//N-ilość elementów wektora X

jest to typ proceduralny opisujący postać równań
w poprzednich postach umieścilłem już zdefiniowaną procedurę F typu Podstawienie.
TFloat - Extendet, Real48 albo któryś zmiennoprzecinkowy.
TIteracja :

TIteracja = record
              case integer of
              0: (T:TFloat);
              1: (D: array[0..MaxRow] of TFloat;)
             end;

Póki co, żeby zmienić postać równań trzeba zmienić zapis w procedurze F. Chciałbym moć zmieniać ich postać z panelu programu na formie. No i tu na razie moje pomysły nie dają rady.

1 użytkowników online, w tym zalogowanych: 0, gości: 1