Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583

Система ОДУ не решается

15.02.2018, 11:25. Показов 5149. Ответов 99
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите как сделать программу, очень нужно
Миниатюры
Система ОДУ не решается  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2018, 11:25
Ответы с готовыми решениями:

Система уравнений не решается :(
Добрый день, Помогите, пожалуйста, не получается решить систему. С маткадом раньше не работала, так что заранее прошу прощения за...

Не решается система уравнение
Всем привет! Подскажите пожалуйста, почему маткад 15 не решает систему? Ввел начальные условия, первое приближение. После given сама...

Не решается система уравнений
при решении уравнений выдается единичная матрица, это же не ответы...как быть, помогите пожалуйста!

99
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
15.02.2018, 18:51  [ТС]
Студворк — интернет-сервис помощи студентам
mat_for_c, в void 6 переменных и при выводе тоже добавить, чтобы было 6 ?

Добавлено через 32 секунды
mat_for_c, или мы не учитываем t0 ?
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
15.02.2018, 18:55
Цитата Сообщение от ElKros Посмотреть сообщение
в void 6 переменных и при выводе тоже добавить, чтобы было 6 ?
да, не успел отредактировать.

Добавлено через 2 минуты
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
#include <iostream>
#include <functional>
#include <vector>
#include <iomanip>
 
using namespace std;
 
double dx1dt(const double t, const double x1, const double x2, const double x3) {
   return x1 - x2 + x3;
}
 
double dx2dt(const double t, const double x1, const double x2, const double x3) {
   return x1 + x2 - x3;
}
 
double dx3dt(const double t, const double x1, const double x2, const double x3) {
   return 2*x1 - 2*x2;
}
 
void rungeKutta(double x, double y, double z, double t0, double max_t, double h) {
 
   double k1[3], k2[3], k3[3], k4[3];
 
   double t = t0;
 
   vector<function<double(double, double, double, double)>> vfunc;
   vfunc.push_back(dx1dt);
   vfunc.push_back(dx2dt);
   vfunc.push_back(dx3dt);
 
   size_t max_iter = (max_t - t0) / h;
 
 
   for (int i = 0; i < max_iter; i++)
   {
      cout << t << "\t" << setprecision(5) << x << "\t" << y << "\t" << z << endl;
 
      for (int j(0); j < 3; ++j) {
         k1[j] = h*vfunc[j](t, x, y, z);
      }
 
      for (int j(0); j < 3; ++j) {
         k2[j] = h*vfunc[j](t + 0.5*h, x + 0.5*k1[0], y + 0.5*k1[1], z + 0.5*k1[2]);
      }
 
      for (int j(0); j < 3; ++j) {
         k3[j] = h*vfunc[j](t + 0.5*h, x + 0.5*k2[0], y + 0.5*k2[1], z + 0.5*k2[2]);
      }
 
      for (int j(0); j < 3; ++j) {
         k4[j] = h*vfunc[j](t + h, x + k3[0], y + k3[1], z + k3[2]);
      }
      
      x += (k1[0] + 2 * k2[0] + 2 * k3[0] + k4[0]) / 6.;
      y += (k1[1] + 2 * k2[1] + 2 * k3[1] + k4[1]) / 6.;
      z += (k1[2] + 2 * k2[2] + 2 * k3[2] + k4[2]) / 6.;
 
      t = t + h;
   }
   cout << t << setprecision(5) << "\t" << x << "\t" << y << "\t" << z << endl;
}
 
int main() {
   double x0 = 1;
   double y0 = 1;
   double z0 = 1;
   double beg_time = 0;
   double max_time = 1;
   double step = 0.1;
   rungeKutta(x0, y0, z0, beg_time, max_time, step);
}
1
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
16.02.2018, 17:51  [ТС]
mat_for_c, спасибо огромное ) очень помогли )

Добавлено через 1 минуту
mat_for_c, а если будет увеличиваться количество уравнений в системе, то просто добавлять новые значения в функцию и увеличивать массив k[] до количества всех переменных ?

