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

Численные методы решения нелинейного уравнения - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Инициализация класса, возврат значений http://www.cyberforum.ru/cpp-beginners/thread1494898.html
Сама задача: Реализовать класс Rectangle. Класс должен хранить координаты, а так же длину и ширину прямоугольника. Предусмотреть инициализацию данного класса через конструктор по умолчанию и с помощью координат двух противоположных вершин. Общими должны быть методы, которые возвращают координаты прямоугольника (x1, x2, y1, y2), длину, ширину, площадь, а также методы позволяющие изменять...
C++ После выполнения (завершения) функции test переменная умрет, а что будет с переменной в Result? class abc { public: int argc; char **argv; char **azColName; }; std::list<abc> Result; http://www.cyberforum.ru/cpp-beginners/thread1494884.html
Задача по ООП C++
Помогите решить задачу. Есть следующий набор типов документов: 1. Паспорт. Атрибуты: Фамилия, Имя, отчество, Номер, Серия, Дата выдачи. 2. Свидетельство о регистрации брака. Атрибуты: Дата регистрации, Орган регистрации, Паспорт мужа, Паспорт Жены. Написать программу по вводу и редактированию этих данных. Использовать ООП. В программе (БД) должно быть предусмотрено, что...
C++ Ошибка: Run-Time Check Failure #3 - The variable 'i' is being used without being initialized
в чём ошибка (просьба подправить) #include "stdafx.h" #include <math.h> #include <iostream> #include <fstream> using namespace std; int factorial(int n) { int result = 1; for ( int i = 2; i <= n; i++ ) {
C++ Сохранение файла под указанным пользователем именем http://www.cyberforum.ru/cpp-beginners/thread1494875.html
у меня есть функция, которая сохраняет редактируемый файл и выходит: void shift_f10(char *filename) { FILE *f1; /*Редактируемый файл*/ int i,j; /*Счетчики*/ unsigned char buf; /*Буферная строка для считывания из файла*/ WORD attrib; /*Атрибуты ячеек экранного буфера*/ COORD position; /*Кординаты начала вывода (атрибутов)*/ DWORD numattrib; /*Количество...
C++ Найти максимальную площадь треугольника по двум его сторонам Формат ввода Первая строка ввода содержит два целых числа A и B (1 ≤ A, B ≤ 109) – заданные длины сторон. Формат вывода Вывести одно целое число — длина третьей стороны, при которой остроугольный треугольник с этими сторонами имеет максимальную площадь. подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2797 / 1573 / 246
Регистрация: 03.05.2010
Сообщений: 3,649
08.07.2015, 09:16     Численные методы решения нелинейного уравнения
Не очень понятно о каких n корнях идет речь. Они по всей числовой оси есть от минус до плюс бесконечности. Если для определенности говорить об n положительных корнях, то вот так можно:
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/////////////////////////////////////////////////////////////////////////////////////////
//Решить уравнение
//cos(1.3 * x) = 1/x
//численным методом. Найти первые n корней.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cmath>
#include <iostream>
#include <set>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string                 T_str;
typedef std::set    < double    >   T_roots;
/////////////////////////////////////////////////////////////////////////////////////////
const   double  EPS     =   0.00001;
const   T_str   EQ_STR  =   "cos(1.3 * x) = 1/x";
/////////////////////////////////////////////////////////////////////////////////////////
double  f( double   x )
{
    return  cos( 1.3 * x ) - 1 / x;
}
/////////////////////////////////////////////////////////////////////////////////////////
double  get_root_in_segment
    (
        double  L,
        double  R
    )
{
    while   (
                R - L   >   EPS
            )
    {
        double  M   =   (L + R) / 2;
 
        f(M) * f(L)     <   0
            ?   R   =   M
            :   L   =   M;
    }//while
 
    return  L;
}
/////////////////////////////////////////////////////////////////////////////////////////
double  get_root_to_right_of( double   L )
{
    if  (
            f(L) == 0
        )
    {
        L   +=  EPS;
    }
 
    double  R   =   L;
 
    while   (
                f(L) * f(R)     >=  0
            )
    {
        R   +=  EPS;
    }
 
    return  get_root_in_segment( L, R );
}
/////////////////////////////////////////////////////////////////////////////////////////
T_roots     get_n_positive_roots( int    n )
{
    T_roots     res_roots;
    double      root    =   0;
 
    for( int  i = 0; i < n; ++i )
    {
        root    =   get_root_to_right_of( root + EPS );
        res_roots.insert( root );
    }//for
 
    return  res_roots;
}
/////////////////////////////////////////////////////////////////////////////////////////
void    print_roots( T_roots    const   &   roots )
{
    std::cout   <<  std::endl
                <<  "Первые "
                <<  roots.size()
                <<  " положительных корней уравнения "
                <<  EQ_STR
                <<  ":"
                <<  std::endl;
 
    std::for_each
        (
            roots.begin     (),
            roots.end       (),
 
            []              ( double    root )
            {
                static  int     counter     =   0;
 
                std::cout   <<  '#'
                            <<  ++counter
                            <<  "\t"
                            <<  "f( "
                            <<  std::fixed
                            <<  root
                            <<  "\t) = "
                            <<  f( root )
                            <<  std::endl;
            }
        );
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
 
    std::cout   <<  "Введите количество искомых положительных корней уравнения"
                <<  std::endl
                <<  EQ_STR
                <<  ": ";
 
    int         n   =   0;
    std::cin    >>  n;
    T_roots     roots   =   get_n_positive_roots( n );
    print_roots     ( roots );
    system          ("pause");
}
 
Текущее время: 13:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru