Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 186, средняя оценка - 4.92
havrolev
0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 10
#1

Решение систем дифференциальных уравнений методами Эйлера - C++

24.09.2008, 23:38. Просмотров 23367. Ответов 20
Метки нет (Все метки)

Здравствуйте, дорогие программисты и просто любители языка С++!
В принципе, моя будущая специальность никак не пересекается с информатикой и тем более с языком С++, но увы наше образование устроенно так, что учат и тому, что тебе не надо........вобщем нет времени для рилических отступлений, перейду, пожалуй, сразу к своей просьбе.

Дело в том, что лекции нам по системам дифф. уравненией не начитали, но программу по этой теме задали. И мне как человеку достаточно далёкому от программирования выполнить её достаточно трудно. Так что вся надежда на вас!

Данные будут прикреплены к моему посту, есть просто огромная просьба помочь мне в решение проблемы. Нужно составить программу на языке С++ для решения данной системы уравнения. Если поможет в этом решение в МатКаде или Фартране, то это в файле будет.

Будьте добры, помогите, пожалуйста. Думаю, что для настоящих программистов эта задаче более чем лёгкая.....не то что для нас энергетиков

Скачать файл ххх.doc

З.Ы. если можно, то элементарнейшим языком
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2008, 23:38     Решение систем дифференциальных уравнений методами Эйлера
Посмотрите здесь:
Решение системы дифференциальных уравнений методом Эйлера C++
C++ Решение систем линейных уравнений различными методами
Решение дифуров методами Эйлера-Коши с итерациями и Рунге-Кутты четвертого порядка C++
C++ Решение нелинейных уравнений двумя методами
C++ Решение систем уравнений
Решение систем линейных уравнений C++
Решение систем нелинейных уравнений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
qwone
8 / 8 / 1
Регистрация: 18.08.2008
Сообщений: 129
25.09.2008, 00:16     Решение систем дифференциальных уравнений методами Эйлера #2
элементарным языком не получится .
Если серьезно сказать ,то эта задача для энергетиков . А точнее для тех энергетиков , которые вы никогда не станете . Внимательно изучай TOЭ . Когда то я проходил курс и мог решить эти задачи при помощи калькулятора. Но сейчас я уже эти моменты не вспомню , да и они не к чему .
Да вот еще . Люди "низших" профессий склоны перекладывать свои недоработки на людей "высших" . Закончишь ,будешь работать, узнаешь. так механики перекладывают на электриков , ну а те электронщиков систем управления , а те на программистов . Будто те боги.
Если хочешь , что бы тебе помогли , то составь формулы . А по формулам программу уже нарисуем .
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
25.09.2008, 00:21     Решение систем дифференциальных уравнений методами Эйлера #3
Цитата Сообщение от qwone Посмотреть сообщение
А по формулам программу уже нарисуем .
Да,и за готовые программы принято платить. Мы тоже люди,и у нас тоже много-много дел.
havrolev
0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 10
25.09.2008, 02:36  [ТС]     Решение систем дифференциальных уравнений методами Эйлера #4
qwone
1) ТОЭ нет, я перешёл только лишь на второй курс;
2) всё готово, есть все формулы, нужно лишь составить программу;
3) проблема заключается в том, что не начитаны лекции по системам диф. уравнений, как это всё оформляется в С++ я не знаю, в прочем, как и вся группа;

4) пожалуй, и самое главное проблема не в оформлении формул, я имею и по физике, и по математике 5 в одном из самых престижный технических вузов Поволжья.
Проблема в реализации всего этого в пакете С++.....ну нельзя толком знать этот язык, когда занятия у тебя раз в две недели, а порой пропадают по праздникам!
Если можешь помочь, то буду очень благодарен, формулы есть в прикреплённом файле. Суть проблемы описана в посте выше. Если поможешь, то с радостью перечислю на счёт твоего мобильного сумму до 100 рублей

З.Ы. в прикреплённом нужно решить уравнения (2) и (3), в прочем, там всё написано.

Добавлено через 1 час 9 минут 43 секунды
К тому же, пообщавшись с однокурсниками, понял, что действую от лица всей группы. Нам задали задачу, которую не начитали, вот и попали в просак.....так сказать. Да и к тому же, не думайте, что мы ищем халявы. Задание состоит из 3 частей, просим помочь только в одной, как я и говорил, что готовы и деньги заплатить. Спасибо!

Добавлено через 52 минуты 33 секунды
если кто возьмётся, то оплату гарантирую!
нужно решить систему методом Эйлера и методом Эйлера-Коши.
qwone
8 / 8 / 1
Регистрация: 18.08.2008
Сообщений: 129
25.09.2008, 18:38     Решение систем дифференциальных уравнений методами Эйлера #5
havrolev
Это ТОЭ без хотя бы поверхностного знания что это такое в энергетике делать не чего. (ТОЭ- это теоретические основы электротехники) . Обычно применяются при расчетах электрических цепей . активная и реактивная нагрузка . Задача подразумевает знание комплексных чисел и переходных процессов ( при включении и выключении , переключении .) Вам надо просто видеть типовое решение этой задачи . Когда есть пример там уже пойдет как по рельсам .
это ТОЭ ознакомься обязательно . Даже если будет готовая программа . Не знание основ приведет к плохой оценке.
http://www.toehelp.ru/theory/toe/contents.html

позже посмотрю решение этой задачи в инете . Но ничего не гарантирую .
Оплаты не получиться . Я в Украине . Увы .
Как и результата.

Добавлено через 3 минуты 26 секунд
Лекция N 24. Переходные процессы в линейных электрических цепях с сосредоточенными параметрами.
http://www.toehelp.ru/theory/toe/lec...lecture24.html
havrolev
0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 10
25.09.2008, 19:14  [ТС]     Решение систем дифференциальных уравнений методами Эйлера #6
qwone, большое спасибо за предоставленный сайт! Я как раз хотел перед самой электротехникой вникнуть в него, чтобы потом не было каких-то непоняток с ним! Огромное спасибо!
Но при этом проблема состоит в другом, у всей группы не начитанны лекции по информатике, поэтому есть проблемы с решением примера.
Если у вас на компьютере есть какая-то информация по реализации системы диф. уравнений методом Эйлера и Эйлера-Коши, то буду признателен.

http://www.toehelp.ru/theory/informat/lecture14.html
вот, именно методом Эйлера и его модификацией нужно нам и решить систему, если поможете, буду очень благодарен...........язык толком не преподают, а резульятат требуют, хоть и курс информатики длится всего лишь один год.
qwone
8 / 8 / 1
Регистрация: 18.08.2008
Сообщений: 129
25.09.2008, 22:16     Решение систем дифференциальных уравнений методами Эйлера #7
С вас врят ли потребуют слишком серьезных программ .
Программа должна быть консольная (без окон и всяких прибамбасов) .Это слишком затянет код программы .Графику наверное тоже можно откинуть . Си в консоле слаб на графику.
Скорее всего будет ввод будет с клавиатуры или в программе вставлены данные .
Будут фунции построенные на формуле решения и вывод .
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>   //  а это вводится что бы то что ниже работало
using namespace std;  //
 
float b= Fun(a){   // здесь формула для решения
return a;
};
 
 
int main (){                    
    cout << "Vvecti 4islo :";        // Здесь будет сообщение что надо что-то ввести
    float a;
    cin >> a;    // здесь вводится 
    float b= Fun(a);  // здесь решается
    cout << "Otvet:"<<b;  // a здесь выводится
    return 0;
}
вот примерно она так будет выглядеть . только она сейчас на с++ а надо наверное на С (состарить операторы- ну те что использовались ранее )

Добавлено через 11 минут 59 секунд
Блок-схема метода Эйлера-Коши с уточнением
http://solidbase.karelia.ru/edu/meth...ler_koshi.shtm
http://solidbase.karelia.ru/edu/meth_calc/files/13.shtm
Это значить надо будет делать иттерацию ( постепенное приближение).
Задать начальное число - потом вставить в формулу и получить его еще ближе . И если оно мало меняется то это оно и есть .
Аналогия как артелирист - выстрел - перелет(недолет)-выстрел - .. - цель поражена

Добавлено через 8 минут 47 секунд
Да забыл .
Бывают уравнения Ax^2+Bx+C=0 здесь зная A B C можно найти x по классической формуле . Но если бы не было формулы делали так :
x=-(C+Ax^2)/B . но мы же не знаем x . тогда бы взяли примерное x=x1 и нашли бы
x2=-(C+Ax1^2)/B и если x2 и x1 сильно отличались то делали дальше
x3=-(C+Ax2^2)/B
...
x100= -(C+Ax99^2)/B долго по человеческим меркам и быстро сделала бы машина.




1.3 Решение системы дифференциальных уравнений на языке Фортран:
Fortran
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
          REAL L,C,I0,I1,I2
          r1 = 30
          r2 = 25
          r3 = 50
          r4 = 1.88
          r5 = 15
          r6 = 50
          t0 = 0
          t1 = 0.01
          t2 = 0.02
          n = 1000
          E0 = 15
          f = 40
          L = 5.57E-3
          C = 20E-6
          I0 = 0
          U0 = 0
          fi = 3.14
          w = 2*3.14*f
          a = r4+(r1*r2)/(r1+r2)+(r3*(r5+r6))/(r5+r6+r3)
          b = (r5+r6)/(r3+r5+r6)
          g = 1/(r3+r5+r6)
          h = (t2-t0)/n
          WRITE(1,*)'        t        ','        I        ','        U'
          k = 3
          DO t = t0, t2, h
          IF (k.EQ.3) THEN
                  WRITE(1,*)t,I0,U0
                  k = 0
          END IF
          IF(t.LT.t1) THEN
                  d = r2/(r1+r2)
          ELSE
                  d = 0
          END IF
          I1 = I0+h*(1/L*((E0*SIN(w*t+fi))*d-I0*a-U0*b))
          U1 = U0+h*(1/C*(I0*b-U0*g))
          I2 = I0+h*(1/L*((E0*SIN(w*t+fi))*d-I1*a-U1*b))
          U2 = U0+h*(1/C*(I1*b-U1*g))
          I0 = I2
          U0 = U2
          k = k + 1
          END DO
          END
тебе что это перевести в С++ ???
havrolev
0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 10
26.09.2008, 06:12  [ТС]     Решение систем дифференциальных уравнений методами Эйлера #8
qwone,
Спасибо большое! Я вам безмерно благодарен!
Теперь наконец-таки понял, что разница между решением простого диф. уровнения и системы в С++ минимальна, до этого думал, что есть какие-то свои методы.
Огромное спасибо, узнав это могу сделать всё сам
тебе что это перевести в С++ ???
нет, спасибо, я всё понял!
qwone
8 / 8 / 1
Регистрация: 18.08.2008
Сообщений: 129
26.09.2008, 17:36     Решение систем дифференциальных уравнений методами Эйлера #9
havrolev
Я тоже этому рад ! Особенно когда люди самостоятельно потом решают .
Но С++ очень сложный язык .Во всех его эпостасях не знает никто . Но использовать его как расширение ( ну очень большое расширение ) легко . Главное знать формулы решения . И все будет пучком. Удачи !
havrolev
0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 10
26.09.2008, 18:01  [ТС]     Решение систем дифференциальных уравнений методами Эйлера #10
Это значить надо будет делать иттерацию ( постепенное приближение).
Задать начальное число - потом вставить в формулу и получить его еще ближе . И если оно мало меняется то это оно и есть .
Аналогия как артелирист - выстрел - перелет(недолет)-выстрел - .. - цель поражена

офф-топ, конечно. но эта фраза удивила))) я прекрасно знаю все методы по информатике аналитически, понимаю их смысли и могу всё сделать это на бумаге, только вот как это перевести на С++))))) вот с этим проблема,
qwone
8 / 8 / 1
Регистрация: 18.08.2008
Сообщений: 129
26.09.2008, 19:19     Решение систем дифференциальных уравнений методами Эйлера #11
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
#include <iostream>   //  а это вводится что бы то что ниже работало
#include<math.h>
using namespace std;  //
// Пример: найти при каком x   x=x*x
double Fun(double X){   // формула x=x*x
    double Y=X*X;
    return Y;
};
double Fun2(double X){   // формула x=корень(x)
    double Y=sqrt(X);
    return Y;
};
 
int main (){                    
    double XX=0.1;//здесь вводится x=x1 то есть x=0.1
    double XX2=XX;
    double  T=0.01; //с какой точностью надо
    do{
        XX=XX2;
         XX2=Fun2(XX);
         cout << XX <<"\t"<< XX2 <<endl;
        }
    while (abs(XX-XX2)>T);
        cout << "Otvet:"<<XX;  // a здесь выводится
    return 0;
вот тебе пример подхода о том каком я говорил . Fun- разбегается , Fun2- находит .
хотя все выведены их одной задачи ( найти такое число чтобы оно было умножено само на себя не изменилось)
А это просто еще один подход
http://ru.wikibooks.org/wiki/%D0%AF%...BD%D0%B8%D1%8F
ну и еще вариант составления програм на си
http://www.intuit.ru/department/se/pbmsu/9/2.html
havrolev
0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 10
26.09.2008, 19:30  [ТС]     Решение систем дифференциальных уравнений методами Эйлера #12
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
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
int main()
{double t,I,U,R1=30,R2=25,R3=50,R5=15,R6=60,C=20*pow10(-6),t0=0,U0=0,I0=0,R4=1.88,L=5.57*pow10(-3),t1=0.01,h,
a=(R4+(R1*R2)/(R1+R2)+(R5+R6)*R3/(R3+R5+R6)),b=((R5+R6)/(R3+R5+R6)),c=(1/(R3+R5+R6)),d=R2/(R1+R2),E0=15,E,t2=0.02;
int n;
cout<<"uslovie zadachi"<<endl;
cout<<"chislo razbieniy"<<endl;
cin>>n;
cout.precision(3);
cout<<setw(7)<<t0<<setw(7)<<U0<<setw(7)<<I0<<endl;
h=(t1-t0)/n;
t=t0;
while(t0<=t<=t1)
{t1=t0+h;
I=I0+h*(-I0*a-U0*b)/L);
U=U0+h*(I0*b-U0*c)/C);
I0=I;
U0=U;
cout<<setw(7)<<t<<setw(7)<<U<<setw(7)<<I<<endl;}
while(t1<t<=t2)
{t1=t0+h;
I=I0+h*(E0*sin(3.14*30*2*t+3*3.14/5)*d-I0*a-U0*b)/L);
U=U0+h*(I0*b-U0*c)/C);
I0=I;
U0=U;
cout<<setw(7)<<t<<setw(7)<<U<<setw(7)<<I<<endl;}
cin.get();
return 0;}
набросал программку на решение систем (2) и (3) в прикреплённом файле в первом посту, пишет, что ошибка, причём она встречается четыре раза (однотипная). Проверьте, пожалуйста
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
26.09.2008, 19:34     Решение систем дифференциальных уравнений методами Эйлера #13
Компилятор достаточно ясно говорит,что там лишние скобки.
havrolev
0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 10
26.09.2008, 21:02  [ТС]     Решение систем дифференциальных уравнений методами Эйлера #14
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
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
int main()
{double t,I,U,R1=30,R2=25,R3=50,R5=15,R6=60,C=20*pow10(-6),t0=0,U0=0,I0=0,R4=1.88,L=5.57*pow10(-3),t1=0.01,h,
a=(R4+(R1*R2)/(R1+R2)+(R5+R6)*R3/(R3+R5+R6)),b=((R5+R6)/(R3+R5+R6)),c=(1/(R3+R5+R6)),d=R2/(R1+R2),E0=15,E,t2=0.02;
cout<<"uslovie zadachi"<<endl;
cout<<"shag"<<endl;
cin>>h;
cout.precision(3);
cout<<setw(7)<<t0<<setw(7)<<U0<<setw(7)<<I0<<endl;
t=t0;
while(t0<=t<=t1)
{t1=t0+h;
I=I0+h*(-I0*a-U0*b)/L;
U=U0+h*(I0*b-U0*c)/C;
I0=I;
U0=U;
cout<<setw(7)<<t<<setw(7)<<U<<setw(7)<<I<<endl;}
while(t1<=t<=t2)
{t1=t0+h;
I=I0+h*(E0*sin(3.14*30*2*t+3*3.14/5)*d-I0*a-U0*b)/L;
U=U0+h*(I0*b-U0*c)/C;
I0=I;
U0=U;
cout<<setw(7)<<t<<setw(7)<<U<<setw(7)<<I<<endl;}
cin.get();
return 0;}
....ну и где же я ошибся, что у меня результат не выходит, прога просто циклится......
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
26.09.2008, 21:21     Решение систем дифференциальных уравнений методами Эйлера #15
while(t1<=t<=t2)
расставляй скобки для операций. Скажем,если t1 <= t2, то результат операции
будет 1,после чего эта единица сравнится с t2(если t1> t2,то будет ноль и ноль сравнится с t2). Думаю,это не то,что тебе надо.
while( (t1<=t ) && (t<=t2) )
havrolev
0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 10
26.09.2008, 22:03  [ТС]     Решение систем дифференциальных уравнений методами Эйлера #16
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
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
int main()
{double t,I,U,R1=30,R2=25,R3=50,R5=15,R6=60,C=20*pow10(-6),t0=0,U0=0,I0=0,R4=1.88,L=5.57*pow10(-3),h,
a=(R4+(R1*R2)/(R1+R2)+(R5+R6)*R3/(R3+R5+R6)),b=((R5+R6)/(R3+R5+R6)),c=(1/(R3+R5+R6)),d=R2/(R1+R2),E0=15,E,T1=0.01,T2=0.02;
cout<<"uslovie zadachi"<<endl;
cout<<"vvedite shag"<<endl;
cin>>h;
cout.precision(3);
cout<<setw(7)<<t0<<setw(7)<<U0<<setw(7)<<I0<<endl;
t=t0;
while(t<=T1)
{t=t0+h;
I=I0+h*(E0*sin(3.14*30*2*t0+3*3.14/5)*d-I0*a-U0*b)/L;
U=U0+h*(I0*b-U0*c)/C;
I0=I;
U0=U;
t0=t;
cout<<setw(7)<<t<<setw(7)<<U<<setw(7)<<I<<endl;}
while(T1<=t<=T2)
{t=t0+h;
I=I0+h*(-I0*a-U0*b)/L;
U=U0+h*(I0*b-U0*c)/C;
I0=I;
U0=U;
t0=t;                                          
cout<<setw(7)<<t<<setw(7)<<U<<setw(7)<<I<<endl;}
cin.get();
return 0;}
почему он не хочет выводить результаты в таблицу?
qwone
8 / 8 / 1
Регистрация: 18.08.2008
Сообщений: 129
27.09.2008, 22:58     Решение систем дифференциальных уравнений методами Эйлера #17
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
#include <iostream.h>
#include <math.h>
int main(){
double t,I,U,h;
double R1=30,R2=25,R3=50,R5=15,R6=60;
double C=20E-6,t0=0,U0=0,I0=0,R4=1.88,L=5.57E-3;
double a=(R4+(R1*R2)/(R1+R2)+(R5+R6)*R3/(R3+R5+R6));
double b=(R5+R6)/(R3+R5+R6);
double c=1/(R3+R5+R6);
double d=R2/(R1+R2);
double E0=15,E,T1=0.01,T2=0.02;
cout<<"Uslovie zadachi "<<endl<<"vvedite shag(0.001) :"<<endl;
cin>>h;
cout.precision(3);
cout<<t0<<"\t"<<U0<<"\t"<<I0<<endl;
t=t0;
while(t<=T1){
             t=t0+h;
             I=I0+h*(E0*sin(3.14*30*2*t0+3*3.14/5)*d-I0*a-U0*b)/L;
             U=U0+h*(I0*b-U0*c)/C;
             I0=I;
             U0=U;
             t0=t;
             cout<<"U =" <<U<<"\t"<<"I =" <<I<<endl;
}
cin>>h;
 
while( (t1<=t ) && (t<=t2) ){
                 t=t0+h;
                 I=I0+h*(-I0*a-U0*b)/L;
                 U=U0+h*(I0*b-U0*c)/C;
                 I0=I;
                 U0=U;
                 t0=t;
                 cout<<t<<"\t"<<I<<endl;
                 }
cin>>h;
return 0;
}
я слегка причесал твою программу . Там есть еще глюки ,как в формулах ,так и в исполнении .Позже подумаю.

