Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/141: Рейтинг темы: голосов - 141, средняя оценка - 4.60
havrolev
1 / 1 / 0
Регистрация: 24.09.2008
Сообщений: 10
1

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

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

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

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

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

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

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

З.Ы. если можно, то элементарнейшим языком
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2008, 23:38
Ответы с готовыми решениями:

Решение системы дифференциальных уравнений методом Эйлера
В интернете нашел похожий код, но для 1 уравнения, может кто помочь сделать для 2? Тоесть для...

Решение уравнений методами Рунге-Кутта и Эйлера
Решить уравнение при помощи методов Эйлера и Рунге Кутта, описывающее смещение x электрона в атоме...

Решение систем линейных уравнений различными методами
#include "stdafx.h" #include "iostream" #include "cmath" using namespace std; void...

Решение дифференциальных уравнений
Нужна сделать программу для решения дифференциальных уравнений 1)(1+x2)dy+ydx=0,y=1 при x=1;...

Решение дифференциальных уравнений
ребята помогите пожалуйста я вроде бы решил но не уверен это правилное решения вот код проверте...

20
qwone
9 / 9 / 2
Регистрация: 18.08.2008
Сообщений: 127
25.09.2008, 00:16 2
элементарным языком не получится .
Если серьезно сказать ,то эта задача для энергетиков . А точнее для тех энергетиков , которые вы никогда не станете . Внимательно изучай TOЭ . Когда то я проходил курс и мог решить эти задачи при помощи калькулятора. Но сейчас я уже эти моменты не вспомню , да и они не к чему .
Да вот еще . Люди "низших" профессий склоны перекладывать свои недоработки на людей "высших" . Закончишь ,будешь работать, узнаешь. так механики перекладывают на электриков , ну а те электронщиков систем управления , а те на программистов . Будто те боги.
Если хочешь , что бы тебе помогли , то составь формулы . А по формулам программу уже нарисуем .
0
XuTPbIu_MuHTAu
Эксперт С++
2241 / 756 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
25.09.2008, 00:21 3
Цитата Сообщение от qwone Посмотреть сообщение
А по формулам программу уже нарисуем .
Да,и за готовые программы принято платить. Мы тоже люди,и у нас тоже много-много дел.
0
havrolev
1 / 1 / 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 секунды
если кто возьмётся, то оплату гарантирую!
нужно решить систему методом Эйлера и методом Эйлера-Коши.
0
25.09.2008, 02:36
qwone
9 / 9 / 2
Регистрация: 18.08.2008
Сообщений: 127
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/lecture24/lecture24.html
0
havrolev
1 / 1 / 0
Регистрация: 24.09.2008
Сообщений: 10
25.09.2008, 19:14  [ТС] 6
qwone, большое спасибо за предоставленный сайт! Я как раз хотел перед самой электротехникой вникнуть в него, чтобы потом не было каких-то непоняток с ним! Огромное спасибо!
Но при этом проблема состоит в другом, у всей группы не начитанны лекции по информатике, поэтому есть проблемы с решением примера.
Если у вас на компьютере есть какая-то информация по реализации системы диф. уравнений методом Эйлера и Эйлера-Коши, то буду признателен.

