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

Решение СЛАУ методом минимальных невязок - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевести строчку в _int64 http://www.cyberforum.ru/cpp-beginners/thread571207.html
есть массив char, но может быть и короче запись. концом массива есть символ '\0'. строка имеет вид 01000100111101 и тд. вот мне эту строчку нужно записать как число типа _int 64. написал функцию, но почему то выводит она только либо 0 либо 1. int flag=1; int i=0; __int64 sym=0; while(flag) { if (str=='1') {sym << 1; sym++;} if (str=='0') {sym << 1;} ...
C++ Не читается входной файл using namespace std; int main () { freopen("input.txt", "r", stdin); string s, a; int i = 0, n = 0; getline(cin, s); http://www.cyberforum.ru/cpp-beginners/thread571184.html
MultiView na Ipad/Iphone C++
Как два View прикрутить в одно окно? Ipad/IPhone. Допустим пусть будет NavigationController и View-Based
C++ Сочините пример как можно проще на сдвиг
Сочините пример как можно проще на сдвиг. Сам пользоваться умею, не могу только придумать новичковую задачу на эти операторы и как их проиллюстрировать.
C++ Перевод из Delphi в C++ http://www.cyberforum.ru/cpp-beginners/thread571133.html
Есть код на Делфи помогите пожалуйста перевести его в С++Bulder. ...... const MapFName = 'D:\MIKHAILP\DOCUM\Projects\ISTC_robot \Pult\v04_1\Map\RTC_Dvor\RTC_Dvor.gst'; //интересует в принципе эта строчка, вернее ее объявление в С++ .... procedure TForm1.FormCreate(Sender: TObject); begin Map1.GeoSet := MapFName;
C++ С++ и Matlab Часть дипломного проекта решил реализовать по средствам совмещения Билдера и Matlaba. И возникла ошибка с которой никак не удается совладать. В этом участке кода , идет формирование матрицы , и отправка команды. Окно матлаба инициализируется , но не воспринимает ни команду , ни отправляемый массив. if(mclInitializeApplication(NULL,0)) //инициализация мсл ... подробнее

Показать сообщение отдельно
DUKE009
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 3
12.05.2012, 12:40     Решение СЛАУ методом минимальных невязок
Всем привет!
Помогите разобраться с данным методом, алгоритм я читал здесь:
http://www.physchem.chimfak.rsu.ru/S...ys_lin_eq.html

уже успел реализовать
функцию перемножения матрицы на вектор:
C++
1
2
3
4
5
6
7
8
9
10
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];
        }
}
и часть алгоритма:

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
void MinNev(int N, double **A, double *F, double *X, float eps)
//N- размерность, A- матрица, F- вектор свободных членов, X-вектор результат
{
double *R = new double [N];
double *Delta = new double [N];
double *TempX = new double[N];
double maxi=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]=F[i]-R[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]);
    X[i] = TempX[i];
    } 
}
while (maxi>=eps);
 
delete[] R;
delete[] Delta;
delete[] TempX;
}
Из теории мне не совсем ясно с параметром http://www.cyberforum.ru/cgi-bin/latex.cgi?\tau. Это тоже вектор? Получается чтобы его вычислить, нужно еще дополнительно написать функцию для векторного произведения?

Добавлено через 23 часа 30 минут
Немного посидел, и пришёл к такой реализации. Если не сложно, помогите найти ошибку. Суть в том, что при запуске функция уходит в бесконечный цикл. Условие выхода вроде реализовано верно. Короче не знаю в чём дело..
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
void MinNev(int N, double **A, double *F, double *X, float eps)
//N- размерность, A- матрица, F- вектор свободных членов, X-вектор результат
{
    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]=F[i]-R[i];//Вектор невязок
    }
MatrVekt(N, A, Delta, R);
for(int i=0; i<N; i++)
    {
    Tau+=-(R[i]*Delta[i])/(R[i]*R[i]);
    } 
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]);
    }
count++;
}
while (maxi>=eps);
 printf("%d",count);
delete[] R;
delete[] Delta;
delete[] TempX;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru