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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
ScaleS
46 / 46 / 0
Регистрация: 06.12.2009
Сообщений: 68
#1

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

07.12.2009, 00:56. Просмотров 57775. Ответов 44

Задачи решенные тремя разными способами

Метод итераций
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
#include <conio.h>
#include <math.h>
#include <iostream.h>
#define pi 3.14
double f(double x) {
 
    return   x*x-(cos(pi*x));
}
 
double fi(double x, double L) {
 
    return  x+L*f(x);
}
 
 
int main() {
    int n=0;
    double x,y,c,b,L=-0.35,eps;
    cout<<"x="; cin>>x;
    cout<<"eps="; cin>>eps;
    do {
        y=fi(x,L);
        b=fabs(x-y);
        x=y;
        n+=1;
    }
    while (b>=eps);
        cout<<"c="<<x<<"\n";
        cout<<"n="<<n<<"\n";
        getch();
    return 0;
}


Метод Ньютона
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
#include <conio.h>
#include <math.h>
#include <iostream.h>
#define pi 3.14
 
double f(double x) {
 
    return   x*x-(cos(pi*x));
}
 
double f1(double x) {
 
    return   2*x+(1/x);
}
 
double f2(double x) {
 
    return   2+(-1/(x*x));
}
 
int main() {
    int n=0;
    double a,b,c,eps;
    cout<<"a="; cin>>a;
    cout<<"b="; cin>>b;
    cout<<"eps="; cin>>eps;
    if(f(a)*f2(a)>0) c=a;
    else c=b;
    do {
        c=c-f(c)/f1(c);
        n+=1;
    }
    while (fabs(f(c))>=eps);
        cout<<"c="<<c<<"\n";
        cout<<"n="<<n<<"\n";
        getch();
    return 0;
}


Метод половинного деления
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
#include <conio.h>
#include <math.h>
#include <iostream.h>
#define pi 3.14
 
double f(double x) {
 
    return   x*x-(cos(pi*x));
}
int main() {
    int n=0;
    double a,b,c,eps;
    cout<<"a="; cin>>a;
    cout<<"b="; cin>>b;
    cout<<"eps="; cin>>eps;
    do {
        c=(a+b)/2;
        if (f(c)*f(a)<=0) b=c;
        else a=c;
 
        n+=1;
 
    }
    while (fabs(a-b)>=eps);
        cout<<"c="<<c<<"\n";
        cout<<"n="<<n<<"\n";
        getch();
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2009, 00:56     Нахождение корней уравнения
Посмотрите здесь:

Нахождение корней уравнения - C++
Программа находит все корни уравнения и записывает в динамический массив. #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt;...

Нахождение корней уравнения - C++
Помогите написать программу по выводу корней из уравнения: f(x)=4\ast \sin \left(x \right)^4+2\ast \cos \left(x \right)^3+2 &quot;Шапку&quot; я...

Нахождение корней квадратного уравнения С++ - C++
Как найти корни квадратного уравнения С++?Задаются ведь значения x.y.z,а на выходе выводится значение корней. С++.Новичок.Буду...

Нахождение корней квадратного уравнения - C++
Здравствуйте все кто читает эти строки! Большой привет вам из раздела Delphi! Моему другу появилось необходимость написать прогу на...

Нахождение корней квадратного уравнения - C++
Здравствуйте , показывает ошибку в этих строчках,ругается на функции sqrt и pow объясните почему именно, заранее спасибо z =...

Нахождение корней уравнения методом обратного интерполирования - C++
Pomogite pojaluista napisat na C++ . . . zARANEE sPASIBO :)))

Нахождение корней уравнения методом обратного интерполирования - C++
Помощь нужна! кто можеть помогите

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soundtrack
42 / 42 / 4
Регистрация: 15.12.2011
Сообщений: 131
18.03.2012, 20:33     Нахождение корней уравнения #16
isaak, тьфу, я понял) Я думал ты предоставил код только функций, но по идее это и весь код твоего проекта. Если да, то у тебя не хватает функции main в которой и будет выполняться программа. Уже из неё вызывай функции подсчета.
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 658
19.03.2012, 21:24     Нахождение корней уравнения #17
Куда конкретно нужно подставить функцию main, я поставил в начале программы, у меня выдаюет ошибки:

Error 1 error C2144: syntax error : 'int' should be preceded by ';' c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1675\fibonacci methode\fibonacci methode\fibonacci methode.cpp 6 1 Fibonacci methode
2 IntelliSense: expected a ';' c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1675\fibonacci methode\fibonacci methode\fibonacci methode.cpp 7 1 Fibonacci methode
3 IntelliSense: identifier "x1" is undefined c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1675\fibonacci methode\fibonacci methode\fibonacci methode.cpp 46 17 Fibonacci methode
4 IntelliSense: identifier "x2" is undefined c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1675\fibonacci methode\fibonacci methode\fibonacci methode.cpp 46 22 Fibonacci methode
5 IntelliSense: identifier "xf1" is undefined c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1675\fibonacci methode\fibonacci methode\fibonacci methode.cpp 47 17 Fibonacci methode
6 IntelliSense: identifier "xf2" is undefined c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1675\fibonacci methode\fibonacci methode\fibonacci methode.cpp 47 23 Fibonacci methode
7 IntelliSense: identifier "a" is undefined c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1675\fibonacci methode\fibonacci methode\fibonacci methode.cpp 48 22 Fibonacci methode
8 IntelliSense: identifier "N" is undefined c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1675\fibonacci methode\fibonacci methode\fibonacci methode.cpp 48 36 Fibonacci methode
9 IntelliSense: identifier "k" is undefined c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1675\fibonacci methode\fibonacci methode\fibonacci methode.cpp 48 40 Fibonacci methode
10 IntelliSense: identifier "b" is undefined c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1675\fibonacci methode\fibonacci methode\fibonacci methode.cpp 48 61 Fibonacci methode
11 IntelliSense: identifier "Fun" is undefined c:\users\администратор\documents\visual studio 2010\projects\c++\console\p1675\fibonacci methode\fibonacci methode\fibonacci methode.cpp 49 23 Fibonacci methode
Помогите пожалуйста уже 2-ую неделю бьюсь???????
soundtrack
42 / 42 / 4
Регистрация: 15.12.2011
Сообщений: 131
19.03.2012, 21:58     Нахождение корней уравнения #18
Цитата Сообщение от isaak Посмотреть сообщение
Помогите пожалуйста уже 2-ую неделю бьюсь???????
isaak, Вообще, за 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
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
#include <iostream>
using namespace std;
#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;
}
 
double Fun(double x)
{
    return (x * x * x * x - 4 * x * x + 8); //здесь может быть ваше уравнение
}
 
void Fib(double a, double b)
{
    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;
        cout<<"\nРезультат:\nx = "<<_x<<"\t\tF(x) = "<<Fun(_x)<<
            "\nКоличество итераций: "<<k<<endl;
    }
    else
        goto P;
}
 
void main()
{
    setlocale(0, "");
    double a,b;
    cout << "Программа решает уравнение методом Фибоначчи.\nВведите границы:\na=";
    cin>>a;
    cout<<"b=";
    cin>>b;
    Fib(a,b);
    system("pause");
}
РоманДмитриевич
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 5
16.04.2012, 23:42     Нахождение корней уравнения #19
Помогите чуть чуть разобраться нубу

C++ (Qt)
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
#include <conio.h>
#include <math.h>
#include <iostream.h>
#define pi 3.14
 
double f(double x) {
 
    return   x*x-(cos(pi*x));
}
 
double f1(double x) {
 
    return   2*x+(1/x);
}
 
double f2(double x) {
 
    return   2+(-1/(x*x));
}
 
int main() {
    int n=0;
    double a,b,c,eps;
    cout<<"a="; cin>>a;
    cout<<"b="; cin>>b;
    cout<<"eps="; cin>>eps;
    if(f(a)*f2(a)>0) c=a;
    else c=b;
    do {
        c=c-f(c)/f1(c);
        n+=1;
    }
    while (fabs(f(c))>=eps);
        cout<<"c="<<c<<"\n";
        cout<<"n="<<n<<"\n";
        getch();
    return 0;
}
В этом коде a и b понятны.
а вот eps - это погрешность?
и в итоге c - это уже вычисляемый корень?
а n - это что тогда???


Знаю, стыдно
помогите разобраться
opi
7 / 7 / 1
Регистрация: 09.11.2010
Сообщений: 69
11.05.2012, 18:54     Нахождение корней уравнения #20
Как говориться лучше поздно, чем никогда, но всё же.

