Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

07.12.2009, 00:56. Просмотров 59625. Ответов 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;
}
47
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2009, 00:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нахождение корней уравнения (C++):

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

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

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

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

44
LEQADA
Мастер кустарных методов
227 / 222 / 9
Регистрация: 09.11.2010
Сообщений: 680
27.11.2012, 19:47 #31
Цитата Сообщение от korsarqa Посмотреть сообщение
Как мне вставить свою функцию, чтобы был результат
функция f возвращает значение вашей функции в заданной точке. Вам нужно переписать return у функции f.
Для чего вообще этот код? Вы должны ответить на этот вопрос, чтобы получить ответ на все свои другие вопросы.
0
korsarqa
7 / 7 / 0
Регистрация: 06.12.2011
Сообщений: 170
27.11.2012, 19:52 #32
Цитата Сообщение от 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
Мастер кустарных методов
227 / 222 / 9
Регистрация: 09.11.2010
Сообщений: 680
27.11.2012, 19:56 #33
korsarqa, а я не знаю, что делает этот код. Вы расскажите, я отвечу.
0
Tugur
01.01.2013, 13:46 #34
Цитата Сообщение от 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;
}
как сделать чтоб несколько корней выводил ведь на отрезке могут быть другие значения!
said_ua
07.04.2013, 16:24 #35
Цитата Сообщение от 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;
}
Подскажите пожалуйсата, как представленный здесь метод итерации, применить для системы из двух уравнений.
igor myakota
59 / 59 / 15
Регистрация: 03.05.2012
Сообщений: 1,224
15.05.2013, 18:50 #36
Как методом итерации решить уравнение вида :exp(x)-x-20=0
0
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 15:49 #37
Цитата Сообщение от 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
uhuy
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 9
02.11.2013, 13:25 #38
Можете прокомментировать метод Ньютона, пожалуйста.
0
Roy jones
1 / 1 / 0
Регистрация: 05.10.2013
Сообщений: 92
01.06.2014, 21:36 #39
можете подсказать как сделать оценку погрешностей для хорд, касательных и половинного деления
0
stinkerkiller
1 / 1 / 0
Регистрация: 29.09.2011
Сообщений: 17
01.07.2014, 18:50 #40
Помогите пожалуйста с методом итераций, подставил 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
SakinT
1 / 1 / 0
Регистрация: 02.04.2014
Сообщений: 111
13.01.2015, 19:24 #41
Отыскать все корни нелинейного уравнения f(x) = 0 с точностью до 10-3.


как методом итерации и методом половинного деления решить эти уравнения?: x^3-3x^2+6x-5 = 0

3x+4x^3-12x^2-5=0

и показать отделение корней, т.е. найти интервал (a, b), на концах которого знаки f(x) разные.

Добавлено через 14 минут
Отыскать все корни нелинейного уравнения f(x) = 0 с точностью до 10-3.
10^-3 *(исправление)
0
rufus777
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 10
09.12.2015, 05:32 #42
Выше был вопрос, про метод итераций для системы уравнений х) Такая же проблема и у меня, посмотреть хотя бы образец как выглядит это х) Если не трудно, помогите х) Спасибо)
0
Alex31115
0 / 0 / 0
Регистрация: 03.11.2015
Сообщений: 41
04.01.2016, 07:47 #43
Цитата Сообщение от ScaleS Посмотреть сообщение
double x,y,c,b,L=-0.35,eps;
А почему мы берем
C++ (Qt)
1
L=-0.35
? Как вообще оно выбирается? В методе итераций же вроде из уравнения http://www.cyberforum.ru/cgi-bin/latex.cgi?y(x)=0 получают уравнение http://www.cyberforum.ru/cgi-bin/latex.cgi?x=z(x) и по этому http://www.cyberforum.ru/cgi-bin/latex.cgi?x
смотрят что-то.
0
silencerus
0 / 0 / 0
Регистрация: 02.12.2016
Сообщений: 11
03.12.2016, 20:40 #44
Здравствуйте.
Интересует код по золотому сечению представленному тут. Написано, что код для нахождения корней уравнения, но ищется минимум(или максимум), а ведь это разные задачи. Может кто-нибудь предоставить код метода золотого сечения для нахождения корней уравнения?
0
andywhitedsgn17
0 / 0 / 0
Регистрация: 27.01.2017
Сообщений: 6
23.05.2017, 18:14 #45
L=-0.35, тоже интересно почему так
0
23.05.2017, 18:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2017, 18:14
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Опции темы

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