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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2020, 15:23   #1
lana_ar
Пользователь
 
Регистрация: 17.10.2019
Сообщений: 13
Стрелка C++, метод Эйлера с усреднением

Код:
#include <iostream>
#include <math.h>
using namespace std;

double f(double x, double y, double z)
{
	return 3 * pow(x, 2) - x - 1 + 6 * y - z;
}


int main()
{
	double a, b, n, h, xn = 0, yn = -0.9, zn = 3.2;
	const int size = 6;
	cin >> a;
	cin >> b;
	cin >> n;

	double x[size];
	double y[size];
	double z[size];
	x[0] = xn;
	y[0] = yn;
	z[0] = zn;
	h = (b - a) / n;
	for (int i = 1; i < size; i++)
	{
		x[i] = x[i - 1] + h;
		y[i] = y[i - 1] + h * (z[i - 1] + h * f(x[i - 1], y[i - 1], z[i - 1]));
		z[i] = z[i - 1] + h * ((z[i - 1] + h * f(x[i - 1], y[i - 1], z[i - 1])) + f(x[i - 1] + h, y[i - 1] + h * z[i - 1], z[i - 1] + h * f(x[i - 1], y[i - 1], z[i - 1])))/2;

		
			
	}
	for (int i = 0; i < size; i++)
	{
		cout << i << "\t";
		cout << x[i] << "\t";
		cout << y[i] << "\t";
		cout << z[i] << "\t\n";
		
	}
	return 0;
}
Считает неправильные значения, помогите, пожалуйста
Есть предположение, что накосячила в строчках, которые выделила
Изображения
Тип файла: jpg Mh5YSzz19m8.jpg (29.9 Кб, 1 просмотров)
lana_ar вне форума Ответить с цитированием
Старый 21.04.2020, 16:29   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Почему один цикл for начинается с i=1, а другой уже с 0?
С какого индекса массив заполняется с первого или с нудевого, Вы в курсе?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 21.04.2020, 16:39   #3
lana_ar
Пользователь
 
Регистрация: 17.10.2019
Сообщений: 13
По умолчанию

с 0, мой косяк но мне сказали, что проблема именно в функциях y[i] и z[i] различны
lana_ar вне форума Ответить с цитированием
Старый 21.04.2020, 17:20   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Во-первых, я считаю, что заполнение именно с единицы, так как для нулевой точки данные даны. Во-вторых, если size явно задан, то нет смысла запрашивать n. Или стоит динамически выделять память под столько точек, сколько задаст пользователь. В-третьих, я не очень дружу с математикой, а на картинках нет формулы для расчета z, так что могу судить только по формулам, приведенным в статье на википедии о модифицированном методе Эйлера с пересчетом, так что просто подставил значение zn.
Код:
x[i] = x[i - 1] + h;
x_pr = x[i];
y_pr = y[i - 1] + h * f(x[i - 1], y[i - 1], zn);
y[i] = y[i - 1] + h * (f(x[i - 1], y[i - 1], zn) + f(x_pr, y_pr, zn)) / 2;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 21.04.2020, 17:25   #5
lana_ar
Пользователь
 
Регистрация: 17.10.2019
Сообщений: 13
По умолчанию

спасибо огромное! распуталась!
lana_ar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
реализовать метод Эйлера и метод Рунге-Кутте 4-ого порядка на языке С++ Janny2014 Помощь студентам 1 27.11.2013 05:23
мой метод Эйлера nikozavr Общие вопросы C/C++ 8 23.12.2011 18:04
Метод Эйлера Демик C# (си шарп) 2 01.12.2011 13:24
Метод Эйлера Anubys Общие вопросы C/C++ 2 17.05.2011 16:51