Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 24.11.2012
Сообщений: 34
1

метод итераций

04.05.2013, 16:17. Просмотров 1521. Ответов 10
Метки нет (Все метки)

x+cos(x^0,52+2)=0; на промежутке [0,5;1], с точностью 0,9892
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2013, 16:17
Ответы с готовыми решениями:

Посчитать количество проведенных итераций (метод простых итераций, Pascal -> C++)
перевести из паскаля в С++ program method_of_simple_iteration; uses crt; var a:array of real;...

Метод итераций и метод Зейделя
Здравсвуйте программисты! Спасибо всем за помощь в предыдущих темах, осталась последняя лаба,...

Метод итераций
Берется какое то приближенное к решению значение х0 (начальное приближение) и подставляется в...

Метод итераций
Здравствуйте. Дали вот такое задание: Для заданной функции Y = f(x) на интервале : 1)...

10
243 / 244 / 38
Регистрация: 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");
}
0
Заблокирован
Автор 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);
}
0
Миниатюры
метод итераций  
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
04.05.2013, 17:07 4
-=ЮрА=-, вот я раза 3 перечитал внимательно код,а где там вообще используется переменная eps?
0
Заблокирован
Автор FAQ
04.05.2013, 17:16 5
Цитата Сообщение от metaluga145 Посмотреть сообщение
-=ЮрА=-, вот я раза 3 перечитал внимательно код,а где там вообще используется переменная eps?
- вижу я в спешке немного лажанул (спасибо что заметил)
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
eps < fabs(f(x))
- сюда конечно же. Функция оказлось простой и итерационный процесс быстро сошёлся, в любом ином случае получился бесконечный цикл, щас подправлю
0
Заблокирован
Автор 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);
}
0
Миниатюры
метод итераций  
243 / 244 / 38
Регистрация: 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";
судя по вот этому, оно должно выводить после каждой итерации... а почему вывело только один раз?
0
Заблокирован
Автор FAQ
04.05.2013, 18:13 8
Цитата Сообщение от metaluga145 Посмотреть сообщение
судя по вот этому, оно должно выводить после каждой итерации... а почему вывело только один раз?
- потому что \r каждый раз позиционирует курсор вначало первой строки а два \t\t вконце затирают хвосты текста(если таковые имелись) от предыдущего вывода
1
48 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 816
05.05.2013, 12:44 9
-=ЮрА=- не совсем понятно, а почему double eps = 0.0001 ведь в условии задачи с точностью 0,9892????? заранее огромное спасибо.
0
Заблокирован
Автор FAQ
05.05.2013, 14:18 10
isaak, в условии приведен ответ с 4мя значимыми знаками после запятой,т.е макс ошибка не должна превышать 4й знак,т.е составлять не более 0.0001.Обычно на практике ошибку берут еще меньше на 1н разряд,но для текущего задания хватит точности и до 4-го знака.
1
2 / 2 / 0
Регистрация: 24.11.2012
Сообщений: 34
06.05.2013, 21:26  [ТС] 11
Спасибо большое!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2013, 21:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

метод итераций
ребят помогите пжлст решить задачки: 1. Дана целочисленная прямоугольная матрица. Определить...

Метод итераций
x*x*x+2*x+6*(log(2+10*sqrt(3)))=0 отрезок: Это сама задача, вот код программы: У меня такой...

Метод итераций
Уравнение 0.1x^2 -xlnx=0 Интервал Метод итераций приближенное значение 1.1183 Задача:...

Метод итераций
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; //#define eps 0.001 void...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.