y’ = (-y+x*sin(x))/(x)
y(1) = 0.3011687 = sin1-cos1
x ∈ [1,2]
с#
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++
#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;
}