Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2009, 21:41   #1
Natok
Пользователь
 
Аватар для Natok
 
Регистрация: 17.05.2009
Сообщений: 85
По умолчанию метод Рунге-Кутта для систем дыф.уравнений 1 порядка

Мне нужно решить систему диф. уравнений 1 порядка методом Рунге-Кутта 4 порядка.
Изображения
Тип файла: jpg Изображение 002.jpg (37.9 Кб, 234 просмотров)
Тип файла: jpg Изображение 003.jpg (36.9 Кб, 183 просмотров)
Natok вне форума Ответить с цитированием
Старый 30.05.2009, 21:52   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Смотрите здесь: http://alglib.sources.ru
_Dmitry вне форума Ответить с цитированием
Старый 30.05.2009, 22:22   #3
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Методы решения диф. ур.:
Вложения
Тип файла: doc ЧМ_ДУ.doc (75.0 Кб, 136 просмотров)
Тип файла: rar ЧМ.rar (2.0 Кб, 106 просмотров)
Жми на весы!!!
Chudo4258 вне форума Ответить с цитированием
Старый 30.05.2009, 22:36   #4
Natok
Пользователь
 
Аватар для Natok
 
Регистрация: 17.05.2009
Сообщений: 85
По умолчанию

спасибо всем!

вто только меня интересует, мне решать так, как написано здесь

http://alglib.sources.ru/diffequatio...gekuttasys.php

, то есть независимо каждое уравнение, аналогично как и обычное уравнение, только на каждом шагу 2 уравнения

или так, как здесь:

http://www.codenet.ru/progr/alg/Runge-Kutt-Method/

учитывая, что ето система все-таки...
Natok вне форума Ответить с цитированием
Старый 31.05.2009, 02:37   #5
Natok
Пользователь
 
Аватар для Natok
 
Регистрация: 17.05.2009
Сообщений: 85
По умолчанию

нашла код на С#
очень кроткий)))
но вопрос, как обьявить член f?
у меня есть, например система из 2-их уравнений

y[1]'=k1*x + k2*x*y;
y[2]' = -k3*x + k4*x*y;
то ето будет так?

Код:
static double f(int i, //<--------------етот  метод
            double x,
            double[] y)
        {
if (i==1)
return k1*x + k2*x*y;
if(i==2) return -k3*x + k4*x*y;
        }
ето сам код метода

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Runge_Kutta__
{
    class rungekuttasys
    {
       
    
    //This members must be defined by you:
        static double f(int i, //<--------------етот  метод
            double x,
            double[] y)
        {

        }
   


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

    Алгоритм решает систему диффуров y[i]'=F(i,x,y) для i=1..n
    методом Рунге-Кутта 4 порядка.

    Начальная точка имеет кординаты (x,y[1], ..., y[n])

    До конечной точки мы добираемся через n промежуточных
    с постоянным шагом h=(x1-x)/m

    Результат помещается в переменную y
    *************************************************************************/
    public static void solvesystemrungekutta(double x,
        double x1,
        int m,
        int n,
        ref double[] y)
    {
        double h = 0;
        int i = 0;

        for(i=0; i<=m-1; i++)
        {
            solvesystemrungekuttastep(x+i*(x1-x)/m, (x1-x)/m, n, ref y);
        }
    }


    /*************************************************************************
    Один шаг метода Рунге-Кутта четвертого порядка для решения
    системы дифферециальных уравнений.
     * 
    Алгоритм совершает один шаг метода для системы
    диффуров y[i]'=F(i,x,y) для i=1..n

    Начальная точка имеет кординаты (x,y[1], ..., y[n])

    После выполнения алгоритма в переменной y содержится состояние
    системы в точке x+h
    *************************************************************************/
    public static void solvesystemrungekuttastep(double x,
        double h,
        int n,
        ref double[] y)
    {
        int i = 0;
        double[] yt = new double[0];
        double[] k1 = new double[0];
        double[] k2 = new double[0];
        double[] k3 = new double[0];
        double[] k4 = new double[0];

        yt = new double[n+1];
        k1 = new double[n+1];
        k2 = new double[n+1];
        k3 = new double[n+1];
        k4 = new double[n+1];
        for(i=1; i<=n; i++)
        {
            k1[i] = h*f(i, x, y);
        }
        for(i=1; i<=n; i++)
        {
            yt[i] = y[i]+0.5*k1[i];
        }
        for(i=1; i<=n; i++)
        {
            k2[i] = h*f(i, x+h*0.5, yt);
        }
        for(i=1; i<=n; i++)
        {
            yt[i] = y[i]+0.5*k2[i];
        }
        for(i=1; i<=n; i++)
        {
            k3[i] = h*f(i, x+h*0.5, yt);
        }
        for(i=1; i<=n; i++)
        {
            yt[i] = y[i]+k3[i];
        }
        for(i=1; i<=n; i++)
        {
            k4[i] = h*f(i, x+h, yt);
        }
        for(i=1; i<=n; i++)
        {
            y[i] = y[i]+(k1[i]+2.0*k2[i]+2.0*k3[i]+k4[i])/6;
        }
    }
}

    }
Natok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача Методом Эйлера и методом Рунге-Кутта. Прошу помочь. Очень срочно. BeNeDiKT Паскаль, Turbo Pascal, PascalABC.NET 0 12.05.2009 13:14
Метод Эйлера и Рунге-Кута HECTOR.A. Помощь студентам 0 11.05.2009 16:24
Метод итерации для уравнений Hellgrom Паскаль, Turbo Pascal, PascalABC.NET 0 10.05.2009 18:38
Решение систем литейных уравнений матричным методом mashulya Общие вопросы C/C++ 8 07.12.2008 22:17