Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 1
Регистрация: 08.09.2014
Сообщений: 77
1

Метод хорд, касательных, золотого сечения

13.12.2014, 18:18. Просмотров 2278. Ответов 9
Метки нет (Все метки)

Написать программу которая решает какой из методов дает более точный результат для уравнения (уравнение свое), Хорд/касательных/золотого сечения

Функции которые решают этими методами найти не проблема. Но как реализовать решение программы о более точном результате?

Добавлено через 1 час 18 минут
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
105
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
//Функция для полинома:
double F(double x)
{
return x*x-9*x+14;
}
 
//Метод хорд
double FindRoot1(double (*f)(double),double a,double b,double eps)
{
double c;
while(abs(f(b)-f(a))>eps){
 c=(f(b)*a-f(a)*b)/(f(b)-f(a));
 if((f(a)*f(c)) > 0) a=c;
 else b=c;
}
return c;
}
 
//Метод Ньютона
double FindRoot2(double (*f)(double),double a,int eps)
{
double x=a,df,h=0.00001;
df=(f(x+h)-f(x))/h;
for(int i=1;i<=eps;i++)
 x=x-f(x)/df;
return x;
}
double e = 0.001;
double FindRoot3(double (*f)(double),double a,double b)
{
  unsigned int ff, n;
    double x1, x2, y1, y2;
    double fibo[3] = {0,1,1};
 
    // вычисляем 3 последних числа Фибоначчи для заданой точности
    ff = (b-a)/(2*e);
    n=3;
    while(fibo[2]<ff)
    {
        n++;
        fibo[0] = fibo[1];
        fibo[1] = fibo[2];
        fibo[2] = fibo[1] + fibo[0];
    }
 
    x1 = (b-a)*fibo[0]/fibo[2] + a;
    x2 = (b-a)*fibo[1]/fibo[2] + a;
 
    // Основной цикл
    while (n>1)
    {
        y1 = f(x1);
        y2 = f(x2);
        if (y1<=y2)
        {
            b = x2;
            x2 = x1;
            x1 = a + fibo[0]*(b-a)/fibo[2];
        } else {
            a = x1;
            x1 = x2;
            x2 = a + fibo[1]*(b-a)/fibo[2];
        }
 
        fibo[2] = fibo[1];
        fibo[1] = fibo[0];
        fibo[0] = fibo[2] - fibo[1];
        n--;
    }
 
    return (a+b)/2;
}
 
int main()
{
//Интервал, погрешность и корень:
double a,b,eps,x1;
double x2, x3;
cout << "interval: ";
cin >> a;
cin >> b;
//Проверка корректности интервала:
if(F(a)*F(b) > 0)
{
 cout << "Wrong interval!\n";
 return 0;
}
cout << "error: ";
cin >> eps;
//Поиск решения:
x1=FindRoot1(F, a, b, eps);
cout << "x1 = " << x1 << endl;
x2=FindRoot2(F, a, eps);
cout << "x2 = " << x2 << endl;
x3=FindRoot3(F, a, eps);
cout << "x3 = " << x3 << endl;
system ("pause");
return 0;
}
Добавлено через 39 секунд
не корректно работает(
не могу разобраться с вводом интервалов
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2014, 18:18
Ответы с готовыми решениями:

Метод золотого сечения.
Народ, подскажите пожалуйста как будет выглядеть задача на С++ по методу Золотого сечения, при...

Метод золотого сечения
Доброго времения суток. Помогите пжлст исправить или добавь формулу(методы Золотого сечения). Там...

Метод золотого сечения
Народ, подскажите пожалуйста как будет выглядеть задача на С++ по методу Золотого сечения, найти...

Метод золотого сечения
Пожалуйста , скиньте код Золотого сечения на С++ и объясните строчки именно с алгоритмом , очень...

9
89 / 72 / 81
Регистрация: 07.12.2014
Сообщений: 303
13.12.2014, 18:34 2
Цитата Сообщение от Yana_Chernobay Посмотреть сообщение
while(abs(f(b)-f(a))>eps){
должно быть
C++
1
while(fabs(f(b)-f(a))>eps)
по поводу точности, там, где модуль разности основной функции минус приближение минимальный по отношению к другим тот и лучше
1
0 / 0 / 1
Регистрация: 08.09.2014
Сообщений: 77
13.12.2014, 18:43  [ТС] 3
olgashat,
Цитата Сообщение от olgashat Посмотреть сообщение
по поводу точности, там, где модуль разности основной функции минус приближение минимальный по отношению к другим тот и лучше
не совсем поняла

Добавлено через 2 минуты
C++
1
2
3
4
5
if(F(a)*F(b) > 0)
{
 cout << "Wrong interval!\n";
 return 0;
}
а как определить интрвал? не совсем понимаю
0
89 / 72 / 81
Регистрация: 07.12.2014
Сообщений: 303
13.12.2014, 19:07 4
Цитата Сообщение от Yana_Chernobay Посмотреть сообщение
Код C++

if(F(a)*F(b) > 0)
{
*cout << "Wrong interval!\n";
*return 0;
}
это значит, что на этом интервале функция не меняет знак, а , соответственно, не имеет корней
1
0 / 0 / 1
Регистрация: 08.09.2014
Сообщений: 77
13.12.2014, 19:10  [ТС] 5
olgashat, но что бы я не ввела, кроме [2, 3] выбивает эту ошибку
0
89 / 72 / 81
Регистрация: 07.12.2014
Сообщений: 303
13.12.2014, 19:18 6
Цитата Сообщение от Yana_Chernobay Посмотреть сообщение
x*x-9*x+14;
у этго уравнения 2 корня 2 и 7
0
0 / 0 / 1
Регистрация: 08.09.2014
Сообщений: 77
13.12.2014, 19:44  [ТС] 7
olgashat, а как реализовать
Цитата Сообщение от olgashat Посмотреть сообщение
по поводу точности, там, где модуль разности основной функции минус приближение минимальный по отношению к другим тот и лучше
0
89 / 72 / 81
Регистрация: 07.12.2014
Сообщений: 303
13.12.2014, 19:49 8
на самом деле, если вывести на экран все значения, рассчитанные по методам, то там видно, какой метод считает корректнее
0
0 / 0 / 1
Регистрация: 08.09.2014
Сообщений: 77
14.12.2014, 22:27  [ТС] 9
Может у кого-то есть код "поиск корня с помощью метода золотого сечения"?
0
89 / 72 / 81
Регистрация: 07.12.2014
Сообщений: 303
15.12.2014, 09:42 10
Yana_Chernobay, а у Вас алгоритм есть, по которому кл написан?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2014, 09:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Метод золотого сечения
Ребята помогите нужно методом золотого сечения найти функцию(смотрел как это решали другие на вашем...

Метод Золотого Сечения
Помогите пожалуйста прокомментировать данную программу, а то не до конца пойму все действия. ...

Метод Золотого сечения. Пассивный поиск
Нужно написать программу Описание на картинке. Выручайте! Спасибо заранее кто поможет...

Метод золотого сечения считается неправильно
#include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include &quot;conio.h&quot; #include &quot;math.h&quot; #include...


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

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

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