Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Help, Метод Рунге-Кутта 2-го порядка 
V
    Опции темы
CsandeRR
Дата 12.4.2010, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.4.2010

Репутация: нет
Всего: нет



Народ помоги пожалуйста... Ничего не понимаю.... вроде формула правильная взята из учебника... а пахать всёравно не хочет..... Р-К 2-го порядка это так же метод Хойна или Эйлера Коши... и ниодна из формул не работает(((( Может кто что подскажет, ато лабу скоро сдавать(( Ошибок не выдаёт.... всёремя выводит только начальные условия(
Код
#include "stdafx.h"

double y1,y2,h,Xmax,y1k,y2k,s;
double f1(double y1,double y2){
    return (-1000*y1+999*y2);
}
double f2(double y1,double y2){
    return (y1-2*y2);
}

int main()

    printf("The decision the ODE a method of Runge-Kutta\n");
    printf("Nam dano ODE 2-go pordka\n");
    printf("dy1/dx=-100y1+999y2\n");
    printf("dy2/dx=y1-2y2\n");
    printf("Vvedite Xmax\n");
    printf("Vvedite h\n");
    /*scanf_s("%f", &Xmax);*/
    scanf_s("%f %f",&Xmax, &h);
    y1k=10;
    y2k=20;
    for (double i=1; i<=10; i++) {

            /*y1=y1k+h*f1(y1k+(h/2)*f1(y1k,y2k),y2k+(h/2)*f2(y1k,y2k));*/
        y1=y1k+(h/2)*(f1(y1k,y2k)+f1(y1k+h*f1(y1k,y2k),y2k+h));

            y2=y2k+h*f2(y1k+(h/2)*f1(y1k,y2k),y2k+(h/2)*f2(y1k,y2k));

            s=i*h;
            y1k=y1;
            y2k=y2;
            printf("%f %f %f\n", s, y1, y2); 
    };

    _gettch();
return 0;
}



Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 13.4.2010, 12:13
PM MAIL   Вверх
EgorTheBlade
Дата 13.4.2010, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



printf("dy1/dx=-100y1+999y2\n");
    printf("dy2/dx=y1-2y2\n") ети строки выводит? smile
P.s выравняйте код и почитайте литературу по с++ для новичкнов первые страниц 20 -станет легче.
PM MAIL Skype   Вверх
CsandeRR
Дата 13.4.2010, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.4.2010

Репутация: нет
Всего: нет



Не в этом дело.... Проблема уже решена... как показала практика сканф как то хренова считывает тип double... вводимые данные были поменены на float и всё заработало великолепноsmile
PM MAIL   Вверх
bsa
Дата 13.4.2010, 14:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(CsandeRR @  13.4.2010,  14:27 Найти цитируемый пост)
как показала практика сканф как то хренова считывает тип double
нет. просто кто-то "хренова" читает документацию.
Цитата(man scanf)
       f      Matches  an  optionally  signed  floating-point number; the next
              pointer must be a pointer to float.
Цитата(man scanf)
       l      Indicates either that the conversion will be one of d, i, o,  u,
              x,  X,  or  n and the next pointer is a pointer to a long int or
              unsigned long int (rather than int), or that the conversion will
              be one of e, f, or g and the next pointer is a pointer to double
              (rather than float)
.  Specifying two l characters is  equivalent
              to L.  If used with %c or %s the corresponding parameter is con‐
              sidered as a pointer  to  a  wide  character  or  wide-character
              string respectively.



кстати, в твоем случае должен перестать корректно работать printf, так как его модификатор %f принимает именно double, а не float (зачем такое было сделано - х.з.).


M
bsa
CsandeRR, если ответ на вопрос получен, то пометь тему решенной


Это сообщение отредактировал(а) bsa - 13.4.2010, 14:41
PM   Вверх
xvr
Дата 14.4.2010, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(bsa @  13.4.2010,  14:40 Найти цитируемый пост)
кстати, в твоем случае должен перестать корректно работать printf, так как его модификатор %f принимает именно double, а не float
Не перестанет, т.к. при передаче через ellipsis (через ...) float преобразуется в double


PM MAIL   Вверх
bsa
Дата 14.4.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(xvr @  14.4.2010,  12:21 Найти цитируемый пост)
при передаче через ellipsis (через ...) float преобразуется в double
как говорится, век живи - век учись...

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0796 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.