Wątek przeniesiony 2018-04-24 19:45 z Delphi i Pascal przez furious programming.

Układy równań nieliniowych metodą Newtona

0

Cześć,
w kodzie który napisałem, kompilator wyrzuca błąd w linii 30; mianowicie (Error: Illegal qualifier) i (Fatal: Syntax error, ) expected but ordinal const found).
Byłym bardzo wdzięczny za pomoc w wskazaniu błędu gdyż nie jestem w stanie go znaleźć. Być może za długo już nad tym myślę i nie myślę trzeźwo.
Przepraszam jeśli kod jest źle wklejony bądź jest nieczytelny. Nie jestem programistą ale starałem się go pisać w miarę czytelnie. Zastanawiam się też, czy skonstruowana przeze mnie pętla jest poprawna. Będę bardzo wdzięczny za wytknięcie wszelkich błędów przez które program nie będzie działać.

program Untitled;

uses
    crt;

type
    tablica=array [1..10000] of real;
var
   eps,e,z1,z2: real;
   F11,F21,W11,W12,W21,W22,x,y: tablica;       //W(i,j) to element Jacobianu z danej kolumny i wiersza, F(i,j) to element funkcji pierwotnej
   i: integer;


begin
     clrscr;
     WriteLn('Program rozwiazuje uklad rownan nieliniowych metoda Newtona:');
     Writeln('F(x,y) = cos(0,4y - x^2) + x^2 + y^2 -1,6 = 0');
     WriteLn('G(x,y) = 1,5x^2 - (y^2)/0,36 - 1 = 0');
     WriteLn('dla x0 = 1,04 i y0 = 0,47');
     WriteLn;
     Write('Podaj dokładnosc obliczen: ');
     ReadLn(eps);
     WriteLn();

x[1]:=1.04;        //Warunek początkowy
y[1]:=0.47;        //Warunek początkowy
i:=1;

repeat
      F11[i]:=cos(0.4*y[i]+x[i]^2)+x[i]^2+y[i]^2-1.6;   //Kolejne elementy funkcji pierwotnej
      F21[i]:=1.5*x[i]^2-((y[i]^2)/0.36)-1;
      W11[i]:=-2*x[i]*sin(x[i]^2+0.4*y[i])+2*x[i];      //Kolejne elementy Jacobianu czyli macierzy pochodnych funkcji F(x,y) i G(x,y)
      W12[i]:=-0.4*sin(0.4*y[i]+x[i]^2)+2*y[i];         //Liczby po symbolu zmiennej oznaczają wiersz i kolumnę jaką dana zmienna zajmuje w macierzy
      W21[i]:=3*x[i];
      W22[i]:=-2*y[i]/0.36;
      x[i+1]:=x[i]-(((1/(W11[i]*W22[i]-W12[i]*W21[i])))*(W22[i]*F11[i]-W12[i]*F21[i])*F11[i]);  //To jest właściwa część kodu odpowiadająca za znajdowanie kolejnych rozwiązań
      y[i+1]:=y[i]-(((1/(W11[i]*W22[i]-W12[i]*W21[i])))*(W11[i]*F21[i]-W21[i]*F11[i])*F21[i]);
      z1:=x[i+1]-x[i];
      z2:=y[i+1]-y[i];
      e:=sqrt(z1^2+z2^2);
      i:=i+1; //iteracja
until
      e<=eps;

WriteLn('x',i,' = ',x[i]);
WriteLn('y',i,' = ',y[i]);


ReadLn;
end.
1

na tym Ci się wywala, i nie tylko na tym

x[i]^2

do potęgowania jest funkcja power

  power(x[i],2)
0

Bardzo dziękuję za pomoc, program już działa bezbłędnie.

1

znak '^' kodzie służy do operowania na wskaźnikach (pointerach) i nie jest operatorem potęgowania

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