Sunteți pe pagina 1din 6

UNIVERSITATEA TEHNICĂ A MOLDOVEI

Facultatea Informatică, Calculatoare și Microelectronică


Departamentul Informatică și Ingineria Sistemelor

Lucrare de laborator nr. 4


la disciplina Metode și Modele de Calcul

Tema: Rezolvarea numerică a ecuațiilor diferențiale

A efectuat studentul: Tombrachevici Dan, gr.IA-203


A verificat: asistent univ. Mihaela Rusanovschi

Chișinău 2021
1. Scopul lucrării
Să se determine soluția problemei Cauchy.
dy
=f ( x , y ) , y ( a )=b
dx
pe segmentul indicat [a, b] prin meotdele Euler, Euler modificat și Runge-Kutta cu pasul h=0,05.

Varianta 18 :

Codul programului:

#include <iostream>
#include <cmath>
using namespace std;

float function(float(x), float(y))


{
return pow(x, 2) + 3 * x * y;
}

int main()
{
int n, i;
double a, b;
float h;
float k0[25], k1[25], k2[25], k3[25];
a = 0;
b = 1;
h = 0.05;
n = (b - a) / h;
double y[10], e[10], x[10], Y[10], L[10];
x[0] = 0;
y[0] = 0.3;
cout << "+---------------------------------------------+" << endl;
cout << "| Metoda Euler |" << endl;
cout << "+---------------------------------------------+" << endl;
for (i = 1; i <= n; i++)
{
x[i] = x[i - 1] + h;
}

for (i = 1; i <= n; i++)


{
y[i] = y[i - 1] + (h * function(x[i - 1], y[i - 1]));
}
cout << "| Iteratii | x | y | f(x,y) |" << endl;

for (i = 1; i <= n; i++)


{
printf("| %2.d | %.2lf | %.5lf | %.5lf |\n", i, x[i], y[i],
function(x[i], y[i]));
}
cout << "+---------------------------------------------+" << endl;
cout << "| Metoda Euler Modificata |" << endl;
cout << "+---------------------------------------------+" << endl;
for (i = 1; i <= n; i++)
{
x[i] = x[i - 1] + h;
}

for (i = 1; i <= n; i++)


{
y[i] = y[i - 1] + (h * function(x[i - 1], y[i - 1]));
y[i] = y[i - 1] + ((h / 2) * (function(x[i - 1], y[i - 1]) + function(x[i],
y[i])));
}
cout << "| Iteratii | x | y | f(x,y) |" << endl;
for (i = 1; i <= n; i++)
{
printf("| %2.d | %.2lf | %.5lf | %.5lf |\n", i, x[i], y[i],
function(x[i], y[i]));
}
cout << "+---------------------------------------------+" << endl;
cout << "| Metoda Runge-Kutta |" << endl;
cout << "+---------------------------------------------+" << endl;
for (int i = 1; i <= n; i++)
{
k0[i - 1] = function(x[i - 1], y[i - 1]);
k1[i - 1] = function(x[i - 1] + 0.5 * h, y[i - 1] + 0.5 * k0[i - 1]);
k2[i - 1] = function(x[i - 1] + 0.5 * h, y[i - 1] + 0.5 * k1[i - 1]);
k3[i - 1] = function(x[i - 1] + h, y[i - 1] + k2[i - 1]);
y[i] = y[i - 1] + h / 6 * (k0[i - 1] + 2 * k1[i - 1] + 2 * k2[i - 1] + k3[i -
1]);
}
cout << "| Iteratii | x | y | f(x,y) |" << endl;

for (i = 1; i <= n; i++)


{
printf("| %2.d | %.2lf | %.5lf | %.5lf |\n", i, x[i], y[i],
function(x[i], y[i]));
}
return 0;
}

Rezultatele obținute:

1. Metoda Euler
2. Metoda Euler Modificată

3. Metoda Runge-Kutta
Concluzie:
După efectuarea acestei lucrări de laborator am rezolvat numeric ecuație difeențială.
Iar anume, am determinat soluția problemei Cauchy prin 3 metode: Euler, Euler
modificat și Runge-Kutta cu pasul h = 0,05.

S-ar putea să vă placă și