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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2010, 16:33   #1
Ekатерина
 
Аватар для Ekатерина
 
Регистрация: 12.03.2009
Сообщений: 8
По умолчанию Рунге- Кутта на Си

Добрый день!
Передо мной стоит задача написать программу, которая должна считать обыкновенное дифференциальное уравнение методом средней точки(частный случай метода Рунге-Кутта при альфа = 1).
Мне нужно сделать с двойным пересчетом, но что-то не выходит.
Код:
#include<math.h>
#include<stdio.h>

double f(double x, double y)
{
	return(1.6*x+0.5*y*y);
}

void main()
{
	int i,n;
	double K1, K2, x, y, y1, h;
	printf("vvedite zna4enie y0=");
	scanf("%lf",&y);
	printf("vvedite zna4enie x0=");
	scanf("%lf",&x);
	printf("vvedite veli4iny shaga h=");
	scanf("%lf",&h);
	int b = 1;
	int a = 0;

	n = (b-a)/h;

	do{
		y1 = y;
		for(i=0;i<n;i++)
		{
			K1=f(x,y);

			K2=f(x+h/2,y+h/2*K1);
			y=y+h*(K2);
			x=x+h;

			printf("%10.3lf%10.3lf\n", x, y);
		}
		h = h/2;
		n = (b-a)/h;
		x = 0;
		y = 0;

	}while (fabs(y1 - y) > 0.0001);
}
Подскажите, пожалуйста, что я делаю не так)

Последний раз редактировалось Stilet; 26.04.2010 в 11:17.
Ekатерина вне форума Ответить с цитированием
Старый 26.04.2010, 10:55   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Ekатерина Посмотреть сообщение
(частный случай метода Рунге-Кутта при альфа = 1).
Ещё б знать, что у вас называют "альфой"?
Цитата:
Сообщение от Ekатерина
K2=f(x+h/2,y+h/2*K1);
Там не единица, случайно, в числителе?
Цитата:
Сообщение от Ekатерина
x = 0;
y = 0;
}while (fabs(y1 - y) > 0.0001);
1. Почему сбрасываем в нули, а не в (x0, y0)?!
2. y оказывается сброшенным до проверки!
3. Самое главное. Почему проверка здесь?!
Vago вне форума Ответить с цитированием
Старый 26.04.2010, 23:47   #3
Ekатерина
 
Аватар для Ekатерина
 
Регистрация: 12.03.2009
Сообщений: 8
По умолчанию

В документе есть небольшая теория, где как раз и указано альфа

Цитата:
1. Почему сбрасываем в нули, а не в (x0, y0)?!
2. y оказывается сброшенным до проверки!
вот как раз с этим я и заплутала
мне кажется, что вроде бы все правильно

Цитата:
x = 0;
y = 0;
}while (fabs(y1 - y) > 0.0001);
Цитата:
3. Самое главное. Почему проверка здесь?!
предполагается использование функциии do while, поэтому проверка именно тут находится
Вложения
Тип файла: doc Документ Microsoft Word.doc (22.5 Кб, 11 просмотров)
Ekатерина вне форума Ответить с цитированием
Старый 27.04.2010, 17:12   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Ekатерина Посмотреть сообщение
предполагается использование функциии do while, поэтому проверка именно тут находится
Ну и пришёлся конец интервала на пологий участок, сравнили два значения, удовлетворились, а какой-нибудь всплеск в средине - проскочили. Так?..

Было б хорошо, если бы Вы поискали ещё один "документ", где вас пытались научить, как менять шаг. Потому как адаптивные алгоритмы ну совсем не так работают. Мне несложно его написать, но закапывать-то при сдаче Вас будут...
Vago вне форума Ответить с цитированием
Старый 28.04.2010, 19:21   #5
Ekатерина
 
Аватар для Ekатерина
 
Регистрация: 12.03.2009
Сообщений: 8
По умолчанию

Знала бы, не спрашивала.
Я не прошу написать, я прошу объяснить!
Ekатерина вне форума Ответить с цитированием
Старый 28.04.2010, 19:31   #6
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

http://www.fizyka.umk.pl/nrbook/bookcpdf.html
Главы 16.0 - 16.3. Очень доходчиво написано. С картиночками и исходниками на Цэ.
Vago вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает метод Рунге - Кутта 2-го порядка CsandeRR Общие вопросы C/C++ 1 13.04.2010 16:27
Метод Рунге-Кутта (Си) PPPPPP Общие вопросы C/C++ 1 13.04.2010 00:55
Метод Рунге-Кутта (Си) PPPPPP Помощь студентам 2 12.04.2010 02:58
[Delphi] Помогите справиться с задачей по числякам (метод Рунге-Кутта) Unlit Помощь студентам 0 01.10.2009 09:51