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

Непрерывные функции и нахождение минимума на отрезке - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
AndyHell
 Аватар для AndyHell
5 / 5 / 0
Регистрация: 18.04.2010
Сообщений: 20
28.04.2010, 20:55     Непрерывные функции и нахождение минимума на отрезке #1
Помогите реализовать функцию Solve из данной задачи:

Задается непрерывная функция f(x). Требуется на интервале [a,b] с заданной точностью E найти точку (Xmin, Ymin), в которой f(x) принимает наименьшее значение. Точность задается как номер знака, до которого производятся вычисления и округление результата.

Требования:
Интерфейс реализуются в главной функции Main(). Вычисления реализуются в функции Solve(double a, double b, double eps, int numfunc). Примеры тестовых функций реализуются в функции double FuncTest(int number, double x) с помощью конструкции switch, где number – это номер тестовой функции. Функция FuncTest вызывается из Solve для вычисления значения функции в точке. Функция Solve вызывается из Main после ввода всех необходимых данных. В Main задается номер знака после десятичной точки, а далее исходя из знака, выбирается начальная погрешность E, которая затем может изменяться в функции Solve.
Тестирование:
В данной задаче тестовыми случаями будут функции. Функции должны быть подобраны под каждую ситуацию, исходя из условий задачи.
Исключительные ситуации:
Неправильно заданный интервал. Деление на ноль.
Добавлено через 45 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double FuncTest(int number, double x)
{
    double y;
    switch (number)
    {
        case 1: y=x*x+2*x+3;
            break;
        case 2: y=x*2+10;
            break;
        case 3: y=x*x*x+5;
            break;
        default: y=0;
    }
    return y;
}
Добавлено через 8 часов 43 минуты
Вот что самому удалось сделать:
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
#include <iostream>
#include <cmath>
using namespace std;
double FuncTest(int number, double x)
{
    double y;
    switch (number)
    {
        case 1: y=x*x+2*x+3;
            break;
        case 2: y=x*2+10;
            break;
        case 3: y=x*x*x+5;
            break;
        default: y=0;
    }
    return y;
}
double Solve(double a, double b, double eps, int numfunc)
{
    double ymin;
    double f;
    ymin=FuncTest(numfunc,a);
    do
    {
        f=FuncTest(numfunc,a);
        if (f<ymin) ymin=f;
        a=a+eps;
    }
    while (a<=b);
    return ymin;
}
void main()
{
    char ch;
    short digit;
    double epsilon;
    double x1, x2;
    int num;
    cout <<"Select an option from the list"<<endl;
    cout <<"1:y=x^2+2x+3"<<endl;
    cout <<"2:y=2x+10"<<endl;
    cout <<"3:y=x^3+5"<<endl;
    cout <<"Your choice:";
    cin >> num;
    cout <<"Enter border on the right. a=";
    cin >> x1;
    cout <<"Enter border on the left. b=";
    cin >> x2;
    cout <<"Enter the number of characters to which the calculation should be made:";
    cin >> digit;
    epsilon = 1/powf(10, digit);
    cout <<"The minimum of this function is:";
    cout.precision(digit);
    cout <<Solve(x1,x2,epsilon,num);
    cin.get (ch);
    cin.get (ch);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2010, 20:55     Непрерывные функции и нахождение минимума на отрезке
Посмотрите здесь:

C++ Нахождение локального минимума
Нахождение минимума k в матрице C++
Найти на отрезке [-10;10] абсциссу точки минимума функции. Исправить ошибки C++
Нахождение минимума из двух чисел C++
Нахождение минимума функции на интервале способом перебора C++
C++ Нахождение минимума функции одной переменной методом кубической параболы
Как ускорить данный алгоритм нахождения минимума на отрезке? C++
C++ Нахождение суммы значений функции у=х*х на отрезке 1,5 с шагом 1

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AndyHell
 Аватар для AndyHell
5 / 5 / 0
Регистрация: 18.04.2010
Сообщений: 20
19.05.2010, 15:37  [ТС]     Непрерывные функции и нахождение минимума на отрезке #2
конечный вариант программы получился следующий:
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
#include <iostream>
#include <cmath>
#include <float.h>
using namespace std;
double FuncTest(int number, double x)
{
    double y;
    switch (number)
    {
        case 1: y=x*x+2*x+3;
            break;
        case 2: y=x*2+10;
            break;
        case 3: y=x*x*x+5;
            break;
        default: y=0;
    }
    return y;
}
void Solve(double a, double b, double eps, int numfunc, double& ymin, double& xmin)
{
    ymin=FLT_MAX; 
    xmin=a;
    double f;
    double step=eps;
    while (fabs(FuncTest(numfunc,xmin-step/2)-FuncTest(numfunc,xmin+step/2))>eps)
    {
        do
        {
        f=FuncTest(numfunc,a);
        if (f<ymin) { ymin=f; xmin=a;}
        a=a+step;
        }
        while (a<=b);
    step=step/10;
    }
}
void main()
{
    char ch;
    short digit;
    double epsilon;
    double x1, x2, x, y;
    int num;
    cout <<"Select an option from the list"<<endl;
    cout <<"1:y=x^2+2x+3"<<endl;
    cout <<"2:y=2x+10"<<endl;
    cout <<"3:y=x^3+5"<<endl;
    cout <<"Your choice:";
    cin >> num;
m1: cout <<"Enter border on the right. a=";
    cin >> x1;
    cout <<"Enter border on the left. b=";
    cin >> x2;
    if (x2<x1) 
    {
        cout <<"Wrong interval"<<endl;
        goto m1;
    }
    cout <<"Enter the number of characters to which the calculation should be made:";
    cin >> digit;
    epsilon = 1/powf(10, digit);
    cout <<"The minimum of this function is:";
    cout.precision(digit);
    Solve(x1,x2,epsilon,num,y,x);
    cout <<"["<<x<<";"<<y<<"]";
    cin.get (ch);
    cin.get (ch);
}
Yandex
Объявления
19.05.2010, 15:37     Непрерывные функции и нахождение минимума на отрезке
Ответ Создать тему
Опции темы

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