Добавлено через 4 часа 48 минут 47 секунд
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
#include <iostream>
#include <math.h>
using namespace std;
int main(){
//                параметры схемы
double R1=30,R2=25,R3=50,R4=1.88,R5=15,R6=60; // сопротивление
double C=20E-6,L=5.57E-3; // реактивные элементы
double a=(R4+(R1*R2)/(R1+R2)+(R5+R6)*R3/(R3+R5+R6));
double b=(R5+R6)/(R3+R5+R6);
double d=R2/(R1+R2); 
double g=1/(R3+R5+R6); 
double    pi=3.1415;
double    f=40; // частота
double  w=2*pi*f;
//                начальные условия
double t,t0=0,t1=0.01,t2=0.02; // время
double n=1000,h=(t2-t0)/n ; // число и шар деления  
double E0=15;
double I0=0,I1,U0=0,U1;// напряжение и токи
cout << "---  t0 ----   "<<endl;
cout<<"t     \t I        \t U     "<<endl;
int AA=1,B=20; // показывать каждое  B
for(t=t0;t<=t1;t=t+h){    // до переключения
    I1=I0+h*1/L*(E0*sin(w*t+pi)*d-I0*a-U0*b);
    U1=U0+h*1/C*(I1*b-U0*g);
    I0=I1;U0=U1;
    AA++;
    if (AA==B){
        AA=1;
        cout<<t<<"\t"<<I0<<"\t"<<U0<<endl;
        }
};
cout << "---  t1 ----   "<<endl;
cout<<"t     \t I        \t U     "<<endl;
for(;t<=t2;t=t+h){    // после  переключения
    I1=I0+h*(1/L*(-I0*a-U0*b));
    U1=U0+h*1/C*(I1*b-U0*g);
    I0=I1;U0=U1;
    AA++;
    if (AA==B){
        AA=0;
        cout<< t <<"\t"<< I0<<"\t"<<U0<<endl;
        } 
    }
cout << "---  t2 ----   "<<endl;
cin.get();
return 0;
};
не заморачивайся .забирай
havrolev
0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 10
28.09.2008, 02:55  [ТС]     Решение систем дифференциальных уравнений методами Эйлера #18
спасибо огромное!! я безмерно благодарен, но почему в результате показываются только параметры при t>t1?
qwone
8 / 8 / 1
Регистрация: 18.08.2008
Сообщений: 129
28.09.2008, 10:00     Решение систем дифференциальных уравнений методами Эйлера #19
у тебя просто экрана не хватило . оно сверху.
у меня визуал - я вижу все строки .

Добавлено через 2 минуты 41 секунду
добавь после 1-го цикла
Код
cin.get();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2008, 19:47     Решение систем дифференциальных уравнений методами Эйлера
Еще ссылки по теме:
Решение нелиненых уравнений и систем C++
Решение систем алгебраических уравнений C++
C++ Решение нелинейных уравнений и систем
Решение обычных деференциальных уравнений методами Ейлера, Рунге-Кутта C++
Решение системы нелинейных уравнений методами Ньютона и простых итераций C++

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

Или воспользуйтесь поиском по форуму:
havrolev
0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 10
28.09.2008, 19:47  [ТС]     Решение систем дифференциальных уравнений методами Эйлера #20
qwone
Спасибо большое!
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
#include <iostream.h>
#include <math.h>
int main(){
double R1=30,R2=25,R3=50,R4=1.88,R5=15,R6=60;
double C=20E-6,L=5.57E-3;
double a=(R4+(R1*R2)/(R1+R2)+(R5+R6)*R3/(R3+R5+R6));
double b=(R5+R6)/(R3+R5+R6);
double d=R2/(R1+R2);
double g=1/(R3+R5+R6);
double    pi=3.1415;
double    f=30,fi=3*pi/5;
double  w=2*pi*f;
double t,T0=0,T1=0.01,T2=0.02,t0,t1;
double n=1000,h=(T2-T0)/n ;
double E0=15;
double I0=0,I1,U0=0,U1,I,U;
cout << "---  t0 ----   "<<endl;
cout<<"t     \t I        \t U     "<<endl;
int AA=1,B=20;
t=T0;
while(t<=T1)
    {t1=t0+h;
    I1=I0+h*1/L*(E0*sin(w*t0+fi)*d-I0*a-U0*b);
    U1=U0+h*1/C*(I0*b-U0*g);
    t=t1;
    I=I0+h*(1/L*(E0*sin(w*t0+fi)*d-I0*a-U0*b)+1/L*(E0*sin(w*t1+fi)*d-I1*a-U1*b))/2;
    U=U0+h*(1/C*(I0*b-U0*g)+1/C*(I1*b-U1*g))/2;
    t0=t;I0=I;U0=U;
    AA++;
    if (AA==B){
    AA=1;
    cout<<t<<"\t"<<I<<"\t"<<U<<endl;
    }
};
cin.get();
cout << "---  t1 ----   "<<endl;
cout<<"t     \t I        \t U     "<<endl;
while(t<=T2)
    {t1=t0+h;
    I1=I0+h*1/L*(-I0*a-U0*b);
    U1=U0+h*1/C*(I0*b-U0*g);
    t=t1;
    I=I0+h*(1/L*(-I0*a-U0*b)+1/L*(-I1*a-U1*b))/2;
    U=U0+h*(1/C*(I0*b-U0*g)+1/C*(I1*b-U1*g))/2;
    t0=t;I0=I;U0=U;
    AA++;
    if (AA==B){
    AA=1;
    cout<< t <<"\t"<< I<<"\t"<<U<<endl;
    }
    }
cout << "---  t2 ----   "<<endl;
cin.get();
return 0;
};
Вот если кому понадобится таже программа, только методом Эйлера-Коши
Yandex
Объявления
28.09.2008, 19:47     Решение систем дифференциальных уравнений методами Эйлера
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru