Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/573: Рейтинг темы: голосов - 573, средняя оценка - 4.92
 Аватар для ScaleS
51 / 51 / 0
Регистрация: 06.12.2009
Сообщений: 68

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

07.12.2009, 00:56. Показов 113901. Ответов 47

Студворк — интернет-сервис помощи студентам
Задачи решенные тремя разными способами

Метод итераций
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;
}
51
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2009, 00:56
Ответы с готовыми решениями:

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

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

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

47
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
16.05.2012, 00:06
Студворк — интернет-сервис помощи студентам
У кого-нибудь есть работающий код минимизации функции методом кубической интерполяции на C/C++?
0
0 / 0 / 0
Регистрация: 16.06.2011
Сообщений: 150
04.09.2012, 12:07
а можете немножко прокомментировать метод золотого сечения..
0
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
04.09.2012, 14:01
urbinol, что именно вам не понятно?
0
0 / 0 / 0
Регистрация: 16.06.2011
Сообщений: 150
04.09.2012, 19:00
какая переменная что обозначает
0
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
05.09.2012, 17:10
Какой код?
0
0 / 0 / 0
Регистрация: 16.06.2011
Сообщений: 150
05.09.2012, 22:55
если можете реализуйте код на шарпе
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;
}
0
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
05.09.2012, 23:04
Цитата Сообщение от 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;
}
1
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 4
05.11.2012, 23:50
Нужно найти минимум функции. метод золотого сечения f(x)= (x*x) -(8/b) может кто написать с объяснениями. то что тут метод золотого сечения не работает ошибки пишет!
0
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
06.11.2012, 06:52
demka, всё должно работать. Возможно, вы не вводите значение b.
0
 Аватар для korsarqa
11 / 11 / 1
Регистрация: 06.12.2011
Сообщений: 170
27.11.2012, 19:33
Цитата Сообщение от 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 там такая. Как мне вставить свою функцию, чтобы был результат
0
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
27.11.2012, 19:47
Цитата Сообщение от korsarqa Посмотреть сообщение
Как мне вставить свою функцию, чтобы был результат
функция f возвращает значение вашей функции в заданной точке. Вам нужно переписать return у функции f.
Для чего вообще этот код? Вы должны ответить на этот вопрос, чтобы получить ответ на все свои другие вопросы.
0
 Аватар для korsarqa
11 / 11 / 1
Регистрация: 06.12.2011
Сообщений: 170
27.11.2012, 19:52
Цитата Сообщение от LEQADA Посмотреть сообщение
функция f возвращает значение вашей функции в заданной точке. Вам нужно переписать return у функции f.
Для чего вообще этот код? Вы должны ответить на этот вопрос, чтобы получить ответ на все свои другие вопросы.
вы меня не поняли... Я хочу вставить свою функции вместо той, что дана в образце.
Моя функция pow(e,sqrt(x))-1/x. Подставляю

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   pow(e,sqrt(x))-1/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
double fi(double x, double L) {
 
    return  x+L*f(x);
}
0
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
27.11.2012, 19:56
korsarqa, а я не знаю, что делает этот код. Вы расскажите, я отвечу.
0
Tugur
01.01.2013, 13:46
Цитата Сообщение от 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
#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;
}
как сделать чтоб несколько корней выводил ведь на отрезке могут быть другие значения!
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 8
07.04.2013, 16:24
Цитата Сообщение от 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;
}


Метод Ньютона
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;
}
Подскажите пожалуйсата, как представленный здесь метод итерации, применить для системы из двух уравнений.
0
 Аватар для igor myakota
73 / 74 / 16
Регистрация: 03.05.2012
Сообщений: 1,271
15.05.2013, 18:50
Как методом итерации решить уравнение вида :exp(x)-x-20=0
0
18 / 18 / 3
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 15:49
Цитата Сообщение от igor myakota Посмотреть сообщение
Как методом итерации решить уравнение вида :exp(x)-x-20=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
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Russian");
    double x,x0,delta;
    int n;
    const double eps=0.001;
    cout <<"Введите начальное приближение для решения уравнения:\n e^X-X-20=0\n";
    cout <<"X0= ";cin >>x0;
    n=0;
    delta=0;
    do
    {
        x=log (x0+20);
        n=n+1;
        delta=fabs(x-x0);
        x0=x;
    }
    while(delta>=eps);
    cout <<"Решение уравнения Х= "<<x;
    cout <<"\nРешение найдено через "<<n<<" шагов!";
    getchar();
    getchar();
    return 0;
}
1
02.11.2013, 13:25
Можете прокомментировать метод Ньютона, пожалуйста.
0
1 / 1 / 1
Регистрация: 05.10.2013
Сообщений: 92
01.06.2014, 21:36
можете подсказать как сделать оценку погрешностей для хорд, касательных и половинного деления
0
1 / 1 / 0
Регистрация: 29.09.2011
Сообщений: 17
01.07.2014, 18:50
Помогите пожалуйста с методом итераций, подставил f(x)= cos(x)-(-x+5) с погрешностью 0.002, правильно ли я всё сделал? Просто в языках разбираюсь ниже плинтуса. И если можно обьясните как оно работает
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
#include <conio.h>
#include <math.h>
#include <iostream>
#define pi 3.14
using namespace std;
double f(double x) {
 
    return   cos(x)-(-x+5);
}
 
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;
    x=2;//начальное приближение
    eps=0.002; //погрешность
    do {
        y=fi(x,L);
        b=fabs(x-y);
        x=y;
        n+=1;
    }
    while (b>=eps);
        cout<<"x="<<x<<"\n";
        cout<<"n="<<n<<"\n";
        getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.07.2014, 18:50

Нахождение корней квадратного уравнения
Знаю, что на эту тему уже много было написано, но мне нужно точное решение задачи, поскольку проверяет её компьютер. Входные данные: ...

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

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

Нахождение корней квадратного уравнения (Pascal -> C++)
Помогите Перевести с Pascal на C++ Можно и картинкой Добавлено через 33 секунды Вот код: Program uravneni; var...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru