Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

З.Ы. если можно, то элементарнейшим языком
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2008, 23:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решение систем дифференциальных уравнений методами Эйлера (C++):

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

Решение систем линейных уравнений различными методами - C++
#include "stdafx.h" #include "iostream" #include "cmath" using namespace std; void input(float**A,float*B,float**C,float**R,int...

Решение дифуров методами Эйлера-Коши с итерациями и Рунге-Кутты четвертого порядка - C++
решить методами эйлера-коши с итерациями и рунге -куты четвертого порядка диф. уравнение y`+ycosx=e-sinx X e, y(0)=1 h=0.1

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

Решение систем уравнений - C++
помогите решить, не могу понять как решаются системы

Решение систем линейных уравнений - C++
Решить СЛУ \begin{cases} & \text{1.2x+2.4y-3.8z=\alpha } \\ & \text{-7x-1.3y=1.27 } \\ & \text{3.3x+0.3y-5z=5.82 } \end{cases} \alpha =...

20
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 / 1
Регистрация: 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 / 1
Регистрация: 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
qwone
9 / 9 / 1
Регистрация: 18.08.2008
Сообщений: 127
28.09.2008, 20:02 #21
А это принципиальная схема и формулы расчетов схема по которым создавалась программа . автор вложил это на другие источники . Но мало что случиться . То дубликат будет здесь.
0
Вложения
Тип файла: doc ххх(2).doc (126.0 Кб, 153 просмотров)
28.09.2008, 20:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2008, 20:02
Привет! Вот еще темы с ответами:

Решение нелинейных уравнений и систем - C++
Написать программу решения нелинейного уравнения методом деления отрезка пополам по формуле:{2}^{x}+{x}^{2}-3=0. Здрасвуйте сделайте...

Решение нелиненых уравнений и систем - C++
Застопорился в нескольких методах, не удается реализовать. Метод деления отрезка пополам (метод бисекций) И для систем...

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

Решение систем нелинейных уравнений - C++
Решение систем не линейных уравнений с использованием различных численных методов


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

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

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