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

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

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

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

24.09.2008, 23:38. Просмотров 24693. Ответов 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
qwone
9 / 9 / 1
Регистрация: 18.08.2008
Сообщений: 127
25.09.2008, 00:16 #2
элементарным языком не получится .
Если серьезно сказать ,то эта задача для энергетиков . А точнее для тех энергетиков , которые вы никогда не станете . Внимательно изучай TOЭ . Когда то я проходил курс и мог решить эти задачи при помощи калькулятора. Но сейчас я уже эти моменты не вспомню , да и они не к чему .
Да вот еще . Люди "низших" профессий склоны перекладывать свои недоработки на людей "высших" . Закончишь ,будешь работать, узнаешь. так механики перекладывают на электриков , ну а те электронщиков систем управления , а те на программистов . Будто те боги.
Если хочешь , что бы тебе помогли , то составь формулы . А по формулам программу уже нарисуем .
0
XuTPbIu_MuHTAu
Эксперт С++
2230 / 745 / 10
Регистрация: 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
qwone
9 / 9 / 1
Регистрация: 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 / 1
Регистрация: 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 / 1
Регистрация: 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 / 1
Регистрация: 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
Эксперт С++
2230 / 745 / 10
Регистрация: 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
Эксперт С++
2230 / 745 / 10
Регистрация: 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
26.09.2008, 21:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2008, 21:21
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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