Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
1

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

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

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

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

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

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

Уточнить корни уравнения разными методами
Уточнить корни уравнения методом хорд, касательных, комбинированным методом хорд и касательных,...

Найти все корни уравнения
х^3+0.77х^2-0/2513х+0.016995=0

Найти все корни уравнения f (x)
Для заданной функции y = f (x) графическим способом отделить корни, т.е. указать числовые...

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

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

Добавлено через 28 секунд
Нужна программа на с++
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
12.02.2015, 18:04 10
Что не устроило в приведенных примерах.
Сделайте хотя бы одним методом и выложите сюда, обсудим, что не получается.
Например, возьмите код из поста
Отыскать все корни нелинейного уравнения f(x) = 0 с точностью до 10^-3
и замените в нем f(x) на Вашу функцию.
0
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
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
16.02.2015, 07:28 12
метод Стеффенсена
https://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
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
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
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
0 / 0 / 1
Регистрация: 29.09.2014
Сообщений: 97
06.03.2015, 12:19  [ТС] 15
zss, спасибо, но у меня возник другой вопрос, а как можно проверить работает ли данный способ верно?
Какое условие задать для проверки? И как ее лучше реализовать?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
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
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
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
06.03.2015, 13:13 18
qwen1234,
А где опечатка?
0
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
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
06.03.2015, 13:55 20
Аааа, теперь разглядел!
0
06.03.2015, 13:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2015, 13:55
Помогаю со студенческими работами здесь

Найти все корни уравнения
Всем привет. Помогите пожалуйста с этим заданием Это нужно сделать на подобии этого

Найти все корни уравнения
Строил график уравнения (x-3)*cosx=1 и искал его корни. Но отображается почему-то только один...

Найти все корни уравнения
Здравствуйте, можете помочь мне с решением задачи: Найти все корни уравнения x^n=1+i для...

Найти все корни уравнения
Подскажите, пож-та, как найти все корни уравнения: x=5(1 +0.5*cos(x)) При использовании Solved...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru