Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
9 / 6 / 5
Регистрация: 12.05.2011
Сообщений: 282

Перевод из Pascal в Java. Решение СНАУ методом Ньютона

15.03.2022, 18:45. Показов 542. Ответов 0

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Имеется код на Pascal, перевел его на Java. Но решение не совпадает и уходит в бесконечный цикл, где-то видимо допустил ошибку. По возможности подскажите где ошибка

Метод Ньютона для СНАУ на Pascal:
Pascal
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
const
  n_max = 2; //число уравнений
 
type
  TVec = array[1..n_max] of double;
  TMat = array[1..n_max,1..n_max] of double;
 
//система уравнений
procedure F(n: integer; x: TVec; var y: TVec);
begin
  y[1]:=x[1]-exp(-x[2]);
  y[2]:=x[2]-exp(x[1]);
end;
 
//вычисление обратной матрицы Якоби
procedure G(n: integer; x: TVec; var a: TMat);
var
  det: double;
  i,j: integer;
begin
  a[1,1]:=1; a[1,2]:=-exp(-x[2]);
  a[2,1]:=exp(x[1]); a[2,2]:=1;
  det:=1+exp(x[1])*exp(-x[2]);
  for i:=1 to n do
    for j:=1 to n do
      a[i,j]:=a[i,j]/det;
end;
 
//процедура решения системы методом Ньютона
procedure Newts(n: integer; var x: TVec; eps: double; var k: integer);
var
  i,j: integer;
  x0,y: TVec;
  a: TMat;
  cod: boolean;
begin
  k:=0;
  repeat
    for i:=1 to n do x0[i]:=x[i];
    F(n,x,y); G(n,x,a);
    for i:=1 to n do
      for j:=1 to n do
        x[i]:=x[i]-a[i,j]*y[j];
    cod:=true;
    for i:=1 to n do
      if abs(x[i]-x0[i]) > eps then cod:=false;
    k:=k+1;
    Write('Iteraciya: ');
    Write(k);
    Write(' x1=');
    Write(x[1]);
    Write(' x2=');
    Writeln(x[2]);
  until cod;
end;
 
var
  x: TVec;
  n,k: integer;
  eps: double;
begin
  n:=n_max; //число уравнений
  eps:=0.001; //точность
  x[1]:=0.5; x[2]:=0.5; //начальное приближение
  Newts(n,x,eps,k); //решение системы
  Writeln('Решение системы:');  
  Write('x1 = ');
  Writeln(x[1]);
   Write('x2 = ');
  Writeln(x[2]);
   Write('Число итераций: ');
  Writeln(k);  
end.
Метод Ньютона для СНАУ на Java (с ошибкой):
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
62
63
64
65
66
67
68
69
public class Main {
 
    public static int n_max = 2;
 
    public static double[] TVec = new double[n_max];
    public static double[][] TMat = new double[n_max][n_max];
    private static int k;
 
 
    public static void F(double[] x, double[] y){
        y[0]=x[0]-Math.exp(-x[1]);
        y[1]=x[1]-Math.exp(x[0]);
    }
 
    public static void G(int n, double[] x, double[][] a){
        double det;
        a[0][0]=1;
        a[0][1]=-Math.exp(-x[1]);
        a[1][0]=Math.exp(x[0]);
        a[1][1]=1;
        det=1+Math.exp(x[0])*Math.exp(-x[1]);
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j < n-1; j++) {
                a[i][j]=a[i][j]/det;
            }
        }
    }
 
    public static void Newts(int n, double eps, double[] x){
        double[] x0 = TVec;
        double[] y = TVec;
        double[][] a = TMat;
        boolean cod;
 
        k=0;
        System.out.println("Итерация        х1              х2");
        do {
            if (n - 1 >= 0) System.arraycopy(x, 0, x0, 0, n - 1);
            F(x,y);
            G(n,x,a);
            for (int i = 0; i < n-1; i++) {
                for (int j = 0; j < n - 1; j++) {
                    x[i]=x[i] - a[i][j]*y[j];
                }
            }
            cod=true;
            for (int i = 0; i < n-1; i++) {
                if (Math.abs(x[i] - x0[i]) > eps) {
                    cod = false;
                    break;
                }
            }
            k=k + 1;
            System.out.println( k+"         "+x[0]+"     "+x[1]);
        } while (cod);
    }
 
 
    public static void main(String[] args) {
        double[] x = TVec;
        int n=n_max; //число уравнений
        double eps=0.001; //точность
        x[0]=0.5; x[1]=0.5; //начальное приближение
        Newts(n,eps,x); //решение системы
        System.out.println("Решение системы:");
        System.out.println("x1 = "+ x[0]+ "x2"+x[1]);
        System.out.println("Число итераций: "+ k);
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.03.2022, 18:45
Ответы с готовыми решениями:

Решение СНАУ методом Ньютона. java
Привет. Ребята, помогите пожалуйста, никак не могу правильно дописать программу. Программа должна решать системы нелинейных...

Решение СНАУ методом Ньютона
Здравствуйте! Необходимо составить программу вычисления системы нелинейных алгебраических уравнений методом Ньютона в среде матлаб....

Решение СНАУ методом Ньютона
Здравствуйте уважаемые эксперты. Вообщем задание написано в теме. У меня сразу же возникли вопросы по его выполнению:( Как ввести сами...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.03.2022, 18:45
Помогаю со студенческими работами здесь

Решение СНАУ методом Ньютона
помогите, пожалуйста, решить систему нелинейных уравнений методом ньютона через excel, зачет не ставят:wall::gbye: sin(x-0,5y) - x +...

Решение СНАУ методом Ньютона
РЕбят, такое дело, есть у меня задание, решение СНАУ методом Ньютона. Даже не знаю с чего начать, может поможете хотяб пример...

Решение СНАУ методом Ньютона
Нужно написать программу для решения систем нелинейных алгебраических уравнений методом Ньютона. Наибольшая сложность заключается в том что...

Решение СНАУ метод Ньютона
есть файл в excel, там таблица, её нужно сделать в программе. 1. в программе вписать начальные иксы и эпсилон (10^-9) 2. при нажатии...

Не работает код решения СНАУ методом Ньютона
Помогите понять в чем ошибка! Решение СНАУ методом ньютона. Если меняется Е, то вообще не выходит решение. При данном Е, решение...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru