Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
qwen1234
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
1

Найти точно все корни уравнения указанными методами

10.02.2015, 21:52. Просмотров 1356. Ответов 20
Метки нет (Все метки)

Найдены точно все корни уравнения указанными методами. Проведено сравнение результатов и методов.

Методы:
1) Метод Ньютона (Касательных)
2) Метод Стеффенсена

Уравнения:
Найти все точки пересечения графиков y(x)=ctg(x) и http://www.cyberforum.ru/cgi-bin/latex.cgi?{\left(\frac{y}{5} \right)}^{2} + {\left(\frac{x}{1.5\pi } \right)}^{2}=1 для положительных x, c точностью http://www.cyberforum.ru/cgi-bin/latex.cgi?{10}^{-6}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2015, 21:52
Ответы с готовыми решениями:

Как найти все корни уравнения?
Программа находит решение уравнения методом деления отрезка пополам. Но на...

Найти все целые корни уравнения
Найти все целые корни уравнения ах^3 + bх^2 + сх + d = 0, где а, b, с и d —...

Найти все корни уравнения на заданном интервале
Помогите написать программу буду очень признателен) В ходе выполнения...

Найти все корни уравнения двумя способами
f(x)=2*x*x*x+3*x*x-5*x-6=0 Для данного уравнения провести его предварительный...

Найти все целые корни кубического уравнения
Найти все целые корни уравнения ах3 + bх2 + сх + d = 0, где а, b, с и d —...

20
zss
Модератор
Эксперт С++
7478 / 6847 / 4324
Регистрация: 18.12.2011
Сообщений: 18,113
Завершенные тесты: 1
10.02.2015, 22:03 2
Точно найти в принципе невозможно.
Можно найти с некоторой заданной точностью.
0
qwen1234
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
11.02.2015, 09:17  [ТС] 3
zss, с точностью http://www.cyberforum.ru/cgi-bin/latex.cgi?{10}^{-6}
То есть с 0.000001
0
zss
Модератор
Эксперт С++
7478 / 6847 / 4324
Регистрация: 18.12.2011
Сообщений: 18,113
Завершенные тесты: 1
11.02.2015, 09:41 4
1. Подставьте ctg(x) вместо y во второе уравнение.
2.Приведите уравнение к виду x=f(x) перенеся множитель с ctg в правую часть.
3. Решайте методом итераций.
0
qwen1234
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
11.02.2015, 10:44  [ТС] 5
zss, к сожалению вся проблема именно в этом, я не знаю данный метод, искал по форому, видел кодировку, но там немного не то, да и сам я не очень понял(простите, что такой, я все же не программист и знаний у меня не так много). У меня все же тут 2 метода, как я понимаю все эти два метода нужно написать в одной программе. Вы не сможете мне помочь по кодированию на C++?
0
zss
Модератор
Эксперт С++
7478 / 6847 / 4324
Регистрация: 18.12.2011
Сообщений: 18,113
Завершенные тесты: 1
11.02.2015, 11:28 6
Посмотрите вот этот материал.
Seminar12.pdf
Там ближе к концу рассмотрены методы решения уравнения.
0
qwen1234
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
11.02.2015, 20:29  [ТС] 7
zss, спасибо, алгоритм я более менее понял, но вопрос остается в коде на C++. Как будет выглядить данный алгоритм в написании С++?
0
qwen1234
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
12.02.2015, 11:21  [ТС] 9
zss, помогите,пожалуйста, написать программу

Добавлено через 12 часов 46 минут
Подьем

Добавлено через 28 секунд
Нужна программа на с++
0
zss
Модератор
Эксперт С++
7478 / 6847 / 4324
Регистрация: 18.12.2011
Сообщений: 18,113
Завершенные тесты: 1
12.02.2015, 18:04 10
Что не устроило в приведенных примерах.
Сделайте хотя бы одним методом и выложите сюда, обсудим, что не получается.
Например, возьмите код из поста
Отыскать все корни нелинейного уравнения f(x) = 0 с точностью до 10^-3
и замените в нем f(x) на Вашу функцию.
0
qwen1234
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
15.02.2015, 23:25  [ТС] 11
zss,пожалуйста, проверьте. И да, я подставил другие формулы, ибо если ставить свои, то он ругается. Попробуйте сами, может быть я что-то путаю и не так записываю формулу
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
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <cmath>
using namespace std;
 
 
double F1(double x)
{
return 1/tan(1.01*x)-x*x;
}
 
double F2(double x)
{
return -1/(sin(1.01*x)*sin(1.01*x))-2*x;
}
 
