[Pascal] Układ równań nieliniowych metodą Newtona

Odpowiedz Nowy wątek
2006-08-05 14:02
0

Witam serdecznie :)

Czy móglby ktoś z Was podać kod w Pascalu, który będzie dopowiedzią na zadnie:

ROZWIĄZAĆ UKŁAD RÓWNAŃ NIELINIOWYCH METODĄ NEWTONA

F(x,y) = x3y2 + xy + xy3 - 3 =0
G(x,y) = x2 + x2y2 - 2xy = 0

x0=1.1 y0=1.05

gdzie:
x3,y2,y3,x2 oznacza do potęgi
x0,y0 oznacza zero w indeksie dolnym

Będę baardzoo wdzięczy za pomoc :)

Pozrawiam,
Koodłaty Zbój

Pozostało 580 znaków

2006-08-05 15:25
0

polecam zakupienie ksiazki B.Baron Metody numeryczne w delphi - tam jest caly dzial odnosnie nielionowych układów równan.
Nie mam skanera zeby to wrzucic.


Tomasz Andrzejewski
Delphi (XE3-XE7) framework engineer @ InterLan
MCP: Microsoft SQL Server 2008, Implementation and Maintenance

Pozostało 580 znaków

2006-08-05 15:30
0

Crowa, a jak spróbowałbyś aparatem cyfrowym?


<span style="color: blue">"Kolarstwo to jedna z najtrudniejszych dyscyplin sportu. Nawet najgorszy kolarz jest wciąż wybitnym sportowcem."
s.p. Marco Pantani
</span>

Pozostało 580 znaków

2006-08-05 20:20
fi
0

Wzór jest jeden:
x(k+1) = x_k - f(x_k)/f'(x_k), k = 0, 1, ...

x i f - są tu wektorami
f' - macierz kwadratowa (jakobian), dzielenie wektora przez macierz załatwiamy tak:
v/A = Bv, gdzie B jest macierzą odwrotną do A.

Można też rozwiązywać w każdym kroku układ równań, przekształcamy wzór do postaci:
f'(x_k)*z_k = -f(x_k)

zmienna to z_k reszta to stałe.
oczywiście: z_k = x(k+1) - x_k,
więc po obliczeniu podstawiamy: x(k+1) = x_k + z_k, i już mamy kolejne przybliżenie,
powtarzamy tak aż |z_k| będzie bliskie zero, np. |z_k| < 1e-6

W naszym przypadku: f' =
3x3y2 + y + y3 2x3y + x + 3xy2
2x + 2xy2 - 2y 2x2y - 2x

wstawiasz k = 0, x = x0, y = y0 -> teraz obliczasz z0, itd.

Pozostało 580 znaków

2006-08-06 00:50
0

macierz odwrotna mozna zrobic stosujac eliminacje Gaussa lub Crouta.


Tomasz Andrzejewski
Delphi (XE3-XE7) framework engineer @ InterLan
MCP: Microsoft SQL Server 2008, Implementation and Maintenance

Pozostało 580 znaków

2006-08-06 10:35
0

Metoda Newtona+algorytm

http://www.i-lo.tarnow.pl/edu/inf/alg/zmzf/index.htm

// Program znajduje miejsce zerowe funkcji f(x)
// za pomocą algorytmu Newtona
//---------------------------------------------
// (C)2006 mgr J.Wałaszek       I LO w Tarnowie
 
program mzf1;
 
{$APPTYPE CONSOLE}
 
uses math;
 
const
  EPS0 = 0.0000000001; // dokładność porównania z zerem
  EPSX = 0.0000000001; // dokładność wyznaczenia pierwiastka
 
// Funkcja, której miejsce zerowe obliczamy
// f(x) = x^3*(x+sin(x^2-1)-1)-1
// <-1,0> i <1,2>
//-----------------------------------------
function f(x : real) : real;
begin
  Result := x * x * x * (x + sin(x * x - 1) - 1) - 1;
end;
 
// Oblicza pochodną funkcji f(x)
// f'(x) =2x^4*COS(x^2 - 1) + 3x^2*SIN(x^2 - 1) + 4x^3 - 3x^2
//-----------------------------------------------------------
function fp(x : real) : real;
begin
  Result := x * x * (2 * x * x * cos(x * x - 1) + 3 * sin(x * x - 1) + 4 * x - 3)
end;
 
//-----------------------------------------------------
// Program główny
//-----------------------------------------------------
 
var
  x0,x1,f0,f1 : real;
  i           : integer;
 
begin
  writeln('Obliczanie pierwiastka funkcji - metoda Newtona');
  writeln('f(x) = x^3*(x+sin(x^2-1)-1)-1');
  writeln('-----------------------------------------------');
  writeln('(C)2006 mgr Jerzy Walaszek      I LO w Tarnowie');
  writeln;
  write('Podaj punkt startowy x0 = '); readln(x0);
  writeln;
  writeln('-----------------------------------------------');
  writeln('WYNIK:');
  writeln;
  x1 := x0 - 1; f0 := f(x0); i := 64;
  while (i > 0) and (abs(x1 - x0) > EPSX) and (abs(f0) > EPS0) do
  begin
    f1 := fp(x0);
    if abs(f1) < EPS0 then
    begin
      writeln('Zly punkt startowy');
      i := 0;
      break;
    end;
    x1 := x0;
    x0 := x0 - f0 / f1;
    f0 := f(x0);
    dec(i);
    if i = 0 then writeln('Przekroczony limit obiegow');
  end;
  if i > 0 then writeln('x0 = ',x0:15:8);
  writeln;
  writeln('-----------------------------------------------');
  writeln('Koniec. Nacisnij klawisz Enter...');
  readln;
end.

Pozostało 580 znaków

2006-08-07 12:59
Ad
0

Może nie na temat, ale nie powino być w "Nietuzinkowych tematach"?


Pozostało 580 znaków

2011-01-10 23:19
0
crowa napisał(a)

polecam zakupienie ksiazki B.Baron Metody numeryczne w delphi - tam jest caly dzial odnosnie nielionowych układów równan.
Nie mam skanera zeby to wrzucic.

Hmm, książka jest droga. Nie wiecie gdzie można ją uzyskać w formie elektronicznej?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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