Я запускаю программу, которая преобразует эйлерово приближение обыкновенного дифференциального уравнения.Чем меньше выбранный размер шага, тем точнее аппроксимация.Я могу заставить его работать для заданного размера шага, используя этот код:
#include <iostream>
using std::cout;
double f (double x, double t)
{
return t*x*x-t;
}
int main()
{
double x=0.0,t=0.0,t1=2.0;
int n=20;
double h = (t1-t) / double(n);
// ----- EULERS METHOD
for (int i=0; i<n; i++)
{
x += h*f(x,t);
t += h;
}
cout << h << " " << x << "\n";
}
Так что этот код запускает приближение Эйлера для n = 20, которое соответствует размеру шага 0,1, и выводит размер шага вместе саппроксимация для х (2).Я хочу, чтобы top знал, как зациклить этот код (для разных значений n), чтобы он выводил это, а затем все более и более малые размеры шагов с соответствующими приближениями.то есть вывод примерно такой:
0.1 -0.972125
0.01 -0.964762
0.001 -0.9641
и т. д.
Итак, я попробовал цикл for внутри цикла for, но он дал мне странный вывод экстремальных значений.
#include <iostream>
using std::cout;
double f (double x, double t)
{
return t*x*x-t;
}
int main()
{
double x=0.0,t=0.0,t1=2.0;
for (int n=20;n<40;n++)
{
double h = (t1-t)/n;
for (int i=0;i<n;i++)
{
x += h*f(x,t);
t += h;
}
cout << h << " " << x << "\n";
}
}