Добавлено через 8 секунд
mat_for_c, а если будет увеличиваться количество уравнений в системе, то просто добавлять новые значения в функцию и увеличивать массив k[] до количества всех переменных ?
0
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
16.02.2018, 17:54
ElKros, Вы человека поблагодарите нажатием кнопки "Спасибо", да и лучший ответ не помешает.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
16.02.2018, 17:58  [ТС]
мановар, я не знала, что здесь такое нужно делать
0
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
16.02.2018, 18:03
Цитата Сообщение от ElKros Посмотреть сообщение
что здесь такое нужно делать
Это по желанию, это не обязаловка, но это показывает Ваше отношение к человеку, который Вам помог.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
16.02.2018, 18:07  [ТС]
Очень помог и я ему безумно благодарна, да и сделать один клик не так уж и сложно ) побольше бы таких добрых и отзывчивых людей )
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
16.02.2018, 22:14
Цитата Сообщение от ElKros Посмотреть сообщение
а если будет увеличиваться количество уравнений в системе, то просто добавлять новые значения в функцию и увеличивать массив k[] до количества всех переменных ?
да, и не забудьте про увеличение количества входных параметров для функций. тут было только 3 функции, поэтому использовал переменные x, y, z.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
16.02.2018, 23:39  [ТС]
mat_for_c, если у меня в системе 4 уравнения, то для каждой производной нужно выписывать все входные константы и неизвестные или только неизвестные ? И в методе при нахождении k1 ... k4 вводить только 4 искомые неизвестные переменные ?

Добавлено через 2 минуты
mat_for_c, можно я попробую написать для 4х уравнений и сюда сброшу, чтобы вы посмотрели , если вас не затруднит это?
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
16.02.2018, 23:55
Цитата Сообщение от ElKros Посмотреть сообщение
нужно выписывать все входные константы и неизвестные или только неизвестные ?
по правилам хорошего тона, нужно передавать все переменные, даже если они не используются. (это из матанализа)
Цитата Сообщение от ElKros Посмотреть сообщение
я попробую написать для 4х уравнений и сюда сброшу
дерзайте
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
16.02.2018, 23:59  [ТС]
mat_for_c, завтра сброшу что получится ) а почему мы их константами объявляем, а не обычными ?
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
17.02.2018, 00:17
Цитата Сообщение от ElKros Посмотреть сообщение
константами объявляем, а не обычными
правило хорошего тона. просто говорим компилятору и другим разработчикам, что эти величины в функции не меняются.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
17.02.2018, 13:10  [ТС]
mat_for_c, я начала писать, но запуталась с константами. Если они у нас присутствуют в задании уравнения, то мы их тоже должны вписывать в объявление и просчет ?
я набросала и вот, что получилось, не судите строго...

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
double dy0dt(const double t, const double y_0, const double y_1, const double y_2, const double y_3, const double tau, const double P, const double eps, const double alpha, const double I0){
    return eps - y_2*y_0*((P - 1 - y_0) / (1 - y_1)) + y_0 / tau;
}
double dy1dt(const double t, const double y_0, const double y_1, const double y_2, const double y_3, const double tau, const double P, const double eps, const double alpha, const double I0){
    return y_0 * y_2;
}
double dy2dt(const double t, const double y_0, const double y_1, const double y_2, const double y_3, const double tau, const double P, const double eps, const double alpha, const double I0){
    return y_0 * y_3;
}
 
double dy3dt(const double t, const double y_0, const double y_1, const double y_2, const double y_3, const double tau, const double P, const double eps, const double alpha, const double I0){
    return I0*(sqrt(y_0))*pow(2.718, (-alpha / y_0)); // не видит exp = 2.718
}
 
void rungeKutta_by_4(double y0, double y1, double y2, double y3, double tau,  double P, double eps, double alpha, double I0, double t0, double max_t, double h){
    double k1[4], k2[4], k3[4], k4[4];
 
    double t = t0;
 
    vector<function<double(double, double, double, double, double, double, double, double, double, double) >> vfunc;
    vfunc.push_back(dy0dt);
    vfunc.push_back(dy1dt);
    vfunc.push_back(dy2dt);
    vfunc.push_back(dy3dt);
 
    size_t max_iter = (max_t - t0) / h;
 
    for (int i = 0; i < max_iter; i++)
    {
        cout << t << "\t" << setprecision(5) << y0 << "\t" << y1 << "\t" << y2 << "\t" << y3 << endl;
 
        for (int j(0); j < 4; ++j) {
            k1[j] = h*vfunc[j](t, y0, y1, y2, y3, tau, P, eps, alpha, I0);
        }
 
        for (int j(0); j < 4; ++j) {
            k2[j] = h*vfunc[j](t + 0.5*h, y0 + 0.5*k1[0], y1 + 0.5*k1[1], y2 + 0.5*k1[2], y3 + 0.5*k1[3], tau, P, eps, alpha, I0);
        }
 
        for (int j(0); j < 4; ++j) {
            k3[j] = h*vfunc[j](t + 0.5*h, y0 + 0.5*k2[0], y1 + 0.5*k2[1], y2 + 0.5*k2[2], y3 + 0.5*k3[3], tau, P, eps, alpha, I0);
        }
 
        for (int j(0); j < 4; ++j) {
            k4[j] = h*vfunc[j](t + h, y0 + k3[0], y1 + k3[1], y2 + k3[2], y3 + k3[4], tau, P, eps, alpha, I0);
        }
 
        y0 += (k1[0] + 2 * k2[0] + 2 * k3[0] + k4[0]) / 6.;
        y1 += (k1[1] + 2 * k2[1] + 2 * k3[1] + k4[1]) / 6.;
        y2 += (k1[2] + 2 * k2[2] + 2 * k3[2] + k4[2]) / 6.;
        y3 += (k1[2] + 2 * k2[2] + 2 * k3[2] + k4[2]) / 6.;
 
        t = t + h;
    }
    cout << t << setprecision(5) << "\t" << y0 << "\t" << y1 << "\t" << y2 << "\t" << y3 << endl;
 
}
 