n это количество итераций
LEQADA
Мастер кустарных методов
227 / 222 / 9
Регистрация: 09.11.2010
Сообщений: 680
16.05.2012, 00:06     Нахождение корней уравнения #21
У кого-нибудь есть работающий код минимизации функции методом кубической интерполяции на C/C++?
urbinol
0 / 0 / 0
Регистрация: 16.06.2011
Сообщений: 151
04.09.2012, 12:07     Нахождение корней уравнения #22
а можете немножко прокомментировать метод золотого сечения..
LEQADA
Мастер кустарных методов
227 / 222 / 9
Регистрация: 09.11.2010
Сообщений: 680
04.09.2012, 14:01     Нахождение корней уравнения #23
urbinol, что именно вам не понятно?
urbinol
0 / 0 / 0
Регистрация: 16.06.2011
Сообщений: 151
04.09.2012, 19:00     Нахождение корней уравнения #24
какая переменная что обозначает
LEQADA
Мастер кустарных методов
227 / 222 / 9
Регистрация: 09.11.2010
Сообщений: 680
05.09.2012, 17:10     Нахождение корней уравнения #25
Какой код?
urbinol
0 / 0 / 0
Регистрация: 16.06.2011
Сообщений: 151
05.09.2012, 22:55     Нахождение корней уравнения #26
если можете реализуйте код на шарпе
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;
}
LEQADA
Мастер кустарных методов
227 / 222 / 9
Регистрация: 09.11.2010
Сообщений: 680
05.09.2012, 23:04     Нахождение корней уравнения #27
Цитата Сообщение от urbinol Посмотреть сообщение
реализуйте код на шарпе
вы не в том разделе, чтобы это просить. Кроме того, я не пишу на C#
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 // tay - пропорция золотого сечения
 
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;
}
demka
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 4
05.11.2012, 23:50     Нахождение корней уравнения #28
Нужно найти минимум функции. метод золотого сечения f(x)= (x*x) -(8/b) может кто написать с объяснениями. то что тут метод золотого сечения не работает ошибки пишет!
LEQADA
Мастер кустарных методов
227 / 222 / 9
Регистрация: 09.11.2010
Сообщений: 680
06.11.2012, 06:52     Нахождение корней уравнения #29
demka, всё должно работать. Возможно, вы не вводите значение b.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 19:33     Нахождение корней уравнения
Еще ссылки по теме:

Нахождение корней квадратного уравнения через дискриминант - C++
Здравствуйте! Начинаю работать в C++ Builder 3.1 в DOSBOXe. Стоит задача реализовать программу нахождения корней квадратного уравнения...

Нужен исходник с++(Нахождение корней уравнения методом обратного интерполирования) - C++
Помогите пожалуйста найти данный исходник...

Нахождение корней НУ в С++ - C++
Входными данными являются: 1. Диапазон поиска корней, т.е. минимальное и максимальное и значения х (например: от -1000 до 1000); 2....

Нахождение корней методом Ньютона - C++
Нужно написать программу вычисляющую корень полинома методом Ньютона. Подскажите, как можно описать функцию...

Нахождение корней полинома n-ой степени - C++
Помогите пожалуйста с написанием алгоритма для нахождения корней полинома n-ой степени. Может поможет кому- название алгоритмов для...


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

Или воспользуйтесь поиском по форуму:
korsarqa
7 / 7 / 0
Регистрация: 06.12.2011
Сообщений: 170
27.11.2012, 19:33     Нахождение корней уравнения #30
Цитата Сообщение от ScaleS Посмотреть сообщение
Задачи рещенные тремя разными способами

Метод итераций
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
#include <conio.h>
#include <math.h>
#include <iostream.h>
#define pi 3.14
double f(double x) {
 
    return   x*x-(cos(pi*x));
}
 
double fi(double x, double L) {
 
    return  x+L*f(x);
}
 
 
int main() {
    int n=0;
    double x,y,c,b,L=-0.35,eps;
    cout<<"x="; cin>>x;
    cout<<"eps="; cin>>eps;
    do {
        y=fi(x,L);
        b=fabs(x-y);
        x=y;
        n+=1;
    }
    while (b>=eps);
        cout<<"c="<<x<<"\n";
        cout<<"n="<<n<<"\n";
        getch();
    return 0;
}
Помогите пожалуйста с этим кодом. У меня функция pow(e,sqrt(x))-1/x;

Для чего тут функция fi. И что за переменная L там такая. Как мне вставить свою функцию, чтобы был результат
Yandex
Объявления
27.11.2012, 19:33     Нахождение корней уравнения
Ответ Создать тему
Опции темы

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