Jakub Wietrzyński, gr.V
Laboratorium z Metod Numerycznych
Temat: Przybliżone rozwiązywanie równań
różniczkowych
Data realizacji: 04-05-2016, godz. 15:30-17:00
Zad.1.
Kod programu:
#include
<iostream>
using
namespace
std;
int
main() {
double
x0, y0, h, xmax, f, dy, x, C, yd;
int
i=1;
cout <<
"Podaj x0: "
;
cin >> x0;
cout <<
"Podaj y0: "
;
cin >> y0;
cout <<
"Podaj h: "
;
cin >> h;
cout <<
"Podaj xmax: "
;
cin >> xmax;
C=y0/(exp((x0*x0)/20));
x=x0;
//zerowa iteracja
f=0.1*x*y0;
dy=h*f;
while
(x<xmax) {
x=x0+i*h;
y0+=dy;
f=0.1*x*y0;
dy=h*f;
yd = C*exp((x*x)/20);
cout <<
"\n"
<< x <<
" "
<< y0 <<
" "
<< yd << endl;
i++;
}
system(
"pause"
);
}
Zad.2.
Kod programu:
#include
<iostream>
using
namespace
std;
int
main() {
double
x0, y0, h, xmax, f, dy, x, C, yd, k, y, suma=0;
int
i=0;
cout <<
"Podaj x0: "
;
cin >> x0;
cout <<
"Podaj y0: "
;
cin >> y0;
cout <<
"Podaj h: "
;
cin >> h;
cout <<
"Podaj xmax: "
;
cin >> xmax;
C=y0/(exp((x0*x0)/20));
x=x0;
while
(x<xmax) {
x=x0;
y=y0;
k=h*(0.1*x*y);
dy=k;
suma+=dy;
x=x0+0.5*h;
y=y0+0.5*k;
k=h*(0.1*x*y);
dy=2*k;
suma+=dy;
x=x0+0.5*h;
y=y0+0.5*k;
k=h*(0.1*x*y);
dy=2*k;
suma+=dy;
x=x0+h;
y=y0+k;
k=h*(0.1*x*y);
dy=k;
suma+=dy;
dy=(1/6)*suma;
y0=y+dy;
x0=x;
yd = C*exp((x*x)/20);
cout <<
"\n"
<< i <<
" "
<< x <<
" "
<< y <<
" "
<< yd << endl;
i++;
}
system(
"pause"
);
}