int main() {
        double y_0, y_1, y_2, y_3;
    cout << "Input y0: "; cin >> y_0; // 10^(-10)
    cout << "Input y1: "; cin >> y_1; // 0
    cout << "Input y2: "; cin >> y_2; // 0
    cout << "Input y3: "; cin >> y_3; // 0
 
        // заданные константы
    double alpha;
    double I0;
    double P;
    double tau ;
 
        // зависит от t
    double eps = 8; 
 
    double beg_time, max_time;
    cout << "Input begin: "; cin >> beg_time; // = 0
    cout << "Input end: "; cin >> max_time;   // = 1
 
    double step; 
    cout << "Input step: "; cin >> step;      // = 0.1
 
    rungeKutta_by_4(y_0, y_1, y_2, y_3, beg_time, max_time, step); // сюда нужно дописывать константы 
}
Добавлено через 4 минуты
mat_for_c, подскажите пожалуйста, как учитывать заданные константы alpha, I0, tau и т.д. или как их лучше записывать ?

Добавлено через 5 секунд
mat_for_c, подскажите пожалуйста, как учитывать заданные константы alpha, I0, tau и т.д. или как их лучше записывать ?
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
17.02.2018, 13:31
Цитата Сообщение от ElKros Посмотреть сообщение
как учитывать заданные константы alpha, I0, tau и т.д. или как их лучше записывать ?
Если они вводятся с клавиатуры, то передавать в качестве параметров, а если же они фиксированы, то писать циферками сказу в уравнении, например 0.25 * x - 0.1 * y
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
17.02.2018, 13:35  [ТС]
mat_for_c, а так, код правильно написан или там много ошибок ? Они будут вводиться с клавиатуры
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
17.02.2018, 13:36
Неверно:
C++
1
2
3
4
//40 строка 5 параметр функции
for (int j(0); j < 4; ++j) {
   k4[j] = h*vfunc[j](t + h, y0 + k3[0], y1 + k3[1], y2 + k3[2], y3 + k3[4], tau, P, eps, alpha, I0);
}
Нужно y3 + k3[3]

Неверно:
C++
1
2
// 50 строка
y3 += (k1[2] + 2 * k2[2] + 2 * k3[2] + k4[2]) / 6.;
нужно
C++
1
y3 += (k1[3] + 2 * k2[3] + 2 * k3[3] + k4[3]) / 6.;
- аккуратнее с copy_paste
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
17.02.2018, 13:40  [ТС]
mat_for_c, а в вызове функции, в main, там нужно еще записывать константы ?

Добавлено через 1 минуту
mat_for_c, меня смущает, что очень много параметров в функции я позаписыаала, нельзя это как-то сократить ?
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
17.02.2018, 13:45
ElKros, у вас констатны в ОДУ заданы или они с клавиатуры считываются?
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
17.02.2018, 13:52  [ТС]
вот так задается все
Миниатюры
Система ОДУ не решается  
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
17.02.2018, 13:53  [ТС]
mat_for_c, и почему не распознает exp, когда ее объявляем глобальной константой ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2018, 13:53

Не решается система уравнений
откуда ошибка?

Как решается данная система?
Народ помогите, задание найти решение системы, как такое сделать в маткаде. не понимаю просто((

Система уравнений решается неверно
Доброго времени суток. Возникла проблема с решением системы уравнений. ....ax+b/a-c*x^2, x&gt;=500 z= ...

Почему не решается система уравнений?
Вручную считается. Т.е. в формулах ошибки нету

Не решается система диф. уравнений
Решаю систему по примеру, частное уравнение вывел правильно, а вот с общим что-то не то. Wolfram Alfa выдает следующее:


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru