Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/27: Рейтинг темы: голосов - 27, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 25.10.2009
Сообщений: 4

Решить приближенно задачу Коши для ОДУ 3 порядка

13.06.2011, 14:10. Показов 5706. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно Решить приближенно задачу Коши для ОДУ 3 порядка
a0*y```+a1*y``+a2*y`+a3*y=f(t)
y(A)=b1;y`(A)=b2;y``(A)=b3.
на отрезке [A, B], используя метод Рунге-Кутты 4 с шагами h=0.1 и h=0.05 для систем ОДУ 1 порядка.
A=0;B=1,5;b1=1;b2=2,5;b3=6;a0=1;a1=-2;a2=0,25;a3=45,75;f(t)=e^(-2t)+3*t+1.
Нужно решить данную задачу на С#.Нашёл сам метод Рунге-кутта:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using System;
using System.Collections.Generic;
 
namespace rwsh_rk4
{
    abstract class TRungeKutta 
    {
        public int N;
        double t; // текущее время 
        public double[] Y; // искомое решение Y[0] - само решение, Y[i] - i-тая производная решения
 
        double[] YY, Y1, Y2, Y3, Y4; // внутренние переменные 
 
        public TRungeKutta(int N) // N - размерность системы 
        {
            this.N = N; // сохранить размерность системы
 
            if (N < 1)
            {
                this.N = -1; // если размерность меньше единицы, то установить флаг ошибки
                return; // и выйти из конструктора
            }
 
            Y = new double[N]; // создать вектор решения
            YY = new double[N]; // и внутренних решений
            Y1 = new double[N];
            Y2 = new double[N];
            Y3 = new double[N];
            Y4 = new double[N];
        }
 
        public void SetInit(double t0, double[] Y0) // установить начальные условия.
        {                                           // t0 - начальное время, Y0 - начальное условие
            t = t0;
            int i;
            for (i = 0; i < N; i++)
            {
                Y[i] = Y0[i];
            }
        }
 
        public double GetCurrent() // вернуть текущее время
        {
            return t;
        }
 
        abstract public void F(double t, double[] Y, ref double[] FY); // правые части системы.
 
        public void NextStep(double dt) // следующий шаг метода Рунге-Кутта, dt - шаг по времени (может быть переменным)
        {
            if(dt<0)
            {
                return;
            }
 
            int i;
 
            F(t, Y, ref Y1); // рассчитать Y1
 
            for (i = 0; i < N; i++)
            {
                YY[i] = Y[i] + Y1[i] * (dt / 2.0);
            }
            F(t + dt / 2.0, YY, ref Y2); // рассчитать Y2
 
            for (i = 0; i < N; i++)
            {
                YY[i] = Y[i] + Y2[i] * (dt / 2.0);
            }
            F(t + dt / 2.0, YY, ref Y3); // рассчитать Y3
 
            for (i = 0; i < N; i++)
            {
                YY[i] = Y[i] + Y3[i] * dt;
            }
            F(t + dt, YY, ref Y4); // рассчитать Y4
 
            for (i = 0; i < N; i++)
            {
                Y[i] = Y[i] + dt / 6.0 * (Y1[i] + 2.0 * Y2[i] + 2.0 * Y3[i] + Y4[i]); // рассчитать решение на новом шаге
            }
 
            t = t + dt; // увеличить шаг
 
        }
    }
 
    class TMyRK : TRungeKutta
    {
        public TMyRK(int aN) : base(aN) { }
 
        public override void F(double t, double[] Y, ref double[] FY) 
        {
            FY[0] = Y[1]; // пример математический маятник 
            FY[1] = -Y[0]; // y''(t)+y(t)=0
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            TMyRK RK4 = new TMyRK(2);
 
            double[] Y0 = {0, 1}; // зададим начальные условия y(0)=0, y'(0)=1
 
            RK4.SetInit(0, Y0);
 
            while (RK4.GetCurrent() < 10) // решаем до 10
            {
                Console.WriteLine("{0}\t{1}\t{2}", RK4.GetCurrent(), RK4.Y[0], RK4.Y[1]); // вывести t, y, y'
 
                RK4.NextStep(0.01); // расчитать на следующем шаге, шаг интегрирования dt=0.01
            }
        }
    }
}
Помогите решить задачу
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.06.2011, 14:10
Ответы с готовыми решениями:

Решить задачу Коши для дифференциального уравнения второго порядка методом Эйлера-Коши
Решить задачу Коши для дифференциального уравнения второго порядка методом Эйлера- Коши. y//=2x-y+y/ на отрезке c шагом h=0,2;...

Решить задачу Коши для линейного уравнения 1 порядка.
помогите решить диф. уравнение завтра сегодня нужно сдать y'=x+y, y(0)=1

Решить задачу Коши для линейного уравнения 1 порядка.
нужно решыть

1
0 / 0 / 0
Регистрация: 14.02.2015
Сообщений: 5
21.04.2015, 13:11
Зачем ты сделаешь себе, проблема. Это же простая задача
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2015, 13:11
Помогаю со студенческими работами здесь

Решить задачу Коши для линейного однородного уравнения 2 порядка.
нужно решыть

Решить задачу Коши для диф. уравнения , допускающего понижение порядка
Решить задачу Каши для диф.уравнения , допускающего понижение порядка. Нужно очень срочно , помогите ,пожалуйста, заранее благодарю!) ...

Методом трапеции решить задачу Коши для диффернциальных уравнений 1-го порядка
y'=x+y, y(0)=1 т.е игрик штрих равно икс плюс игрик)для тех кто не понял:) Добавлено через 1 минуту методом трапеции с шагом...

Коши для ОДУ 1-го порядка методом Рунге–Кутта 4-го порядка
==Решить задачу Коши для ОДУ 1-го порядка методом Рунге–Кутта 4-го порядка. Количество узлов – 6. Сгустить сетку, вычислить значения ...

Решить задачу Коши методом Эйлера второго порядка
Нужно решить задачу Коши методом Эйлера второго порядка. \frac{dy}{dx}={e}^{x-y}+{e}^{x}, y(0)=0.5413252, x\in ,h=0.1 Моё решение, но я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru