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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
AndyHell
5 / 5 / 0
Регистрация: 18.04.2010
Сообщений: 20
#1

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

28.04.2010, 20:55. Просмотров 1420. Ответов 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     Непрерывные функции и нахождение минимума на отрезке
Посмотрите здесь:

Найти на отрезке [-10;10] абсциссу точки минимума функции. Исправить ошибки - C++
Приветствую всех. Такая проблема: Делаю лабораторную работу, нужно отобразить результат работы программы в Visual C++ 2005 она...

Нахождение минимума функции на интервале способом перебора - C++
Помогите реализовать программу, которая позволяет найти минимум некоторой функции на заданном интервале. Алгоритм нахождения минимума...

Нахождение минимума функции методом половинного деления - C++
Есть программа нахождения корня методом половинного деления. Как ее переделать, чтобы она находила минимум функции и выводила график не...

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

Нахождение суммы значений функции у=х*х на отрезке 1,5 с шагом 1 - C++
помогите с задачей написать программу нахождения суммы значений функции у=х*х на отрезке 1,5 с шагом 1. срочно надо !!

Как ускорить данный алгоритм нахождения минимума на отрезке? - C++
Здравствуйте, подскажите, пожалуйста, почему решение не проходит по времени на нескольких тестах? Как исправить это? Рассмотрим...

Нахождение минимума k в матрице - C++
подскажите пожалуйста какой код будет для нахождения минимума k в матрице

Нахождение локального минимума - C++
Здравствуйте!!!! Напишите программу или алгоритм для нахождения локального минимума. Заранее спасибо Добавлено через 14 минут я...

Нахождение минимума из двух чисел - C++
Делая лабораторную с условием: Найти минимум из двух чисел х и у, написала такого вида программу: #include &lt;iostream.h&gt; #include...

Рекурсия, нахождение минимума в массиве - C++
В общем, в названии темы само задание. int min(int a,int n) { int minim=a; if(minim&gt;a) {minim=a; return min(a,n-1);} else...

Нахождение максимума и минимума (вставка ассемблера) - C++
Не работает ассемблерная вставка. Как решить проблему? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;time.h&gt; #include...

Вычислить 18 значений функции ax^2+bx+c на отрезке [e,f], сохранить их в массиве Y и определить, имеет ли уравнение ax^2+bx+c=0 на отрезке [e,f] по крайней мере хотя бы один корень. - C++
Нужна срочная помощь в написании вроде бы несложной задачи на массив, помогите пожалуйста, вот условие задачки: Вычислить 18 значений...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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);
}
Ответ Создать тему
Опции темы

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