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

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

Войти
Регистрация
Восстановить пароль
 
imran
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 7
#1

Найти минимум функции методом кубической параболы - C++

18.05.2014, 00:47. Просмотров 850. Ответов 4
Метки нет (Все метки)

Добрый вечер. Делаю лабораторную работу по c++ (нахождение минимума функции методом кубической параболы) и не знаю как реализовать последний пункт в алгоритме (шаг 7). Подкиньте идейку. Сам никак не придумаю как это сделать.
0
Миниатюры
Найти минимум функции методом кубической параболы  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 00:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти минимум функции методом кубической параболы (C++):

Нахождение минимума функции одной переменной методом кубической параболы - C++
Допущена ошибка в коде.Предполагаю,что неверно выбран x1 в самой функции метода.Также возможна ошибка в выборе шага(я беру 0.59). ...

Пересечение кубической параболы и окружности - C++
Задание звучит так: с клавиатуры вводятся коэффициенты, которые определяют полином третьего степени. Найти точки пересечения его с...

Найти минимум функции методом золотого сечения. - C++
Помогите пожалуйста!... Нужно найти минимум функции у=х*х-sinх методом золотого сечения. в СИ. заранее большое спасибо!

Создать титульный лист и построить график кубической параболы - C++
Создать титульный лист и построить график кубической параболы

Для каждой параболы вывести уравнение, найти эктремумы; выяснить совпадают или пересекаются эти параболы - C++
Вот само задание: http://i.imgur.com/ZOUVXmQ.jpg П.5.18.Правил Запрещено размещать задания и решения в виде картинок и других файлов с...

найти методом золотого сечения минимум - C++
просто нужно взять любое линейное уравнение и найти методом золотого сечения минимум. и на с++ всё это записать. не плохо было бы с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
destroymol
6 / 6 / 3
Регистрация: 02.06.2013
Сообщений: 46
18.05.2014, 01:04 #2
А в чем проблема? Оба эпсилона ты знаешь, x1, и х с чертой знаешь, функцию вычислить можешь. Я не понял вопроса. Скинь то, до чего ты уже дорешался.
0
imran
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 7
18.05.2014, 11:50  [ТС] #3
Я не понимаю как в с++ реализовать 7 шаг (поменять значения переменных и вернутся в шаг 5).
0
destroymol
6 / 6 / 3
Регистрация: 02.06.2013
Сообщений: 46
18.05.2014, 15:19 #4
Скинь код, который уже есть.
0
imran
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 7
19.05.2014, 20:58  [ТС] #5
Недоделанный код (не объявлял переменные, не проверял на ошибки):
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
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include <math.h>
#include <stdlib.h>
 
using namespace std;
 
double  a=1,  h=1, eps1 = 0.01, eps2 = 0.03, xl;
 
double f(double);
double fp(double);
double kit(double);
 
 
int main()
{
    
 
    xl = mp3();
    cout << "Minimum = " << xl << endl;
    system("pause");
    return 0;
}
 
double f(double x)
{
    return x*cos(x)-x;
}
 
double fp(double x)
{
    return (-x)*sin(x)+cos(x)-1;
}
double kip(double x1, double x2) // кубический интерполяционный полином
{
    double w, z, nu;
    z = (3 * (f(x1) - f(x2))) / x2 - x1 + fp(x1) + fp(x2);
 
 
    if (x1 < x2)
        w = pow((pow(z, 2) - fp(x1)*fp(x2)), 1 / 2.);
    else w = -pow((pow(z, 2) - fp(x1)*fp(x2)), 1 / 2.);
 
    nu = (fp(x2) + w - z) / (fp(x2) - fp(x2) + 2 * w);
 
    if (nu < 0) xl = x2;
    if (nu >= 0 && nu <= 1) xl = x2 - nu*(x2 - x1);
    if (nu>1) xl = 1;
 
    if (f(xl) >= f(x1)) xl = xl - 1 / 2.*(xl - x1);
    do {
        xl = xl - 1 / 2.*(xl - x1);
    } while (f(xl) <= f(x1));
    return xl;
}
double x1( double h)
{
    double x0, x, x1, x2, xk_p_1, xm, xm_m_1;
    int k = 0, m = 0;
    x0 = a;
    x = x0 + 1;
    if (fp(x0)<0)
    do {
        xk_p_1 = pow(x, k + 1);
        xk_p_1 = pow(x, k) + pow(2, k)*h;
 
        k++;
        m++;
        xm = pow(x, m);
        xm_m_1 = pow(x, m + 1);
    } while (fp(xm_m_1)*fp(xm)<=0);
    else
    do {
        xk_p_1 = pow(x, k + 1);
        xk_p_1 = pow(x, k) - pow(2, k)*h;
    
        k++;
        m++;
        xm = pow(x, m);
        xm_m_1 = pow(x, m + 1);
 
 
    } while (fp(xm_m_1)*fp(xm)<=0);
    x1 = pow(x, m - 1);
    return x1;
}
double x2(double h)
{
    double x0, x, x1, x2, xk_p_1, xm, xm_m_1;
    int k = 0, m = 0;
    x0 = a;
    x = x0 + 1;
    if (fp(x0)<0)
    do {
        xk_p_1 = pow(x, k + 1);
        xk_p_1 = pow(x, k) + pow(2, k)*h;
 
        k++;
        m++;
        xm = pow(x, m);
        xm_m_1 = pow(x, m + 1);
    } while (fp(xm_m_1)*fp(xm) <= 0);
    else
    do {
        xk_p_1 = pow(x, k + 1);
        xk_p_1 = pow(x, k) - pow(2, k)*h;
 
        k++;
        m++;
        xm = pow(x, m);
        xm_m_1 = pow(x, m + 1);
 
 
    } while (fp(xm_m_1)*fp(xm) <= 0);
    x2 = pow(x, m);
    return x2;
}
Есть две идеи:
1. х1 и х2 объединить в одну функцию и возвращать от туда структуру.
2. Менять значение иксов в этой структуре и отправлять в функцию, где считается полином.

Добавлено через 5 часов 42 минуты
Помогите пожалуйста, совсем не понимаю как это сделать

Добавлено через 1 час 53 минуты
А можно ли менять значение x1 и x2, например в меине (xl=x1, x1=x2 и тд) и отправлять их в функцию kip?

Добавлено через 21 час 49 минут
Никто не может помочь? :'(
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2014, 20:58
Привет! Вот еще темы с ответами:

Как задать криволинейный замкнутый контур по точкам методом кубической интерполяции? - C++
В с++ я новичок, полазив по форумам, я нашел некотрые коды, но они либо не работают, либо выдают не то что нужно. Не мог бы мне кто-нибудь...

Найти минимум функции двух переменных - C++
Помогите пожалуйста решить пример из них 18 на фотке

Найти приближенно, с точностью до 0.01, минимум функции на отрезке - C++
Найти приближенно, с точностью до 0.01, минимум функции f(x) = ax2+bx+c на отрезке x1&lt;=x&lt;=x2. Значения x1, x2 и a, b, c ввести как...

Найти минимум элементов массива с помощью рекурсивной функции min1(k) - C++
Есть небольшая задача: Дан массив целых чисел. Найти минимум его элементов с помощью рекурсивной функции min1(k), возвращающей минимум...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.05.2014, 20:58
Ответ Создать тему
Опции темы

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