Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Fr0ll
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 3
1

Дискретный метод Ньютона для поиска минимума(перевод программного кода из Java в MATLAB)

10.12.2013, 23:07. Просмотров 1219. Ответов 2
Метки нет (Все метки)

Всем привет. Попытался сделать при помощи двух M-file`ов с функциями и скрипта с циклами, но внятного результата не достиг. Если возможно- помогите =)

Java
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
package org.mtuci.mm.zero_max_min;
 
// ПРИМЕНЕНИЕ ДИСКРЕТНОГО МЕТОДА НЬЮТОНА ДЛЯ ПОИСКА МИНИМУМА
public class Bond 
{
  static final double e2 = 14.4;
  static final double v0 = 1090;
  static final double r0 = 0.33;
  
  public static void main(String argv[]) 
  {
    double del = 1e-12;
    double r   = 3;
    double dr  = 0.1;
    
    int n = 200;
    r = secant2(n, del, r, dr);
    
    System.out.println("The bond length is " + r + " angstroms");
    System.out.println("The value is: " + g(r));
  }
 
// Method to carry out the secant search for the
// minimum of g(x) via the root of f(x)=-dg(x)/dx=0.
  public static double secant2(int n, double del, double x, double dx) 
  {
    int     k = 0;
    double x1 = x+dx;
    double g0 = g(x);
    double g1 = g(x1);
    
    if (g1 > g0)
        x1 = x-dx;
    
    while ((Math.abs(dx) > del) && (k < n)) 
    {
      double d = f(x1) - f(x);
      dx = -(x1 - x) * f(x1) / d;
      x  = x1;
      x1 += dx;
      k++;
    }
    
    if (k == n)
        System.out.println("Convergence not found after " + n + " iterations");
    
    return x1;
  }
 
  // Method to provide function g(x)=-e2/x+v0*exp(-x/r0).
  public static double g(double x) 
  {
      return -e2 / x + v0 * Math.exp(-x / r0);
  }
 
  // Method to provide function f(x)=-dg(x)/dx.
  public static double f(double x) 
  {
    return -e2 / (x * x) + v0 * Math.exp(-x / r0) / r0;
  }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2013, 23:07
Ответы с готовыми решениями:

Перевод программного кода с C++ на Java
Нужно перевести данный код на Java #include &lt;iostream&gt; using namespace std; // Вывод системы...

Метод Ньютона для нахождения максимума/минимума.
Уважаемые форумчане помогите сделать задание в MathCAD. так как я вообще не знаю как в нем работать...

Модифицированный метод Ньютона для нахожения минимума функции
Реализован метод Ньютона для нахождения минимума функции. Для заданой функции метод работает, но...

Перевод кода бинарного поиска с С++ на Java
Добрый вечер! Переписываю код с С++ на Java. Не могу помять как как устроен бинарный поиск по...

Метод для поиска локального минимума в классе Array
Здравствуйте. Такая задача: Дан массив размера N. Найти номер его первого локального минимума...

2
Fr0ll
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 3
12.12.2013, 11:48  [ТС] 2
Вот код в MATLAB. Как говорил выше-вразумительного результата не могу получить...

Matlab M
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
clc;
clear;
 
e2=14.4;
v0=1090;
r0=0.33;
 
% Основное условие:
g=@(x) -e2/x + v0 *exp(-x/r0);
f=@(x) -dg(x) / dx;
 
 
del = 1e-12;
r   = 3;
dr  = 0.1;
 
n = 200;
 
disp(['The bond length is: ', num2str(r)  ' angstroms']);
disp(['The value is: ', num2str(g(r))]);
 
 
% Method to carry out the secant search for the
% minimum of g(x) via the root of f(x)=-dg(x)/dx=0
 
k  = 0;
x1 = x+dx;
g0 = g(x);
g1 = g(x1);
 
 
if (g1 > g0)
    x1 = x-dx;
end
 
while abs(dx) > del %&& (k < n) 
    d  = f(x1) - f(x);
    dx = -(x1 - x) * f(x1) / d;
    x  = x1;
    x1 = x1+dx;
    k  = k+1;
end
 
if k == n
    disp(['Convergence not found after ', num2str(n) ' iterations']);
end   
%Method to provide function g(x)=-e2/x+v0*exp(-x/r0).
Добавлено через 8 минут
Цитата Сообщение от Fr0ll Посмотреть сообщение
Вот код в MATLAB. Как говорил выше-вразумительного результата не могу получить...

Matlab M
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
clc;
clear;
 
e2=14.4;
v0=1090;
r0=0.33;
 
% Основное условие:
g=@(x) -e2/x + v0 *exp(-x/r0);
f=@(x) -dg(x) / dx;
 
 
del = 1e-12;
r   = 3;
dr  = 0.1;
 
n = 200;
 
disp(['The bond length is: ', num2str(r)  ' angstroms']);
disp(['The value is: ', num2str(g(r))]);
 
 
% Method to carry out the secant search for the
% minimum of g(x) via the root of f(x)=-dg(x)/dx=0
 
k  = 0;
x1 = x+dx;
g0 = g(x);
g1 = g(x1);
 
 
if (g1 > g0)
    x1 = x-dx;
end
 
while abs(dx) > del %&& (k < n) 
    d  = f(x1) - f(x);
    dx = -(x1 - x) * f(x1) / d;
    x  = x1;
    x1 = x1+dx;
    k  = k+1;
end
 
if k == n
    disp(['Convergence not found after ', num2str(n) ' iterations']);
end   
%Method to provide function g(x)=-e2/x+v0*exp(-x/r0).
Часть закоментировал в 36 строке потому, что не знаю как в матлабе эта логическая операция делается +
не разобрался как находиться
16. int n = 200;
17. r = secant2(n, del, r, dr);
в коде на Java
0
Fr0ll
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 3
14.12.2013, 18:39  [ТС] 3
Неужели ни кто не может помочь ?! возможно я и ошбаюсь, но вроде как подправить мой код надо самую малость..
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2013, 18:39

Нахождение минимума функции. Метод Ньютона
Помогите пожалуйста решить задачу, о Умные Люди!!! Задача: f(x;y)=e^(y+x)-x^2+y Методом Ньютона (с...

Доработка кода поиска минимума и максимума. Программа зацикливается.
Вобщем Вот задание: Разработать и реализовать алгоритм, который будет искать 3-й минимум и 4-й...

Как записать код поиска минимума, максимума через метод?
Подскажите пожалуйста, как данный код записать через метод Console.WriteLine(&quot;введите 3 числа&quot;);...


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

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

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