Els mètodes numèrics són tècniques utilitzades per resoldre problemes matemàtics que són difícils o impossibles de resoldre analíticament. En aquest tema, explorarem com implementar alguns dels mètodes numèrics més comuns utilitzant ALGOL.

Continguts

  1. Introducció als Mètodes Numèrics
  2. Mètode de la Bisecció
  3. Mètode de Newton-Raphson
  4. Integració Numèrica: Regla del Trapezi
  5. Diferenciació Numèrica
  6. Exercicis Pràctics

  1. Introducció als Mètodes Numèrics

Els mètodes numèrics són essencials en la programació científica i l'enginyeria. Aquests mètodes permeten aproximar solucions a problemes complexos mitjançant càlculs iteratius.

Conceptes Clau

  • Iteració: Repetició d'un conjunt de càlculs fins a obtenir una solució aproximada.
  • Convergència: Propietat d'un mètode numèric que assegura que les iteracions s'acosten a la solució real.
  • Error: Diferència entre la solució aproximada i la solució exacta.

  1. Mètode de la Bisecció

El mètode de la bisecció és una tècnica per trobar les arrels d'una funció contínua. Es basa en el teorema de Bolzano, que afirma que si una funció contínua canvia de signe en un interval, aleshores té almenys una arrel en aquest interval.

Algorisme

  1. Triar un interval \([a, b]\) tal que \(f(a) \cdot f(b) < 0\).
  2. Calcular el punt mig \(c = \frac{a + b}{2}\).
  3. Si \(f(c) = 0\) o l'interval és prou petit, \(c\) és l'arrel.
  4. Si \(f(a) \cdot f(c) < 0\), llavors l'arrel està en \([a, c]\); en cas contrari, està en \([c, b]\).
  5. Repetir els passos 2-4 fins a la convergència.

Exemple en ALGOL

begin
  real procedure f(x);
  value x;
  real x;
  f := x * x - 2;  ! Funció: f(x) = x^2 - 2

  real procedure bisection(a, b, tol);
  value a, b, tol;
  real a, b, tol;
  real c;
  while abs(b - a) > tol do
  begin
    c := (a + b) / 2;
    if f(c) = 0 then
      return c;
    else if f(a) * f(c) < 0 then
      b := c;
    else
      a := c;
  end;
  return (a + b) / 2;
end;

real a, b, tol, root;
a := 0;
b := 2;
tol := 0.0001;
root := bisection(a, b, tol);
print("L'arrel aproximada és: ", root);
end;

  1. Mètode de Newton-Raphson

El mètode de Newton-Raphson és una tècnica iterativa per trobar les arrels d'una funció. Utilitza la derivada de la funció per millorar les aproximacions successives.

Algorisme

  1. Triar una aproximació inicial \(x_0\).
  2. Calcular la següent aproximació: \(x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}\).
  3. Repetir el pas 2 fins a la convergència.

Exemple en ALGOL

begin
  real procedure f(x);
  value x;
  real x;
  f := x * x - 2;  ! Funció: f(x) = x^2 - 2

  real procedure df(x);
  value x;
  real x;
  df := 2 * x;  ! Derivada: f'(x) = 2x

  real procedure newton_raphson(x0, tol);
  value x0, tol;
  real x0, tol;
  real x1;
  while abs(f(x0)) > tol do
  begin
    x1 := x0 - f(x0) / df(x0);
    x0 := x1;
  end;
  return x0;
end;

real x0, tol, root;
x0 := 1;
tol := 0.0001;
root := newton_raphson(x0, tol);
print("L'arrel aproximada és: ", root);
end;

  1. Integració Numèrica: Regla del Trapezi

La regla del trapezi és una tècnica per aproximar la integral d'una funció contínua dividint l'àrea sota la corba en trapezis.

Algorisme

  1. Dividir l'interval \([a, b]\) en \(n\) subintervals de longitud \(h = \frac{b - a}{n}\).
  2. Calcular la suma de les àrees dels trapezis.

Exemple en ALGOL

begin
  real procedure f(x);
  value x;
  real x;
  f := x * x;  ! Funció: f(x) = x^2

  real procedure trapezoidal(a, b, n);
  value a, b, n;
  real a, b;
  integer n;
  real h, sum;
  integer i;
  h := (b - a) / n;
  sum := (f(a) + f(b)) / 2;
  for i := 1 step 1 until n - 1 do
    sum := sum + f(a + i * h);
  return h * sum;
end;

real a, b, result;
integer n;
a := 0;
b := 1;
n := 100;
result := trapezoidal(a, b, n);
print("L'aproximació de la integral és: ", result);
end;

  1. Diferenciació Numèrica

La diferenciació numèrica és una tècnica per aproximar la derivada d'una funció utilitzant diferències finites.

Algorisme

  1. Utilitzar la fórmula de la diferència finita: \(f'(x) \approx \frac{f(x + h) - f(x)}{h}\).

Exemple en ALGOL

begin
  real procedure f(x);
  value x;
  real x;
  f := x * x;  ! Funció: f(x) = x^2

  real procedure differentiate(x, h);
  value x, h;
  real x, h;
  return (f(x + h) - f(x)) / h;
end;

real x, h, derivative;
x := 1;
h := 0.0001;
derivative := differentiate(x, h);
print("L'aproximació de la derivada és: ", derivative);
end;

  1. Exercicis Pràctics

Exercici 1: Mètode de la Bisecció

Implementa el mètode de la bisecció per trobar l'arrel de la funció \(f(x) = x^3 - 4x + 1\) en l'interval \([0, 2]\) amb una tolerància de \(0.0001\).

Exercici 2: Mètode de Newton-Raphson

Implementa el mètode de Newton-Raphson per trobar l'arrel de la funció \(f(x) = e^x - 3x\) amb una aproximació inicial de \(x_0 = 1\) i una tolerància de \(0.0001\).

Exercici 3: Integració Numèrica

Utilitza la regla del trapezi per aproximar la integral de la funció \(f(x) = \sin(x)\) en l'interval \([0, \pi]\) amb \(n = 100\) subintervals.

Exercici 4: Diferenciació Numèrica

Implementa una funció per calcular la derivada numèrica de \(f(x) = \ln(x)\) en el punt \(x = 2\) amb \(h = 0.0001\).

Solucions

Solució a l'Exercici 1

begin
  real procedure f(x);
  value x;
  real x;
  f := x * x * x - 4 * x + 1;  ! Funció: f(x) = x^3 - 4x + 1

  real procedure bisection(a, b, tol);
  value a, b, tol;
  real a, b, tol;
  real c;
  while abs(b - a) > tol do
  begin
    c := (a + b) / 2;
    if f(c) = 0 then
      return c;
    else if f(a) * f(c) < 0 then
      b := c;
    else
      a := c;
  end;
  return (a + b) / 2;
end;

real a, b, tol, root;
a := 0;
b := 2;
tol := 0.0001;
root := bisection(a, b, tol);
print("L'arrel aproximada és: ", root);
end;

Solució a l'Exercici 2

begin
  real procedure f(x);
  value x;
  real x;
  f := exp(x) - 3 * x;  ! Funció: f(x) = e^x - 3x

  real procedure df(x);
  value x;
  real x;
  df := exp(x) - 3;  ! Derivada: f'(x) = e^x - 3

  real procedure newton_raphson(x0, tol);
  value x0, tol;
  real x0, tol;
  real x1;
  while abs(f(x0)) > tol do
  begin
    x1 := x0 - f(x0) / df(x0);
    x0 := x1;
  end;
  return x0;
end;

real x0, tol, root;
x0 := 1;
tol := 0.0001;
root := newton_raphson(x0, tol);
print("L'arrel aproximada és: ", root);
end;

Solució a l'Exercici 3

begin
  real procedure f(x);
  value x;
  real x;
  f := sin(x);  ! Funció: f(x) = sin(x)

  real procedure trapezoidal(a, b, n);
  value a, b, n;
  real a, b;
  integer n;
  real h, sum;
  integer i;
  h := (b - a) / n;
  sum := (f(a) + f(b)) / 2;
  for i := 1 step 1 until n - 1 do
    sum := sum + f(a + i * h);
  return h * sum;
end;

real a, b, result;
integer n;
a := 0;
b := 3.141592653589793;  ! Valor aproximat de π
n := 100;
result := trapezoidal(a, b, n);
print("L'aproximació de la integral és: ", result);
end;

Solució a l'Exercici 4

begin
  real procedure f(x);
  value x;
  real x;
  f := ln(x);  ! Funció: f(x) = ln(x)

  real procedure differentiate(x, h);
  value x, h;
  real x, h;
  return (f(x + h) - f(x)) / h;
end;

real x, h, derivative;
x := 2;
h := 0.0001;
derivative := differentiate(x, h);
print("L'aproximació de la derivada és: ", derivative);
end;

Conclusió

En aquest tema, hem explorat diversos mètodes numèrics i com implementar-los en ALGOL. Hem après a trobar arrels de funcions, integrar i diferenciar numèricament. Aquests mètodes són fonamentals per a la resolució de problemes complexos en la programació científica i l'enginyeria. Els exercicis pràctics proporcionats ajuden a consolidar els conceptes apresos i a desenvolupar habilitats de programació en ALGOL.

© Copyright 2024. Tots els drets reservats