void MN(double x, double h, double mf(double x), double dmf(double x))
{
int n=0;
double y, a=0.001;
 
while (fabs(mf(x)>h))
{
n++;
x=x-a*mf(x)/dmf(x);
}
cout << "X=" << x << '\t';
cout << "n=" << n << endl;
y=mf(x);
cout << "y=" << y << '\n';
}
 
void MSEC(double x, double h, double mf(double x))
{
int n=0;
double y, a=0.001, k;
k=x;
x=0.06;
y=a*mf(x);
while (fabs(mf(x)>h))
{
n++;
x=x-(x-k)*y/(y-mf(k));
}
cout << "X=" << x << '\t' << "n=" << n << endl;
y=mf(x);
cout << "y=" << y << '\n';
}
 
void Pr_Iter(double x, double h, double mf(double x))
{
int n=0;
double y, a=0.0001;
 
while (fabs(mf(x)>h))
{
n++;
x=x+a*mf(x);
}
cout << "X=" << x << '\t' << "n=" << n << endl;
y=mf(x);
cout << "y=" << y << '\n';
}
 
int main(void)
{
    cout << "Metod Nutona:\n";
    MN(0.05, 0.000001, F1, F2);
    cout << "\n";
    
    MN(3.2, 0.000001, F1, F2);
    cout << "\n";
// MN(6.1, 0.000001, F1, F2);
// printf("\n");
// MN(9.3, 0.000001, F1, F2);
// printf("\n");
 
 
cout << "Metod sekushih:\n";
MSEC(0.05, 0.000001, F1);
cout << "\n";
 
// MSEC(3.1, 0.000001, F1);
// printf("\n");
// MSEC(0.05, 0.000001, F1);
// printf("\n");
// MSEC(0.05, 0.000001, F1);
// printf("\n");
 
 
cout << "Prostye iteratsyy:\n";
Pr_Iter(0.05, 0.000001, F1);
cout << "\n";
 
Pr_Iter(3.2, 0.000001, F1);
cout << "\n";
 
// Pr_Iter(6.15, 0.000001, F1);
// printf("\n");
// Pr_Iter(9.0, 0.000001, F1);
// printf("\n");
return 0;
}
Добавлено через 57 минут
zss, правильно?

Добавлено через 4 часа 19 минут
zss, я написал метод ньютона и другие методы, но метод Стеффенсена я не могу найти нормальный.

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
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <cmath>
using namespace std;
 
 
double F1(double x)//уравнение
{
return (1/(tan(x)))-5*sqrt(1-pow((x/(1.5*3.14)),2));
}
 
double F2(double x)//производная 
{
return ((-1/pow(sin(x),2))+((23.55*x)/(104.487111*sqrt(1-pow((x/(1.5*3.14)),2)))));
}
 
void MN(double x, double h, double mf(double x), double dmf(double x))
{
int n=0;
double y, a=0.001;
 
while (fabs(mf(x)>h))
{
n++;
x=x-a*mf(x)/dmf(x);
}
cout << "X=" << x << '\t';
cout << "n=" << n << endl;
y=mf(x);
cout << "y=" << y << '\n';
}
 
void MSEC(double x, double h, double mf(double x))
{
int n=0;
double y, a=0.001, k;
k=x;
x=0.06;
y=a*mf(x);
while (fabs(mf(x)>h))
{
n++;
x=x-(x-k)*y/(y-mf(k));
}
cout << "X=" << x << '\t' << "n=" << n << endl;
y=mf(x);
cout << "y=" << y << '\n';
}
 
void Pr_Iter(double x, double h, double mf(double x))
{
int n=0;
double y, a=0.0001;
 
while (fabs(mf(x)>h))
{
n++;
x=x+a*mf(x);
}
cout << "X=" << x << '\t' << "n=" << n << endl;
y=mf(x);
cout << "y=" << y << '\n';
}
 
int main(void)
{
    cout << "Metod Nutona:\n";
    MN(0.05, 0.000001, F1, F2);
    cout << "\n";
    
    MN(3.2, 0.000001, F1, F2);
    cout << "\n";
 
 
 
cout << "Metod sekushih:\n";
MSEC(0.05, 0.000001, F1);
cout << "\n";
 
 
 
 
cout << "Prostye iteratsyy:\n";
Pr_Iter(0.05, 0.000001, F1);
cout << "\n";
 
Pr_Iter(3.2, 0.000001, F1);
cout << "\n";
 
 
return 0;
}
Добавлено через 34 секунды
zss, к тому же я подставил те самые нужные уравнения
0
zss
Модератор
Эксперт С++
7478 / 6847 / 4324
Регистрация: 18.12.2011
Сообщений: 18,113
Завершенные тесты: 1
16.02.2015, 07:28 12
метод Стеффенсена
http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{n+1}={x}_{n}-\frac{f({x}_{n})}{f({x}_{n}+f({x}_{n}))-f({x}_{n})}f({x}_{n})
1
qwen1234
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
06.03.2015, 00:19  [ТС] 13
zss, Здравствуйте, не поверите, но я до сих пор не могу разобраться с методом стеффенсена, точнее правильно ли он работает, формулу, вроде, указал, как вы написали. Радует, что корни при втором значении подборки значений выходят положительными! Можете пожалуйста проверить правильность написания программы?
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
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <cmath>
using namespace std;
 
 
double F1(double x)
{
return (sin(x));
}
 
 
 
void MS(double x, double h, double mf(double x))
{
int n=0,d;
double y, a=0.001;
 
while (fabs(mf(x))>h && n<20)
{
n++;
d=(x+mf(x));
x=x-(mf(x)*mf(x)/mf(d)-mf(x));
}
cout << "X=" << x << '\t';
cout << "n=" << n << endl;
y=mf(x);
cout << "y=" << y << '\n';
}
 
 
int main(void)
{
cout << "Metod Stefensena:\n";
    MS(0.05, 0.000001, F1);
    cout << "\n";
    
    MS(3.2, 0.000001, F1);
    cout << "\n";
 
return 0;
}
0
zss
Модератор
Эксперт С++
7478 / 6847 / 4324
Регистрация: 18.12.2011
Сообщений: 18,113
Завершенные тесты: 1
06.03.2015, 07:35 14
Цитата Сообщение от qwen1234 Посмотреть сообщение
x=x-(mf(x)*mf(x)/mf(d)-mf(x));
Со скобками напутали.
C++
1
2
3
double t=mf(x);
d=mf(x+t);
x-=t*t /(d-t);
0
qwen1234
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
06.03.2015, 12:19  [ТС] 15
zss, спасибо, но у меня возник другой вопрос, а как можно проверить работает ли данный способ верно?
Какое условие задать для проверки? И как ее лучше реализовать?
0
zss
Модератор
Эксперт С++
7478 / 6847 / 4324
Регистрация: 18.12.2011
Сообщений: 18,113
Завершенные тесты: 1
06.03.2015, 12:25 16
Цитата Сообщение от qwen1234 Посмотреть сообщение
fabs(mf(x))>h
Означает что значение функции в этой точке достаточно близко к нулю.
Это называется "Невязка".
Еще можете вычислять "Погрешность" запоминая на каждом шаге старое значение x
C++
1
2
3
4
5
6
do
{
   xold=x;
... 
  x=...
}while (fabs(mf(x))>h && n<20 &&  fabs(x-old)>h);
0
qwen1234
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
06.03.2015, 12:58  [ТС] 17
zss, у вас там опечатка, вроде.
(fabs(mf(x))>h && n<20 && fabs(x-old)>h);

C++
1
(fabs(mf(x))>h && n<20 &&  fabs(x-xold)>h);
0
zss
Модератор
Эксперт С++
7478 / 6847 / 4324
Регистрация: 18.12.2011
Сообщений: 18,113
Завершенные тесты: 1
06.03.2015, 13:13 18
qwen1234,
А где опечатка?
0
qwen1234
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
06.03.2015, 13:21  [ТС] 19
zss, fabs(x-old)>h вот тут разве не должно быть fabs(x-xold)>h

x-xold должно же быть, а не x-old
Или я ошмбаюсь?
0
zss
Модератор
Эксперт С++
7478 / 6847 / 4324
Регистрация: 18.12.2011
Сообщений: 18,113
Завершенные тесты: 1
06.03.2015, 13:55 20
Аааа, теперь разглядел!
0
06.03.2015, 13:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2015, 13:55

Вычислить корни уравнения вида f(x)=0 c абсолютной погрешностью e тремя методами
метод секущих метод хорд метод золотого сечения должгоо быть как на картинке

Найти все целые корни уравнения ax3+bx2+cx+d=0
Добрый вечер. Есть задача : Вводятся целые числа a,b,c,d.Найти все целые...

Найти все целые корни уравнения ax3+bx2+cx+d=0
Здравствуйте! Помогите, пожалуйста, решить задачу: &quot;Вводятся целые значения...


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

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

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