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

Нахождение корней уравнения - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сумма бесконечного ряда - это как ? http://www.cyberforum.ru/cpp-beginners/thread71242.html
скажите мне пжлста когда дана сумма бесконечная с точностью что надо сделать я имею ввиду в чем смысл задания?? надо найти сумму при котором некий номер суммы меньше точности?!
C++ Проектирование и работа с классами Задали лабораторную в институте. Не знаю как сделать, люди помогите пожалуйста. Спроектировать и реализовать класс Complex для работы с комплексными числами. В классе должны быть определены различные конструкторы (по умолчанию, только на основе вещественной части, по вещественной и мнимой части, конструктор копирования). Должны быть перегружены следующие операторы: +, -, *, ==, *=, +=, –=,!=,... http://www.cyberforum.ru/cpp-beginners/thread71228.html
C++ Debug error
После запуска при вводе любого числа выдает debug error с предложение прервать, повторить или пропустить. Если нажимаю пропустить выдает число -858993450. В чем ошибка? #include <iostream> #include <string> #include <conio.h> using namespace std; int main() {
Дан файл с абзацем, выровненым по левому краю, надо отформатировать по правому краю C++
есть задание дан файл с абзацем выровненым по левому краю , надо отформатировать по правому краю!!
C++ использование указателей http://www.cyberforum.ru/cpp-beginners/thread71211.html
Должна быть разработана программа с меню с использованием указателей: 1. Изменить порядок следования элементов в массиве так, чтобы сначала располагались все отрицательные элементы, затем положительные, а потом нули. 2. Найдите наибольший элемент среди четных строк матрицы. 3. Выход с программы Немогу понять как реализовать 1 и 2 пункт (непонятен сам алгоритм нахождения) зы:подскажите...
C++ Файлы Помогите пожалуйста с программкой: Информация о сотрудниках предприятия содержит: -Ф.И.О.; -номер отдела; -должность; -дату начала работы. Вывести список сотрудников по отделам в порядке убывания ста¬жа. подробнее

Показать сообщение отдельно
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
07.12.2009, 02:03     Нахождение корней уравнения
Раз создана такая тема, то у меня тоже есть парочка методов

Дихотомии(половинного деления)
C++
1
2
3
4
5
6
7
8
9
10
11
double dichotomy(double infinum, double supremum, double epsilon) {
   double x;
   while (supremum - infinum > epsilon) {
      x = (infinum + supremum) / 2;
      if (func(supremum) * func(x) < 0)
         infinum = x;
      else
         supremum = x;
   }
   return (infinum + supremum) / 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#define eps 1e-3
#define tay 1.618
 
void Gold(double a, double b)
{
    std::cout<<"\n\n\n\tМетод золотого сечения:\n";
    double x1, x2, _x, xf1, xf2;
    int iter(0);
    x1 = a + (b - a) / (tay * tay);
    x2 = a + (b - a) / tay;
    xf1 = Fun(x1);
    xf2 = Fun(x2);
  P:
    iter++;
    if(xf1 >= xf2)
    {
        a = x1;
        x1 = x2;
        xf1 = Fun(x2);
        x2 = a + (b - a) / tay;
        xf2 = Fun(x2);
    }
    else
    {
        b = x2;
        x2 = x1;
        xf2 = xf1;
        x1 = a + (b - a) / (tay * tay);
        xf1 = Fun(x1);
    }
    if(fabs(b - a) < eps) 
    {
        _x = (a + b) / 2;
        std::cout<<"Результат:\nx = "<<_x<<"\t\tF(x) = "<<Fun(_x)<<
            "\nКоличество итераций: "<<iter;
    }
    else
        goto 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
#include <iostream>
#define eps 1e-3
int F(int n)
{
    int f, f1(1), f2(1), m(0);
    while(m < n - 1)
    {
        f = f1 + f2;
        f1 = f2;
        f2 = f;
        ++m;
    }
    return f1;
}
void Fib(double a, double b)
{
    std::cout<<"\n\n\n\tМетод Фибоначчи:\n";
    double x1, x2, _x, xf1, xf2;
    int k(0);
    int N(0);
    double fn1(1), fn2(1), fn, f = (b - a) / eps;
    while(fn1 < f)
    {
        fn = fn1 + fn2;
        fn1 = fn2;
        fn2 = fn;
        ++N;
    }
    x1 = a + (double)F(N - 2) / F(N) * (b - a) - (N&1 ? -1 : 1) * eps / F(N);
    x2 = a + (double)F(N - 1) / F(N) * (b - a) + (N&1 ? -1 : 1) * eps / F(N);
    xf1 = Fun(x1);
    xf2 = Fun(x2);
  P:
    ++k;
    if(xf1 >= xf2)
    {
        a = x1;
        x1 = x2;
        xf1 = xf2;
        x2 = a + (double)F(N - k - 1) / F(N - k) * (b - a) + ((N - k)&1 ? -1 : 1) * eps / F(N - k);
        xf2 = Fun(x2); 
    }
    else
    {
        b = x2;
        x2 = x1;
        xf2 = xf1;
        x1 = a + (double)F(N - k - 2) / F(N - k) * (b - a) - ((N - k)&1 ? -1 : 1) * eps / F(N - k);
        xf1 = Fun(x1);
    }
    if(fabs(b - a) <= eps)
    {
        _x = (a + b) / 2;
        std::cout<<"Результат:\nx = "<<_x<<"\t\tF(x) = "<<Fun(_x)<<
            "\nКоличество итераций: "<<k;
    }
    else
        goto P;
}


Метод хорд
C++
1
2
3
4
5
6
7
8
9
10
11
12
double secant(double infinum, double supremum, double epsilon)
{
    while (fabs(supremum - infinum) > epsilon)
    {
        infinum = supremum - (supremum - infinum) * func(supremum) / (func(
                supremum) - func(infinum));
        supremum = infinum - (infinum - supremum) * func(infinum) / (func(
                infinum) - func(supremum));
    }
 
    return supremum;
}


Где наше уравнение - функция
Fun
C++
1
2
3
4
double Fun(double x)
{
    return (x * x * x * x - 8 * x * x + 8 * x + 1);//здесь может быть ваше уравнение
}
и параметры a и b - границы интервала
 
Текущее время: 04:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru