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

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

Восстановить пароль Регистрация
 
dogg12
 Аватар для dogg12
57 / 23 / 5
Регистрация: 21.02.2011
Сообщений: 503
07.03.2014, 22:45     Метод итераций #1
x*x*x+2*x+6*(log(2+10*sqrt(3)))=0
отрезок: [-3;-2]
Это сама задача, вот код программы:
У меня такой вопрос, решабильно ли данное уравнение методом итераций, по заданию оно должно решатся. Но у меня получается, что в данном уравнении данный метод не сходится. Подскажите, что не так.
P.здавал похожую тему в разделе "Численные методы", но там люди не сильно сильны в программировании, поэтому решил продублировать тему здесь.
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <conio.h>
#include <math.h>
//Вычисление значения функции F(x)=0
double f(double x)
{   
        return x*x*x+2*x+6*(log(2+10*sqrt(3)));
}
 
 
//Вычисление значения первой производной функции F'(x)=0
double f1(double x)
{     
        return 3*x*x+2;
}
 
//Вычисление значения второй производной функции F''(x)=0
double f2(double x)
{ 
        return 6*x;
}
 
//Вычисление эквивалентной функции для метода итераций
double fe(double x,double lambda)
{
    return x-lambda*f(x);
}
 
//Вычисление первой производной эквивалентной функции для метода итераций
double fe1(double x,double lambda)
{
    return 1-lambda*f1(x);
}
//Поиск корня методом итерации
int iterac(double a, double b, double e, double *x,double lambda)
{
int n=0;
double x0=(b+a)/2.0,fx,last;
//Проверка сходимости
if(fabs(fe1(a,lambda))>=1||fabs(fe1(b,lambda))>=1) return -1;
fx=x0;
do
  {
  last=fx;
  fx=fe(last,lambda);
  n++;
  }
  while(fabs(fx-last)>e);
*x=fx;
return n;
}
 
int main()
{
    int it;     //кол-во точек и итераций
    double e,x;
    printf("e = ");
    scanf("%lf",&e);    //ввод погрешности вычислений
    printf("Metod iteracii.\n");
    it=iterac(-3.0,-2.0,e,&x,1/f1(1.5));
    if(it==-1) printf("Metod ne shoditsya.\n");
    else
    {
        printf("x=%lf\t%d iteraciy\t\n",x,it);
    }
 
    getch();        //пауза
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2014, 22:45     Метод итераций
Посмотрите здесь:

C++ Метод итераций и метод Зейделя
метод итераций C++
метод итераций с++ C++
метод итераций C++
метод итераций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Black Fregat
 Аватар для Black Fregat
1353 / 983 / 215
Регистрация: 31.05.2009
Сообщений: 4,093
07.03.2014, 23:16     Метод итераций #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ

Не по теме:

Вам, извините, там полдня объясняли что именно нужно сделать.
Вы ничего не захотели понять и пришли сюда - разберитесь, мол люди добрые, где я накосячил...



Вы почитали теорию? Вы сами писали этот код? Вы понимаете что он делает?
Вы хотя бы понимаете, что double lambda в этом коде - это как раз та http://www.cyberforum.ru/cgi-bin/latex.cgi?\lambda, о которой я писал?
Вот именно она и влияет на сходимость.

Замените значение lambda.
Интервал у Вас от -3 до -2, а lambda с какого-то перепугу 1/f1(1.5).
Поставьте 1/f1(-2.5)

Добавлено через 5 минут
Код
$ ./iterat
e = 0.001
Metod iteracii.
x=-2.354867	3 iteraciy
dogg12
 Аватар для dogg12
57 / 23 / 5
Регистрация: 21.02.2011
Сообщений: 503
07.03.2014, 23:49  [ТС]     Метод итераций #3
Black Fregat, Я знаю как работает алгоритм и я понимаю, что делает мой код. На счет лямда тут вы правы, тут я перемудрил. Так, что прошу извенить мою неграммотность относительно численных методов.
Black Fregat
 Аватар для Black Fregat
1353 / 983 / 215
Регистрация: 31.05.2009
Сообщений: 4,093
08.03.2014, 00:11     Метод итераций #4
Простите, погорячился.
Ev_Hyper
 Аватар для Ev_Hyper
1806 / 1627 / 435
Регистрация: 15.12.2013
Сообщений: 5,777
08.03.2014, 03:23     Метод итераций #5
dogg12, так вы решили свой вопрос?
dogg12
 Аватар для dogg12
57 / 23 / 5
Регистрация: 21.02.2011
Сообщений: 503
08.03.2014, 11:22  [ТС]     Метод итераций #6
Ev_Hyper, да) вопрос закрыт.
Yandex
Объявления
08.03.2014, 11:22     Метод итераций
Ответ Создать тему
Опции темы

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