http://www.toehelp.ru/theory/informat/lecture14.html
вот, именно методом Эйлера и его модификацией нужно нам и решить систему, если поможете, буду очень благодарен...........язык толком не преподают, а резульятат требуют, хоть и курс информатики длится всего лишь один год.
0
qwone
9 / 9 / 2
Регистрация: 18.08.2008
Сообщений: 127
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_calc/files/aler_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
тебе что это перевести в С++ ???
0
havrolev
1 / 1 / 0
Регистрация: 24.09.2008
Сообщений: 10
26.09.2008, 06:12  [ТС] 8
qwone,
Спасибо большое! Я вам безмерно благодарен!
Теперь наконец-таки понял, что разница между решением простого диф. уровнения и системы в С++ минимальна, до этого думал, что есть какие-то свои методы.
Огромное спасибо, узнав это могу сделать всё сам
тебе что это перевести в С++ ???
нет, спасибо, я всё понял!
0
qwone
9 / 9 / 2
Регистрация: 18.08.2008
Сообщений: 127
26.09.2008, 17:36 9
havrolev
Я тоже этому рад ! Особенно когда люди самостоятельно потом решают .
Но С++ очень сложный язык .Во всех его эпостасях не знает никто . Но использовать его как расширение ( ну очень большое расширение ) легко . Главное знать формулы решения . И все будет пучком. Удачи !
0
havrolev
1 / 1 / 0
Регистрация: 24.09.2008
Сообщений: 10
26.09.2008, 18:01  [ТС] 10
Это значить надо будет делать иттерацию ( постепенное приближение).
Задать начальное число - потом вставить в формулу и получить его еще ближе . И если оно мало меняется то это оно и есть .
Аналогия как артелирист - выстрел - перелет(недолет)-выстрел - .. - цель поражена

офф-топ, конечно. но эта фраза удивила))) я прекрасно знаю все методы по информатике аналитически, понимаю их смысли и могу всё сделать это на бумаге, только вот как это перевести на С++))))) вот с этим проблема,
0
qwone
9 / 9 / 2
Регистрация: 18.08.2008
Сообщений: 127
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
0
havrolev
1 / 1 / 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) в прикреплённом файле в первом посту, пишет, что ошибка, причём она встречается четыре раза (однотипная). Проверьте, пожалуйста
0
XuTPbIu_MuHTAu
Эксперт С++
2241 / 756 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
26.09.2008, 19:34 13
Компилятор достаточно ясно говорит,что там лишние скобки.
0
havrolev
1 / 1 / 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;}
....ну и где же я ошибся, что у меня результат не выходит, прога просто циклится......
0
XuTPbIu_MuHTAu
Эксперт С++
2241 / 756 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
26.09.2008, 21:21 15
while(t1<=t<=t2)
расставляй скобки для операций. Скажем,если t1 <= t2, то результат операции
будет 1,после чего эта единица сравнится с t2(если t1> t2,то будет ноль и ноль сравнится с t2). Думаю,это не то,что тебе надо.
while( (t1<=t ) && (t<=t2) )
0
havrolev
1 / 1 / 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;}
почему он не хочет выводить результаты в таблицу?
0
qwone
9 / 9 / 2
Регистрация: 18.08.2008
Сообщений: 127
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;
};
не заморачивайся .забирай
1
havrolev
1 / 1 / 0
Регистрация: 24.09.2008
Сообщений: 10
28.09.2008, 02:55  [ТС] 18
спасибо огромное!! я безмерно благодарен, но почему в результате показываются только параметры при t>t1?
0
qwone
9 / 9 / 2
Регистрация: 18.08.2008
Сообщений: 127
28.09.2008, 10:00 19
у тебя просто экрана не хватило . оно сверху.
у меня визуал - я вижу все строки .

Добавлено через 2 минуты 41 секунду
добавь после 1-го цикла
Код
cin.get();
1
havrolev
1 / 1 / 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;
};
Вот если кому понадобится таже программа, только методом Эйлера-Коши
1
28.09.2008, 19:47
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2008, 19:47

Решение дифуров методами Эйлера-Коши с итерациями и Рунге-Кутты четвертого порядка
решить методами эйлера-коши с итерациями и рунге -куты четвертого порядка диф. уравнение ...

Решение системы дифференциальных уравнений
Года 3 не трогал подобное и уже всё позабыл. Спасите пожалуйста... Как данную систему уровнений...

Решение нелинейных уравнений двумя методами
Нужно две программы , которые решают данное уравнение x^3+3x^2+6x-1=0 двумя способами: 1.Методом...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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