Программа для решения дифференциального уравнения методом Эйлера — C#(Си шарп)|С++(Си++)

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;
}

Leave a Comment