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

Количество интераций - C++

Войти
Регистрация
Восстановить пароль
 
КуДрЯшЕчКа
2 / 2 / 1
Регистрация: 01.11.2009
Сообщений: 60
16.11.2009, 22:42     Количество интераций #1
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
#include<stdio.h>
#include<math.h>
float v(float x, float y)
{return x*x*x+y-exp(-x-y*y)-1;}
 
float dix(float a, float b, float (*v)(float x, float y), float eps, float d)
{
float t,z;
      z=v(d,a);
if(v(d,a)*v(d,b)>0||eps<=0){printf("ERROR!");}
else{
 
do{    
    t=(a+b)/2;
    if(v(d,t)==0)return t;
    if (z*v(d,t)>0) a=t;
    else b=t;
 
    }
 
    while ((b-a)>eps);
    return .5*(a+b);
}
}
int main()
{
float x, x1=0.0, x2=1.0, dx=0.1, eps=0.00001, f;
int a=-2,b=2;
    for (x=x1;x<x2+dx;x=x+dx)
    {f=dix(a,b,v,eps,x);
    printf("\n y=%f ",f);
    }
 
}
подскажите, пожалуйста, как подсчитать количество интераций для каждого значения у????
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2009, 22:42     Количество интераций
Посмотрите здесь:

C++ Количество букв в слове, количество предложений, самое длинное слово в предложении
C++ Определить количество выигрышей, количество проигрышей и количество ничьих данной команды
C++ Решение СЛАУ методом простых интераций
C++ Найти через индекс количество отрицательных и количество положительных элементов массива
Найти количество двух- и количество трехразрядных чисел в заданной последовательности C++
Определить количество лет, в которые количество осадков превышало среднегодовое C++
Операции с текстом (длина, количество слов, количество двойных пробелов) C++
Вычислить количество дней и количество полных лет между двумя датами C++
C++ Найти количество положительных и количество отрицательных чисел в исходном наборе
C++ Метод простых интераций для решения СЛАУ
Определить количество положительных и количество отрицательных элементов заданного массива C++
C++ Определить количество лет, в которые количество осадков превышало среднегодовое

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
16.11.2009, 23:09     Количество интераций #2
Самое простое, что в голову приходит:
C
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
size_t count;
float x, x1=0.0, x2=1.0, dx=0.1, eps=0.00001, f;
int a=-2,b=2;
        for (x=x1, count = 0;x<x2+dx;x=x+dx, count++)
        {f=dix(a,b,v,eps,x);
        printf("\n y=%f ",f);
        }
        /* в count количество итераций */
 
}
КуДрЯшЕчКа
2 / 2 / 1
Регистрация: 01.11.2009
Сообщений: 60
17.11.2009, 18:56  [ТС]     Количество интераций #3
это не совсем то, про чтоя спрашива.

мне надо подсчитать за сколько выполнений функции dix находится значение у.

не подскажите?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
17.11.2009, 20:20     Количество интераций #4
КуДрЯшЕчКа, не уверен, что снова правильно понял - везде по 19 получилось...
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
#include<stdio.h>
#include<math.h>
 
float v(float x, float y){
    return x*x*x+y-exp(-x-y*y)-1;
}
 
float dix(float a, float b, float (*v)(float x, float y), float eps, float d, int *count){
    float t,z;
    z=v(d,a);
    
    *count = 0;
    if(v(d,a)*v(d,b)>0||eps<=0){
        printf("ERROR!");
        return 0; /* хоть что-то вернуть нужно */
    }
    else{
        do{    
            (*count)++;
                t=(a+b)/2;
                    if(v(d,t)==0)
                        return t;
                if (z*v(d,t)>0) 
                    a=t;
                else 
                    b=t;
        } while ((b-a)>eps);
            return .5*(a+b);
    }
}
 
int main(){
    float x, x1=0.0, x2=1.0, dx=0.1, eps=0.00001, f;
    int a=-2,b=2, count;
    
    for (x=x1;x<x2+dx;x=x+dx){
        f=dix(a,b,v,eps,x, &count);
        printf("\n y=%f calculated by %d iterations", f, count);
    }
}
КуДрЯшЕчКа
2 / 2 / 1
Регистрация: 01.11.2009
Сообщений: 60
17.11.2009, 21:27  [ТС]     Количество интераций #5
у меня вообще ничего не выводит
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
17.11.2009, 23:18     Количество интераций #6
Цитата Сообщение от КуДрЯшЕчКа Посмотреть сообщение
у меня вообще ничего не выводит
странно... вроде всё правильно...
Количество интераций
Yandex
Объявления
17.11.2009, 23:18     Количество интераций
Ответ Создать тему
Опции темы

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