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

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

Войти
Регистрация
Восстановить пароль
 
chdunyi
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 16
#1

Метод Рунге-Кутты для диф. уравнения второго порядка - C++

03.11.2013, 23:22. Просмотров 674. Ответов 0
Метки нет (Все метки)

В общем не могу сообразить что делать со вторым порядком, с 1-м порядком (V+L*C*V'=0) вроде как сделал, а вот со вторым не получается.
Вот задание: Напряжение в цепи, состоящей из последовательно соединенных катушки индуктивности и заряженного конденсатора, описывается следующим диф. уравнением: V+L*C*V''=0. Методом рунге-Кутты определить напряжение на конденсаторе в течение первых 10 микросекунд при C=1 мкФ, L=10 мкГн и V0=50В.
Если кому не сложно, можете подсказать что делать и помочь с кодом, заранее спасибо. Вот код для диф. уравнения 1-го порядка:
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
#include<iostream.h>
#include<windows.h>
#include<math.h>
float f1(float t,float v,float l=10,float c=1)
{
    return(-v/(l*c));
}
 
int main()
{
    SetConsoleOutputCP(1251);   
    const int n=20;
    float t[n+1],v[n+1],k1,k2,k3,k4;
    int i;
    float h;
 
 
    cout<<"Метод Рунге-Кутта шаг=0.5 микросекунды\n";
    h=0.5;
    t[0]=0;
    v[0]=50;
    for(i=0;i<n;i++)
    {
        k1=h*f1(t[i],v[i]);
        k2=h*f1(t[i]+h/2,v[i]+k1/2);
        k3=h*f1(t[i]+h/2,v[i]+k2/2);
        k4=h*f1(t[i]+h,v[i]+k3);
        v[i+1]=v[i]+1./6*(k1+2*k2+2*k3+k4);
        t[i+1]=t[i]+h;
    }
    for(i=0;i<=n;i++)
    {
        cout<<i+1<<".\tt= "<<t[i]<<"\tv= "<<v[i]<<endl;
    }
 
return 0;
}
Добавлено через 4 часа 55 минут
Ну по идее надо вторую функцию вводить, но у меня нету начального условия, V'=? (в программе z). Не знаю, может я тут напутал чего, ну по крайней мере 1-го порядка вроде правильно считает.
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
#include<iostream.h>
#include<windows.h>
#include<math.h>
float f1(float t,float v,float z, float l=10,float c=1)
{
 
    return(-v/(l*c));
}
float f2(float t,float v,float z, float l=10,float c=1)
{
    return z;
}
 
 
int main()
{
    SetConsoleOutputCP(1251);   
    const int n=20;
    float z[n+1],t[n+1],v[n+1],k1,k2,k3,k4,q1,q2,q3,q4;
    int i;
    float h;
 
 
    cout<<"Метод Рунге-Кутта шаг=0.5 микросекунды\n";
    h=0.5;
    t[0]=0;
    v[0]=50;
    for(i=0;i<n;i++)
    {
        k1=h*f1(t[i], v[i], z[i]);
        k2=h*f1(t[i]+h/2, v[i]+k1/2, z[i]+q1/2);
        k3=h*f1(t[i]+h/2, v[i]+k2/2, z[i]+q2/2);
        k4=h*f1(t[i]+h, v[i]+k3, z[i]+k3);
 
        v[i+1]=v[i]+1./6*(k1+2*k2+2*k3+k4);
        t[i+1]=t[i]+h;
 
        q1=h*f2(t[i], v[i], z[i]);
        q2=h*f2(t[i]+h/2, v[i]+k1/2, z[i]+q1/2);
        q3=h*f2(t[i]+h/2, v[i]+k2/2, z[i]+q2/2);
        q4=h*f2(t[i]+h, v[i]+k3, z[i]+k3);
 
        z[i+1]=z[1]+1./6*(q1+2*q2+2*q3+q4);
    }
    for(i=0;i<=n;i++)
    {
        cout<<i+1<<".\tt= "<<t[i]<<"\tv= "<<v[i]<<"\t z= "<<z[i]<<endl;
    }
 
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 23:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод Рунге-Кутты для диф. уравнения второго порядка (C++):

Решение диф. уравнения для колебаний методом Рунге—Кутты 4го порядка.(С++) - C++
Ребят помогите пожалуйста решить такое на C++ уравнение x''=(-w^2)*x где w-const там замену нужно сделать что то вроде y=x' и y'=x'' и...

Метод Рунге-Кутта второго порядка - C++
В общем есть задание. Задание к-е на скрине: Ток в электрической цепи описывается дифференциальным уравнением (которое на скрине),...

Метод Рунге Кутты для системы уравнений - C++
Добрый день! Столкнулся с проблемой, при решении задачи, а именно : Реализовать решение системы оду с количеством уравнений N,...

Исправить код в методе рунге кутты 4 порядка ля системы ДУ 1 порядка - C++
Вот код для метода рунге кутты 4 порядка для систему ДУ 1 порядка. Вроде все верно, но ответ не правильный. В чем ошибка. Подскажите...

Алгоритм Рунге-Кутта для производной второго порядка - C++
Здравствуйте. Нужно составить график зависимости x от t для данного уравнения, для сказали нужно посчитать это уравнение методом...

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 23:22
Привет! Вот еще темы с ответами:

Метод Рунге-Кутта 4 порядка для решения системы дифференциальных уравнений - C++
Имеется код программы, но по не очевидным для меня причинам работает не корректно, во время отладки выдает сообщения типа : Run-Time...

Комбинированный метод Эйлера для решения интегралов второго порядка - C++
Три дня штудирую форум но так и не смог найти ответ на свой вопрос.... Нужно реализовать комбинированный метод Эйлера( комбинация явного...

Метод Рунге-Кутта 4 порядка - C++
Помогите найти ошибку в методе рунге-Кутта 4 порядка System::System(double m, const Vector3D&amp; g, double C, double f, double p, double S,...

Метод рунге-кутта 3 порядка - C++
дана функция d(y(x))/dx=e^x-2y(x) Нач. условия y(0)=e Код#include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; float fun(float...


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

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

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