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

метод итераций - C++

Восстановить пароль Регистрация
 
KorolevaE
2 / 2 / 0
Регистрация: 24.11.2012
Сообщений: 34
04.05.2013, 16:17     метод итераций #1
x+cos(x^0,52+2)=0; на промежутке [0,5;1], с точностью 0,9892
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2013, 16:17     метод итераций
Посмотрите здесь:

C++ Метод итераций и метод Зейделя
метод итераций C++
метод итераций с++ C++
метод итераций C++
C++ Метод итераций
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
04.05.2013, 16:30     метод итераций #2
немного кривовато,но работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <math.h>
#include <iostream>
 
using namespace std;
double func (const double &x)
{
    return (x+cos(pow(x,0.52)+2.0));
}
double iterfunc(const double &x)
{
    return(-cos(pow(x,0.52)+2.0));
}
 
int main()
{
    const double eps=0.9892;
    double x=0.75, prevX, prevFunc=0;
    do{
        prevX=x;
        prevFunc=func(x);
        x=iterfunc(x);
    }while((abs(x-prevX)>=eps)&&(abs(prevFunc-func(x))>=eps));
    cout<<x<<endl<<func(x)<<endl;
    system("pause");
}
-=ЮрА=-
Заблокирован
Автор FAQ
04.05.2013, 16:53     метод итераций #3
metaluga145, не чуток не так, в данном случае давался ответ и говорилось о точности ответа (посчитай число цифр после запятой) до 4-го знака после запятой, точность 0,98 - это считай 100% на ошибку
Собственно тот же алгоритм
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <cmath>
#include <iostream>
using namespace std;
 
double f(double x);
double g(double x);
 
int main()
{
    double eps = 0.0001;
    double xn  = 0.5;
    double xk  = 1.0;
    for(double x = (xn + xk) / 2; 0 < fabs(f(x)); x = g(x))
        cout<<"\rx = "<<x<<" f(x) = "<<f(x)<<"\t\t";
    cin.get();
    return 0;
}
 
double f(double x)
{
    return x + cos(pow(x, 0.52) + 2.0);
}
 
double g(double x)
{
    return -cos(pow(x,0.52) + 2.0);
}
Миниатюры
метод итераций  
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
04.05.2013, 17:07     метод итераций #4
-=ЮрА=-, вот я раза 3 перечитал внимательно код,а где там вообще используется переменная eps?
-=ЮрА=-
Заблокирован
Автор FAQ
04.05.2013, 17:16     метод итераций #5
Цитата Сообщение от metaluga145 Посмотреть сообщение
-=ЮрА=-, вот я раза 3 перечитал внимательно код,а где там вообще используется переменная eps?
- вижу я в спешке немного лажанул (спасибо что заметил)
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
eps < fabs(f(x))
- сюда конечно же. Функция оказлось простой и итерационный процесс быстро сошёлся, в любом ином случае получился бесконечный цикл, щас подправлю
-=ЮрА=-
Заблокирован
Автор FAQ
04.05.2013, 17:17     метод итераций #6
Конечно же вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <cmath>
#include <iostream>
using namespace std;
 
double f(double x);
double g(double x);
 
int main()
{
    double eps = 0.0001;
    double xn  = 0.5;
    double xk  = 1.0;
    for(double x = (xn + xk) / 2; eps < fabs(f(x)); x = g(x))
        cout<<"\rx = "<<x<<" f(x) = "<<f(x)<<"\t\t";
    cin.get();
    return 0;
}
 
double f(double x)
{
    return x + cos(pow(x, 0.52) + 2.0);
}
 
double g(double x)
{
    return -cos(pow(x,0.52) + 2.0);
}
Миниатюры
метод итераций  
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
04.05.2013, 17:24     метод итераций #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(double x = (xn + xk) / 2; eps < fabs(f(x)); x = g(x))
* * * * cout<<"\rx = "<<x<<" f(x) = "<<f(x)<<"\t\t";
судя по вот этому, оно должно выводить после каждой итерации... а почему вывело только один раз?
-=ЮрА=-
Заблокирован
Автор FAQ
04.05.2013, 18:13     метод итераций #8
Цитата Сообщение от metaluga145 Посмотреть сообщение
судя по вот этому, оно должно выводить после каждой итерации... а почему вывело только один раз?
- потому что \r каждый раз позиционирует курсор вначало первой строки а два \t\t вконце затирают хвосты текста(если таковые имелись) от предыдущего вывода
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
05.05.2013, 12:44     метод итераций #9
-=ЮрА=- не совсем понятно, а почему double eps = 0.0001 ведь в условии задачи с точностью 0,9892????? заранее огромное спасибо.
-=ЮрА=-
Заблокирован
Автор FAQ
05.05.2013, 14:18     метод итераций #10
isaak, в условии приведен ответ с 4мя значимыми знаками после запятой,т.е макс ошибка не должна превышать 4й знак,т.е составлять не более 0.0001.Обычно на практике ошибку берут еще меньше на 1н разряд,но для текущего задания хватит точности и до 4-го знака.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2013, 21:26     метод итераций
Еще ссылки по теме:

C++ Метод итераций
C++ Посчитать количество проведенных итераций (метод простых итераций, Pascal -> C++)
Метод итераций C++

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

Или воспользуйтесь поиском по форуму:
KorolevaE
2 / 2 / 0
Регистрация: 24.11.2012
Сообщений: 34
06.05.2013, 21:26  [ТС]     метод итераций #11
Спасибо большое!
Yandex
Объявления
06.05.2013, 21:26     метод итераций
Ответ Создать тему
Опции темы

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