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

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

Восстановить пароль Регистрация
 
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
30.03.2014, 18:01     Нахождение минимума функции одной переменной методом кубической параболы #1
Допущена ошибка в коде.Предполагаю,что неверно выбран x1 в самой функции метода.Также возможна ошибка в выборе шага(я беру 0.59).
Помогите,буду благодарен.
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
#include<iostream>
#include<math.h>
using namespace std;
double MP3(double x1,double e,double h);
double F(double x);
double Fsh(double x);
int main(void)
{
    double y,z,x,ht,b,a,m,h,x1,x0,e;int i;
    cout<<"vvedite shag h";
    cin>>h;
    cout<<"vvedite pogreshnost` e";
    cin>>e;
    cout<<"vvedite kolvo tochek dlya vivoda m";
    cin>>m;
    a=2;
    b=18;
    ht=(b-a)/m;
    x=a;
    do
    {
        y=F(x);
        cout<<"PRI X ="<<x<< "    Y = " <<y<<endl;
        x=x+ht; 
    }while(x<=b);
    x=a+h;
    do
    {
        if((F(x-h)>F(x))&&F(x+h)>F(x))
        {
            z=MP3(x,e,h);
            cout<<"minimum :"<<z<<"   znachenie funkcii :"<<F(z)<<endl;
        }
        x+=h;
    }while(x<b);
    system("pause");
    return(0);
}
double MP3(double x,double e,double h)
{
    double otvet,r,q,p,y2,y1,z1,zm,d2,x2,d1;
    d1=Fsh(x1);
    if(d1<0)
    {
        h=-h;
    }
    x2=x1+h;
    d2=Fsh(x2);
    if(((d2-d1)/h)>0)
    {
        y1=F(x1);
        y2=F(x2);
    do
    {
        z1=x1-x2;
        p=(d1-d2-2*(y1-y2-d2*z1)/z1)*pow(z1,2);
        q=(d2-d1+3*(y1-y2-d2*z1)/z1)*z1;
        r=d2;
        zm=(-q+pow((pow(q,2)-3*p*r),1/2))/(3*p);
        x1=x2;
        y1=y2;
        d1=d2;
        x2=x2+zm;
        y2=F(x2);
        d2=Fsh(x2);
    }while(fabs(zm)>e);
    }
    else
    {
        cout<<"nachalnoe priblijenie ne vibrano";
        return(0);
    }
    otvet=x2+zm;
    return(otvet);
}
double F(double x)
{
    return(x*cos(x)-x);
}
double Fsh(double x)
{
return(cos(x)-sin(x)*x-1);
}
Добавлено через 1 час 57 минут
Ну или помогите с проверенным источником для решения этой задачи.
Я один нашёл,но там аналогично моей,однако знаки наоборот(в if`ах).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2014, 18:01     Нахождение минимума функции одной переменной методом кубической параболы
Посмотрите здесь:

C++ Непрерывные функции и нахождение минимума на отрезке
C++ Создать титульный лист и построить график кубической параболы
Как задать криволинейный замкнутый контур по точкам методом кубической интерполяции? C++
Как передать значение переменной из одной функции в другую функцию C++
Нахождение минимума функции на интервале способом перебора C++
Найти минимум функции методом кубической параболы C++
Пересечение кубической параболы и окружности C++
Интерполяция функции одной переменной методом Ньютона (Pascal -> C++) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
__Sasha__
Сообщений: n/a
15.05.2014, 10:57     Нахождение минимума функции одной переменной методом кубической параболы #2
На сколько я помню, программа ещё должна делать запрос на ввод локального минимума (число точек задано условием); и для zm ещё должна быть проверка на подкоренное выражение (pow(q,2)-3*p*r >= 0), иначе zm=-q/(3*p).
Yandex
Объявления
15.05.2014, 10:57     Нахождение минимума функции одной переменной методом кубической параболы
Ответ Создать тему
Опции темы

Текущее время: 07:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru