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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2017, 14:40   #1
Nurik1509
 
Регистрация: 17.04.2017
Сообщений: 5
По умолчанию Метод Эйлера // ошибка NAN(IND)

Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <math.h>
#define n 200
using namespace std;

int main()
{
	ofstream fout("a2.txt", ios::out);

	long double x1[n], x2[n], x3[n], u[n], dt = 0.01, t;
	long double m = 729.0, l2;
	int i;
	x1[0] = 2.0;
	x2[0] = 5.0;
	x3[0] = 3.0;
	l2 = 3.0;

	for (i = 0; i < n-1; i++)
	{
		t = i*dt;
		x1[i + 1] = x1[i] + dt*(x2[i]* x2[i]*x2[i]+(x1[i]*x1[i]*x2[i])/(1.0+ x2[i]* x2[i])*log(1.0+ x1[i]* x1[i]));
		u[i] = -pow(m, 4 / 3)*pow((10.0*(x3[i] + l2*(x1[i] - pow(sin(t), 3)))) + 16.0 * (x1[i] - pow(sin(t), 3)), 3);
		x2[i + 1] = x2[i] + dt*u[i];
		x3[i + 1] = x3[i] + dt*(u[i]/pow(m,1/3)-m*l2*pow((x3[i]+l2*(x1[i] - pow(sin(t), 3))), 3));
	}

	for (i = 0; i <= n-1; i++)
	{
		fout << i*dt << " " << x1[i] << endl;
	}
	
	return 0;
}
выдает ошибку nan (ind) // не могу понять // то ли слишком большая цифра или в коде ошибка //

Последний раз редактировалось Аватар; 17.04.2017 в 15:02.
Nurik1509 вне форума Ответить с цитированием
Старый 17.04.2017, 15:26   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Вот тут
4 / 3 = 1
1/3 = 0
Нужно

4./ 3.
1./3.

ВОбщем у вас там кругом автоматом в целое преобразовыается, попробуйте верно числа записать для начала.

Последний раз редактировалось Alex11223; 17.04.2017 в 15:44.
alexzk вне форума Ответить с цитированием
Старый 18.04.2017, 09:10   #3
Nurik1509
 
Регистрация: 17.04.2017
Сообщений: 5
По умолчанию

Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <math.h>
#define n 200
using namespace std;

int main()
{
	ofstream fout("a2.txt", ios::out);

	long double x1[n], x2[n], x3[n], u[n], dt = 0.01, t;
	long double m = 729.0, l2;
	int i;
	x1[0] = 2.0;
	x2[0] = 5.0;
	x3[0] = 3.0;
	l2 = 3.0;

	for (i = 0; i < n-1; i++)
	{
		t = i*dt;
		x1[i + 1] = x1[i] + dt*(x2[i]* x2[i]*x2[i]+(x1[i]*x1[i]*x2[i])/(1.0+ x2[i]* x2[i])*log(1.0+ x1[i]* x1[i]));
		u[i] = -pow(m, 4.0 / 3.0)*pow((10.0*(x3[i] + l2*(x1[i] - pow(sin(t), 3)))) + 16.0 * (x1[i] - pow(sin(t), 3)), 3);
		x2[i + 1] = x2[i] + dt*u[i];
		x3[i + 1] = x3[i] + dt*(u[i]/pow(m,1.0/3.0)-m*l2*pow((x3[i]+l2*(x1[i] - pow(sin(t), 3))), 3));
	}
	for (i = 0; i <= n-1; i++)
	{
		fout << i*dt << " " << x1[i] << endl;
	}
	return 0;
}
попробовал так // все равно результат так же ///
первые 5-6 раза с начальными значениями вычисляет /// а потом nan-ы пойдет


0 2
0.01 3.26238
0.02 -1.69102e+22
0.03 3.56347e+76
0.04 -3.25201e+239
0.05 -nan(ind)
0.06 -nan(ind)
0.07 -nan(ind)
0.08 -nan(ind)
0.09 -nan(ind)
0.1 -nan(ind)
0.11 -nan(ind)
0.12 -nan(ind)
0.13 -nan(ind)
0.14 -nan(ind)
0.15 -nan(ind)
0.16 -nan(ind)
0.17 -nan(ind)
0.18 -nan(ind)
0.19 -nan(ind)
0.2 -nan(ind)
0.21 -nan(ind)


а вообще это задача слежения // есть опорный график (синус куб) и моя система (график) должна повторять за ним

здесь только второй график хотел нарисовать /// не знаю может в коде ошибка

Последний раз редактировалось Аватар; 18.04.2017 в 09:42.
Nurik1509 вне форума Ответить с цитированием
Старый 18.04.2017, 09:14   #4
Nurik1509
 
Регистрация: 17.04.2017
Сообщений: 5
По умолчанию

может задачу не понял
Nurik1509 вне форума Ответить с цитированием
Старый 18.04.2017, 09:41   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Проверь формулу для u[i], в проге оно должно немерено расти и растет ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.04.2017, 09:43   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы хоть представляете, что за число "-3e+239"?.. А что будет если его умножить или на него поделить?
p51x на форуме Ответить с цитированием
Старый 18.04.2017, 10:02   #7
Nurik1509
 
Регистрация: 17.04.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы хоть представляете, что за число "-3e+239"?.. А что будет если его умножить или на него поделить?
вообще по идее оно не должно иметь очень большое число /// проверил уже по формуле // вот не могу найти ошибку
Nurik1509 вне форума Ответить с цитированием
Старый 18.04.2017, 10:09   #8
Nurik1509
 
Регистрация: 17.04.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Nurik1509 Посмотреть сообщение
вообще по идее оно не должно иметь очень большое число /// проверил уже по формуле // вот не могу найти ошибку
формулу можете посмотреть? и если сможете показать на ошибку в коде
Изображения
Тип файла: png 123.png (9.0 Кб, 136 просмотров)
Nurik1509 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В ответе inf и nan (решений уравнений методом Эйлера). KEIego Общие вопросы C/C++ 0 14.04.2014 10:31
реализовать метод Эйлера и метод Рунге-Кутте 4-ого порядка на языке С++ Janny2014 Помощь студентам 1 27.11.2013 05:23
Метод Эйлера Демик C# (си шарп) 2 01.12.2011 13:24
Метод Эйлера Anubys Общие вопросы C/C++ 2 17.05.2011 16:51
Метод Эйлера RoKSport Паскаль, Turbo Pascal, PascalABC.NET 5 12.02.2011 12:45