Rozwiązanie układu równań w fortranie

0

Cześć, mam problem do rozwiązania i program ma być napisany
koniecznie w fortranie, którego oczywiście nie znam:P

mam napisać program rozwiązujący układ 3 równań:
y1=ax1^2+bx1+c
y2=ax2^2+bx2+c
y3=a*x3^2+b8x3+c

znane są wartości y1, y2, y3, x1, x2, x3; a szukane to a,b,c

Czy ktoś miałby pomysł jak się zabrać do tego w fortranie.
Myślałam nad metodą rozwiązania macierzową, ale nie wiem
jak to w fortranie ogarnąć

2

Wyprowadź sobie na kartce równania dla a,b,c (uczą tego chyba w gimnazjum jeszcze?) a potem po prostu podstaw te wzory do zmiennych w programie.
Oczywiście można niby stuknąć jakiegoś gaussa tylko nie ma specjalnie sensu skoro wiesz ile masz równań ;]

1

Tworzysz macierz M:
x1^2 x1 1
x2^2 x2 1
X3^2 x3 1
oraz tablice Y
Y1
Y2
Y3
wyliczasz ABC=Y*Inv(M)
odwrotność: http://rudy.mif.pg.gda.pl/~reichel/down.php?id=39
mnożenie: http://pl.wikibooks.org/wiki/Fortran/Przyk%C5%82ady/Iloczyn_macierzy

0

Nie ma haczyka w zadaniu, jest ono proste do policzenia na kartce
tak takie zadania rozwiązuje się w gimnazjum:P
Moim problemem nie jest obliczanie tych współczynników tylko napisanie
programu w języku, którego nie znam a niestety narzucono mi go z góry.

Dzięki za wskazówki spróbuję ogarnąć jakoś ten program, jeśli ktoś ma
jeszcze jakieś wskazówki lub nawet fragment programu chętnie go
zobaczę i bardzo dziękuję za pomoc.

Hej, pomyślałam, że najlepiej to chyba będzie można rozwiązać ten problem:
zapisać układ jako macierz a później użyć eliminacji Gaussa-Jordana,
żeby program w wyniku na ekran wyżucał mi wektor jako rozwiązanie.

Może kotoś mi wytłumaczyć jak to zrobić w fortranie?

0

Ale po kiego grzyba chcesz tu robić gaussa skoro masz zadane konkretne równanie i cały program będzie miał raptem 3 linijki? o_O
przecież jeśli masz taki układ:
y1=ax1^2+bx1+c
y2=ax2^2+bx2+c
y3=ax3^2+bx3+c
i szukasz a,b,c to:
a = (y1 - bx1 -c)/x12
b = (x12y2 - x22y1 - c(x12 - x22)) / (x12x2 - x1x22)
'c' nie chce mi się juz wyprowadzać bo skomplikowane obliczenia, ale zasadniczo wystarczy podstawić 'a' oraz 'b' do równania numer 3 i wyciągnąć sobie z tego co wyjdzie 'c'
Następnie trzeba je podstawić wszędzie i finalnie wyjdzie z tego zwykłe działanie dla każdej z literek które wystarczy wpakować do kodu i bangla.

0

Widzisz mówisz dobrze, bo to jest proste zadanie.

Tylko jak mam to wprowadzić do programu

2

Nigdy w życiu nie programowałem w fortranie ale rzut okiem na składnie podpowiada że

REAL(8) :: x1,x2,x3,y1,y2,y3
READ *,x1,x2,x3,y1,y2,y3
PRINT *,'a',tutaj_skomplikowane_równanie_wyprowadzone_dla_a
PRINT *,'b',tutaj_skomplikowane_równanie_wyprowadzone_dla_b
PRINT *,'c',tutaj_skomplikowane_równanie_wyprowadzone_dla_c
END

Czyli gdyby a=x12 + x2 + y1 (nie jest tak, ale jestem zbyt leniwy żeby to wyprowadzać!) to byłoby:

REAL(8) :: x1,x2,x3,y1,y2,y3
READ *,x1,x2,x3,y1,y2,y3
PRINT *,'a',x1*x1+x2+y1
END
0

Dzięki wielkie

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