Форум программистов, компьютерный форум CyberForum.ru

пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND - C++

Восстановить пароль Регистрация
 
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
09.10.2012, 20:44     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND #1
Здравствуйте, пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND
Читала что это деление на ноль....но у меня нет никакого деления(

A=-2; B=-1; и E=0.0001

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double easy_iter(double A,double B,double E)
{
 
    double Q=A+A*A+3*sin(A);
    double QQ=B;
    int n=1;
    while (fabs(Q-QQ)>E)
    {
        QQ=Q;
        Q=QQ+QQ*QQ+3*sin(QQ);//сюда тоже своя функция
        n++;
        
    }
    cout<<"Корень: "<<Q<<endl;
    cout<<"Количество итераций: "<<n<<endl;
    return x;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2012, 20:44     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND
Посмотрите здесь:

Метод простой итерации C++
Метод простой итерации C++
метод простой итерации C++
C++ Метод простой итерации
Метод простой итерации C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
09.10.2012, 20:45     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND #2
yuliyayuliya28, весь код сюды. Может там ошибка.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
09.10.2012, 21:08     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND #3
Цитата Сообщение от Invader_Zim Посмотреть сообщение
yuliyayuliya28, весь код сюды. Может там ошибка.
Весь код нетрудно придумать самому, в исходном посте всё для этого написано:
http://codepad.org/0cGxc6Dx

Добавлено через 3 минуты
Если перед "n++" воткнуть печать текущих значений

C++
cout << Q << " " << QQ << endl;
то хорошо видно, что числа растут чуть ли не по экспоненте. Т.е. очень быстро упёрлись в вехний диапазон, а потому и получили результат бесконечность (который, видимо через синус, стал NAN'ом)

http://codepad.org/BW9A6Obh

Добавлено через 1 минуту
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
Читала что это деление на ноль...
Скажем так, деление на ноль - это всего лишь один из случаев, который генерирует NAN
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
09.10.2012, 21:09  [ТС]     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND #4
Цитата Сообщение от Evg Посмотреть сообщение
Весь код нетрудно придумать самому, в исходном посте всё для этого написано:
http://codepad.org/0cGxc6Dx

Добавлено через 3 минуты
Если перед "n++" воткнуть печать текущих значений

C++
cout << Q << " " << QQ << endl;
то хорошо видно, что числа растут чуть ли не по экспоненте. Т.е. очень быстро упёрлись в вехний диапазон, а потому и получили результат бесконечность (который, видимо через синус, стал NAN'ом)

http://codepad.org/BW9A6Obh

Добавлено через 1 минуту


Скажем так, деление на ноль - это всего лишь один из случаев, который генерирует NAN
Хм, а что тогда делать ?как это испрфвить?или не правильный сам метод?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
09.10.2012, 21:17     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND #5
У меня с математикой туго. Но из общих соображений мне кажется, что этот в этом методе последовательность должна сходиться, но она расходится. Значит явно тут что-то не так реализовно
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
09.10.2012, 21:22  [ТС]     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND #6
Цитата Сообщение от Evg Посмотреть сообщение
У меня с математикой туго. Но из общих соображений мне кажется, что этот в этом методе последовательность должна сходиться, но она расходится. Значит явно тут что-то не так реализовно
http://gyazo.com/a8fbe2c095bc09df89bf6bd2ce18fdec
график такой, по идеи должен находить -1.7 корень ((но что-то не то(
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
09.10.2012, 21:27     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND #7
Скорее всего просто неправильно выражена переменная.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
09.10.2012, 21:32     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND #8
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
график такой, по идеи должен находить -1.7 корень
Ты хоть теорию покажи, как оно считаться должно.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.10.2012, 21:59     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND #9
просто неудачно выбрали функцию на компакте [A,B], которая бы являлась сжимающим отображением. В данном случае число после нескольких шагов итераций становится ОГРОМНЫМ, а потом превращается в NAN. Проблема в функции x + x^2 + 3*sin x, не являющейся сжимающей. Как понимаю, вы ищите корень функции x^2 + 3*sin x. Для нее сжимающая функция нужна другая.

например, в качестве сжимающей функции можно взять
http://www.cyberforum.ru/cgi-bin/latex.cgi?x+\frac{x^2+3sin x}{x^2}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const A = -2;
const B = -1;
 
double Root(double eps)
{
   double x = A, y;
   y = x + (x*x + 3*sin(x)) / (x*x);
   int i;
   while(fabs(x - y) >= eps)
   {
       x = y;
       y = x + (x*x + 3*sin(x)) / (x*x);
   }
   return x;
}
 
int main()
{
   long i, n, t;
   std::cout << Root(0.0001) << std::endl;
   return 0;
}
Ответ: -1.722....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 01:03     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND
Еще ссылки по теме:

C++ Написать функцию нахождения точек пересечения двух кривых, основанную на методе простой итерации
Метод простой итерации C++
Метод простой итерации C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
16.10.2012, 01:03  [ТС]     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND #10
Цитата Сообщение от Thinker Посмотреть сообщение
просто неудачно выбрали функцию на компакте [A,B], которая бы являлась сжимающим отображением. В данном случае число после нескольких шагов итераций становится ОГРОМНЫМ, а потом превращается в NAN. Проблема в функции x + x^2 + 3*sin x, не являющейся сжимающей. Как понимаю, вы ищите корень функции x^2 + 3*sin x. Для нее сжимающая функция нужна другая.

например, в качестве сжимающей функции можно взять
http://www.cyberforum.ru/cgi-bin/latex.cgi?x+\frac{x^2+3sin x}{x^2}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const A = -2;
const B = -1;
 
double Root(double eps)
{
   double x = A, y;
   y = x + (x*x + 3*sin(x)) / (x*x);
   int i;
   while(fabs(x - y) >= eps)
   {
       x = y;
       y = x + (x*x + 3*sin(x)) / (x*x);
   }
   return x;
}
 
int main()
{
   long i, n, t;
   std::cout << Root(0.0001) << std::endl;
   return 0;
}
Ответ: -1.722....
Спасибо большое)а вы бы могли бы ещё рассказать про сжимающую функцию, т.е. сама по себе она имеент вид f(x)/x в большей степени?
Yandex
Объявления
16.10.2012, 01:03     пишу функцию метода простой итерации, заместо результата Q выдaёт -1.#IND
Ответ Создать тему
Опции темы

Текущее время: 21:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru