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

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

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

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

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

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

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

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

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

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

З.Ы. если можно, то элементарнейшим языком
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 =...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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;}
почему он не хочет выводить результаты в таблицу?
qwone
9 / 9 / 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
1 / 1 / 0
Регистрация: 24.09.2008
Сообщений: 10
28.09.2008, 02:55  [ТС] #18
спасибо огромное!! я безмерно благодарен, но почему в результате показываются только параметры при t>t1?
qwone
9 / 9 / 1
Регистрация: 18.08.2008
Сообщений: 129
28.09.2008, 10:00 #19
у тебя просто экрана не хватило . оно сверху.
у меня визуал - я вижу все строки .

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.09.2008, 20:02
Ответ Создать тему
Опции темы

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