Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
CmrdCat
0 / 0 / 0
Регистрация: 16.11.2016
Сообщений: 1
#1

Не могу разобраться с методом минимальных невязок. C++

16.11.2016, 20:04. Просмотров 510. Ответов 1
Метки нет (Все метки)

Не понимаю C++. Искал решение этого задания (решение СЛАУ методом минимальных невязок). Нашёл это - Решение СЛАУ методом минимальных невязок, попробовал, не получается, ломаю голову. Знаю что надо учить все дела, но время нет, а сдать надо. Если кому не трудно прошу помощи. Вот что получилось у меня ( не могу сделать main(), я понимаю что нужно сделать, но не понимаю как.)
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
#include <math.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
using namespace std;
 
int MatrVekt (int N,double **M, double *V, double *R)
{
     for(int i=0;i<N;i++)
     {
             R[i]=0;
             for(int j=0;j<N;j++)
             R[i]+=M[i][j]*V[j];
     }
}
 
 
int MinNev(int N, double **A, double *F, double *X, double eps)
 
{
int count=0;
 
double *R = new double [N];
double *Delta = new double [N];
double *TempX = new double [N];
double maxi=0.0, Tau=0.0, TempTau=0.0;
for(int i=0; i<N; i++)
TempX[i]=0;
}
 
 
{
int N = 4, count = 0;
double **A = new double* [N];
       for (int i = 0; i < N; i++)
           A[i] = new double;
double *R = new double [N];
double *F = new double [N];
double *Delta = new double [N];
double *TempX = new double [N];
double *X = new double [N];
double Tau=0.0, TempTau=0.0, maxi = 0.0, eps = 0.05;
 
do
{
MatrVekt(N,A,TempX,R);
for(int i=0; i<N; i++)
{
Delta[i]=R[i]-F[i];
}
 
MatrVekt(N,A,Delta,R);
 
for (int i=0;i<N;i++)
    {
     Tau+=R[i]*Delta[i];
     TempTau+=R[i]*R[i];
    }
Tau=Tau/TempTau;
 
for (int i=0;i<N;i++)
X[i]=TempX[i]-Tau*Delta[i];  
 
maxi = fabs(X[0]-TempX[0]);
for(int i=0;i<N;i++)
        {
         if(fabs(X[i]-TempX[i])>maxi)
         maxi=fabs(X[i]-TempX[i]);
         TempX[i]=X[i];
        }
 count++;
}
while (maxi>=eps);
delete[] R;
delete[] Delta;
delete[] TempX;
return count;
 
 
int main ()
 
{
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2016, 20:04
Ответы с готовыми решениями:

Не могу разобраться с LU методом. (C++)
Программка выполняет решение СЛАУ двумя методами, методом вращения и методом...

Транспортная задача, построить оптимальный план методом минимальных элементов
Дана задача построить оптимальный план методом минимальных элементов. код...

'разобраться' с уравнением методом Ньютона
Подскажите пожалуйста план действий, как это делать. Ибо в заданиях подобного...

не могу разобраться..
Вывести на экран все натуральные числа из диапазона от A до B, в записи которых...

Не могу разобраться с С++
Всем Привет, так я кодеру в Делфи. Не давно нашел что мне нужно но оy написан...

1
afront
1049 / 995 / 752
Регистрация: 29.02.2016
Сообщений: 3,187
16.11.2016, 21:44 #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
70
71
72
73
74
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
void MatrVekt(int N, double **M, double *V, double *R)
//N- размерность, M- матрица, V- вектор, R- результат
{
for(int i=0; i<N; i++)
        {
        R[i]=0;
        for(int j=0; j<N; j++)
              R[i]+= M[i][j]*V[j];
        }
}
int MinNev(int N, double **A, double *F, double *X, double eps)
    //N- размерность, A- матрица, F- вектор свободных членов, X-вектор результат eps- точность
{
    int count=0;//  количество итераций
    double *R = new double [N];
    double *Delta = new double [N];
    double *TempX = new double[N];
    double maxi=0.0, Tau=0.0, TempTau=0.0;
    for (int i=0; i<N; i++)
        TempX[i]=0;//первое приближение задаём нулевым
    do
    {
        MatrVekt(N, A, TempX, R);
        for(int i=0; i<N; i++)
        {
            Delta[i]=R[i]-F[i];//Вектор невязок
        }
        MatrVekt(N, A, Delta, R);
        Tau=0.0; 
        TempTau=0.0;
        for(int i=0; i<N; i++)
        {
            Tau+=R[i]*Delta[i];
            TempTau+=R[i]*R[i];
        } 
        Tau=Tau/TempTau; 
        for(int i=0; i<N; i++)
            X[i]=TempX[i]-Tau*Delta[i];
        maxi = abs(X[0] - TempX[0]);
        for(int i=0; i<N; i++)
        {
            if(abs(X[i]-TempX[i])>maxi)
                maxi=abs(X[i]-TempX[i]);
            TempX[i]=X[i];
        }
        count++;
    }
    while (maxi>=eps);
    delete[] R;
    delete[] Delta;
    delete[] TempX;
    return count;
}
int main()
{
    int N=3;
    double **A;
    A = new double *[N];
    for(int i = 0; i < N; ++i)
    A[i]= new double [N];
 
    A[0][0]= 2;A[0][1]= 4;A[0][2]= -6;
    A[1][0]= 6;A[1][1]= -4;A[1][2]= 2;
    A[2][0]= 4;A[2][1]= 2;A[2][2]= 6;
    double F[3]={ 4, 4, 8 };
    double R[3];
     MatrVekt(N,A,F,R);
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2016, 21:44

не могу разобраться с задачей
нужно создать динамический двумерный массив ,заполнить случайными числами и...

не могу разобраться с typedef
помогите разобраться typedef задает синоним типа только? например: ...

Не могу разобраться с qmake
С помощью QtDesigner создал 2 файла gotocelldialog.ui и main.cpp в папке...


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

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

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