0 / 0 / 0
Регистрация: 01.06.2017
Сообщений: 18
1

Минимизация двумерным методом Ньютона Функции Химмельблау и Розенброка

16.09.2017, 21:29. Показов 6132. Ответов 22

Author24 — интернет-сервис помощи студентам
Доброго дня суток! Очень нужна ваша помощь! Необходимо минимизировать методом Ньютона функции Розенброка и Химмельблау , т.е.
Минимизация двумерным методом Ньютона Функции Химмельблау и Розенброка


Написал код,но для этих двух функций он не работает. Как его оптимизировать под эти функции? спасибо заранее4

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 <math.h>
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <string.h>
 
using namespace std;
 
 
int main()
 
{
    const int n = 2;            
    double x[n];                
    const int shag = 40;        
    int iter;                    
 
       int i, j, k;                
    double tmp;                    
    double fvec[n];                
    double p[n];                
    double fmatrix[n][n];            
 
    double e;               std::cout << "Vvedite e" << std::endl;
    std::cin >> e;
#define stream cout
 
    x[0] = 10;
    x[1] = 30;
 
 
for (iter = 1; iter <= shag; iter++) {
        stream << "\n " << iter << " iteraciya";
 
stream << "\n\nInfo: Vektor x:";
for (i = 0; i < n; i++)
stream << "\nx[" << i << "] = " << x[i]; 
 
 
 
 
fvec[0] = 2 * x[0];    
fvec[1] = 2 * x[1];    
 
tmp = 0.;
for (i = 0; i < n; i++) {
tmp += fabs(fvec[i]);
        }
if (tmp <= e)
break;
 
 
fmatrix[0][0] = 2;        
fmatrix[0][1] = 0;    
fmatrix[1][0] = 0;    
fmatrix[1][1] = 2;    
 
stream << "\n\nInfo: Vectornaya matrica x:\n";
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
stream << fmatrix[i][j] << "\t";
            }
stream << "\n";
        }
 
        for (i = 0; i < n; i++)
            p[i] = -fvec[i];
            for (i = 0; i < n - 1; i++) {
            tmp = fmatrix[i][i];
 
            if (tmp == 0.) {
                stream << "Error: Nulevoy element v matritse\n";
    return 0;
            }
 
 
for (j = i + 1; j < n; j++) {
p[j] -= p[i] / tmp;
for (k = n - 1; k >= i; k--) {
                    fmatrix[j][k] -= fmatrix[i][k] * fmatrix[j][i] / tmp;
                }
            }
        }   
for (i = n - 1; i >= 0; i--) {
tmp = 0;
for (j = i + 1; j < n; j++) {
tmp += fmatrix[i][j] * p[j];
            }
p[i] = (p[i] - tmp) / fmatrix[i][i];
        }
 
 
for (i = 0; i < n; i++) {
x[i] += p[i];
        }
    }
if (iter < shag) {
        stream << "\n\n Minimum \n";
        stream << "(" << x[0] << ", " << x[1] << ")\n";
        return 0;
    }
    stream << "\nError: Maksimalnoe chislo iteracii\n";
    return 0;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2017, 21:29
Ответы с готовыми решениями:

Минимизация Методом Ньютона уравнения с двумя переменными
Всем добрый день... я тут новичок...очень нужна ваша помощь. Программу для уравнения где одна...

Нахождения максимума функции методом Ньютона
Мне надо на с++ написать код для нахождения максимума функции методом ньютона. Код бы я написать...

Как найти максимум функции методом Ньютона?
кто может помочь? Я написал программу для поиска корней а вот для поиска максимума на отрезке не...

Ошибка в программе интерполяция функции методом Ньютона
выдает ошибку, не пойму в чем проблема Unit1.cpp(12): E2313 Constant expression required ...

22
0 / 0 / 0
Регистрация: 01.06.2017
Сообщений: 18
22.09.2017, 18:19  [ТС] 21
Author24 — интернет-сервис помощи студентам
оно просто добавляет больше итераций...
а должно к примеру на 3 итерации для е=0.1 быть просто 0.9000 а для е=0.001 0.9636 к примеру

Добавлено через 31 минуту
оно просто добавляет больше итераций...
а должно к примеру на 3 итерации для е=0.1 быть просто 0.9000 а для е=0.001 0.9636 к примеру
0
0 / 0 / 0
Регистрация: 01.06.2017
Сообщений: 18
22.09.2017, 20:09  [ТС] 22
я понял. смотри...у нужного xmin (если сравнивать эти точности) точность должна быть до определенного кол-ва знаков
как на рисунке точность достигнута 0.01 и xmin=2.996 , а для 0.001 xmin= 2.9998 (более точное число как бы)
Миниатюры
Минимизация двумерным методом Ньютона Функции Химмельблау и Розенброка   Минимизация двумерным методом Ньютона Функции Химмельблау и Розенброка  
0
0 / 0 / 0
Регистрация: 01.06.2017
Сообщений: 18
22.09.2017, 23:13  [ТС] 23
woldemas, я понял. смотри...у нужного xmin (если сравнивать эти точности) точность должна быть до определенного кол-ва знаков
как на рисунке точность достигнута 0.01 и xmin=2.996 , а для 0.001 xmin= 2.9998 (более точное число как бы)
Миниатюры
Минимизация двумерным методом Ньютона Функции Химмельблау и Розенброка   Минимизация двумерным методом Ньютона Функции Химмельблау и Розенброка  
0
22.09.2017, 23:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2017, 23:13
Помогаю со студенческими работами здесь

Интерполяция функции одной переменной методом Ньютона (Pascal -> C++)
program interpol; uses crt,graph; const MAXCOUNT=30; type

Минимизация функции методом ломаных
Доброго времени суток! Помогите, пожалуйста, с программой. Мне нужно реализовать метод ломаных....

Минимизация функции методом ломаных
Здравствуйте! Помогите, пожалуйста, реализовать метод ломаных нахождения минимума...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru