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

Метод ньютона для СНУ - C++

Восстановить пароль Регистрация
 
nevod
0 / 0 / 0
Регистрация: 04.02.2010
Сообщений: 16
09.02.2010, 00:05     Метод ньютона для СНУ #1
Привет всем!!!)) Помогите пожалуста перевести программу з матлаба на С++. Вот исходник матлаба и функции(обратна, транспонирование) которые уже есть. Помогите пожалуста завтра здача курсовой, а у меня нечего не готово!!(((

матлабовська прога

function Z=F(X) function W=JF(X)
x=X(l);y=XB); x=X(1); y=X(2);
Z=zeros(l,2); W=[2*x-2 -1;2*x 8*y] ;
Z(1) = x^2 - 2*x - y + 0.5;
Z(2) = x^2 + 4y^2 - 4;
function [Р, iter,err] =newdim(F,JF,P,delta,epsilon,max)
% Вход - F - система, записанная в форме М-файла F.m
% - JF - матрица Якоби F, записанная в форме М-файла JF.M
% - Р - начальное приближение к решению
% - delta - допустимое отклонение для Р
% - epsilon - допустимое отклонение для F(P)
% - maxl - максимальное число итераций
% Выход - Р - приближенное решение
% - iter - число потребовавшихся итераций
% - err - ошибка вычисления Р '
Y=feval(F,P);
for k=1:max
J=feval(JF,P);
Q=P-(J\Y')';
Z=feval(F,Q);
err=norm(Q-P);
relerr=err/(norm(Q)+eps);
P=Q;
Y=Z;
iter=k;
if (err<delta)|(relerr<delta)|(abs(Y)<epsilon)
break
end
end

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
//----------------------begin obernena-----------------------
void obrat(double **a)
{
    double **d, vrem, max, tryam;
    int i, j, k, *p, jmax, temp;
 
    d = (double **)malloc(sizeof(double) * 2*n); //videlenie dlinnoi stroki
    for (i=0; i < n; i++)
        d[i] = (double *)malloc(sizeof(double) * n);
 
    for (i=0; i < n; i++) {
        for (j=0; j < n; j++)
            d[i][j] = a[i][j];
        for (j=n; j < 2*n; j++) {
            if (j == n+i)
                d[i][j] = 1;
            else
                d[i][j] = 0;
        }
    }
 
    p = (int *)malloc(sizeof(int) * n);
    for (j=0; j < n; j++)
        p[j] = j;
 
    //k-nomer pervogo uravn
    for (k=0; k < n-1; k++) {
        max = fabs(d[k][k]);
        jmax=j;
        for (j=k; j < n; j++)
            if (fabs(d[k][j]) > max) {
                max = fabs(d[k][j]);
                jmax = j;
                temp = p[k];
                p[k] = p[jmax];
                p[jmax] = temp;
            }
            //menyaem mestami stolbiki
            for (i=k; i < n; i++) {
                tryam = d[i][k]; //tryam - vrem peremennaya
                d[i][k] = d[i][jmax];
                d[i][jmax] = tryam;
            }
            for (i=k+1; i < n; i++) {
                vrem = d[i][k] / d[k][k];
                for (j=k; j < 2*n; j++)
                    d[i][j] -= vrem*d[i][j];
            }
    }
    for (k=n-1; k > 0; k--) {
        for (i=k-1; i >= 0; i--) {
            vrem = d[i][k] / d[k][k];
            for (j=k; j < 2*n; j++)
                d[i][j] = d[i][j] - vrem*d[i][j];
        }
    }
    for (i=0; i < n; i++) {
        for (j=n; j < 2*n; j++)
            d[i][j] = d[i][j] / d[i][i];
        d[i][i] = 1;
    }
    for (i=0; i < n; i++) {
        for (j=n; j < 2*n; j++)
            printf("%f ", d[p[i]][j]);
        printf("\n");
    }
}
 
//------------------- end obernena-----------------

транспонованая!!!

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
//------------------- begin Transposition----------
 
void  Transposition ( int n,  double a[][2] ) {
    double tmp;
 
  for ( int i=0; i < n -1 ; i++ )      // äî ïðåäïîñëåäГ*ГҐГ© ñòðîêè
    for ( int j = i + 1; j < n; j++ )  // Г± ýëåìåГ*ГІГ* Г§Г* ГЈГ«Г*ГўГ*îé äèГ*ГЈГ®Г*Г*ëüþ
      {
        tmp = a [ i ][ j ];
        a [ i ][ j ] =  a [ j ][ i ];
        a [ j ][ i ] = tmp;
      }
 
 
  int n = 3, i, j;
  double  a[ 2 ][ 2 ] = {  };
 
  Transposition ( 2, a );
 
  cout << "\n\t     matrix A: \n";
  for ( i=0; i < n; i++ )
   {
     for ( j=0; j < n; j++ )
       cout << '\t' << a[ i ][ j ];
     cout << '\n';
   }
} 
//------------------the end transposition------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2010, 00:05     Метод ньютона для СНУ
Посмотрите здесь:

C++ метод Ньютона для системы двух уравнений
C++ Метод Ньютона
Метод Ньютона и итераций для нелинейного уравнения C++
Метод Ньютона C++
C++ Написать решение СНУ Методом Ньютона
метод Ньютона для решения системы нелинейных уравнений C++
C++ метод Ньютона
C++ метод Ньютона для решения нелинейных уравнений: узнать количество итераций

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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