y’ = (-y+x*sin(x))/(x)
y(1) = 0.3011687 = sin1-cos1
x ∈ [1,2]
с#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | public static double DyDx( double x, double y) { return (-y+x*Math.Sin(x))/x; } static void Main( string [] args) { double a, b, v, k, g = 0; Console.WriteLine($ "Значение конечной точки {nameof(a)} : " ); a=Convert.ToDouble(Console.ReadLine()); Console.WriteLine($ "Значение конечной точки {nameof(b)} : " ); b=Convert.ToDouble(Console.ReadLine()); Console.WriteLine($ "Значение y начального условия: " ); v=Convert.ToDouble(Console.ReadLine()); int n; Console.WriteLine($ "Введите количество шагов, {nameof(n)} : " ); n = Convert.ToInt32(Console.ReadLine()); k = (b - a) / n; while ((b - a) > k / 2.0) { g = v + (k * DyDx(a, v)); v = g; a += k; Console.WriteLine($ "{nameof(g)}({a})={g}" ); } Console.WriteLine($ "Приближенное решение задачи ({nameof(b)}) это {g}" ); Console.ReadKey(); } |
c++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include<iostream> #include<iomanip> #include<cmath> using namespace std; double dydx( double x, double y) { double f = ((-y+x* sin (x))/(x)); return f; } int main() { double a, b, v, k, g; cout << "\nЗначение конечной точки a : \n" ; cin >> a; cout << "\nЗначение конечной точки b: \n" ; cin >> b; cout << "\nЗначение y начального условия: \n" ; cin >> v; /* * Получение размера шага * Оптимально n = 80 */ int n = 0; cout << "\nВведите количество шагов, n: \n" ; cin >> n; k = (b - a) / n; //------ cout << "\n" ; //-- Заменено 0.0000001 на h / 2.0 -- while ((b - a) > k / 2.0) { g = v + (k * dydx(a, v)); v = g; a = a + k; /* * Значение g - функции в следующей точке */ cout << "g(" << a << ")=" << g << endl; } cout << "\nПриближенное решение задачи (" << b << ") это " << g << "." << endl; return 0; } |