Ошибка Вычисления Главного Собственного Вектора. С++.

Тема в разделе "C/C++/C#", создана пользователем Kro0sh, 24 дек 2012.

  1. Kro0sh

    Kro0sh Гость

    Нужно написать программу.Что в общем то я сделал,но есть проблема пропала переменная, но я никак не пойму где именно это произошло.Вследствие чего выводятся непонятно откуда взятые значения. :( Само задание написано в прикрепленном файле 1.doc. Просьба помочь нуждаюсь в зачете по этому предмету :)

    Главный собственный вектор
    1.11193e-118 1.09975e-106 6.93655e-076 1
    Оценки главного собственного значения
    8.9934e+117 7.27439e+106 8.64983e+075 71

    Программа :

    Код (C++):
     
    #include <math.h>
    #include <fstream>
    #include <iostream>
    #include <conio.h>
    using namespace std;

    double ** CreateMatrix (int M, int N, ifstream *pFin = NULL)
    {
    double **A = new double *[M];
    double *Body = new double [M * N], *pRow = Body;
    for (int i = 0; i < M; A[i++] = pRow, pRow += N);
    if (pFin == NULL) return A;
    for (int i = 0; i < M; i++)
    for (int j = 0; j < N; *pFin >> A[j++]);
    return A;
    }

    int main (int n, char *narg[])
    {
    setlocale (LC_ALL, "Russian");
    if (n != 3)
    {
    cout << "Неверно указаны параметры:" << endl;
    cout << "1) Путь до входного файла" << endl << "2) Путь выводного файла";
    getch();
    return 1;
    }
    ifstream Fin (narg[1]);
    if (!Fin.is_open())
    {
    cout << narg[1] << " не открылся";
    getch();
    return 2;
    }
    ofstream Fout (narg[2]);
    if (!Fout.is_open())
    {
    cout << narg[2] << " не открылся";
    getch();
    return 2;
    }
    int N;
    Fin >> N;
    double **Ain = CreateMatrix (N, N, &Fin);
    double **A = CreateMatrix (N, N);
    for (int i = 0; i < N; i++)
    for (int j = 0; j < N; j++)
    A[j] = Ain[j];
    double *V = new double [N];
    double *Vold = new double [N];
    double D;
    Vold[0] = 0.0;
    for (;;)
    { //9
    double S = 0;

    for (int i = 0; i < N; i++) //10
    {
    V = 0;
    for (int j = 0; j < N;j++)
    V+= A[j];
    S += V;
    };
    for (int i = 0; i < N; i++) //11
    V=(V / S);

    if (Vold[0] != 0.0) //12
    {
    double t=0;
    for (int i = 0; i < N; i++)
    t+=pow((V-Vold), 2); //12.1
    D = sqrt (t / N);
    if (D < 0.0000001) //12.2
    break;
    }

    for (int i = 0; i < N; i++) //13
    Vold = V;

    for ( int i = 0; i < N; i++) //14
    {
    for ( int j = 0; j < N; j++)
    {
    double t = 0;
    for ( int k = 0; k < N; k++)
    t += (A[k] * A[k][j]);
    A[j] = t;
    }
    }
    }//15

    double *E = new double [N]; //16
    for (int i = 0; i < N; i++)
    {
    E = 0;
    for (int j = 0; j < N; j++)
    E += Ain[j]*V[j];
    }
    for (int i = 0; i < N; i++)
    E = E / V[i];

    Fout << "Главный собственный вектор" << endl;
    for (int i = 0; i < N; i++)
    Fout << V[i] << " ";
    Fout << endl << "Оценки главного собственного значения" << endl;
    for (int i = 0; i < N; i++)
    Fout << E[i] << " ";
    }[code=cpp][/CODE][/i][/i][/i]
     

    Вложения:

    • 1.doc
      Размер файла:
      46 КБ
      Просмотров:
      8
    • Data.txt
      Размер файла:
      38 байт
      Просмотров:
      6
    • DataOut.txt
      Размер файла:
      151 байт
      Просмотров:
      6
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    double ** CreateMatrix (int M, int N, ifstream *pFin = NULL)
    {
    double **A = new double *[M];
    double *Body = new double [M * N], *pRow = Body;
    for (int i = 0; i < M; A[i++] = pRow, pRow += N);
    if (pFin == NULL) return A;
    for (int i = 0; i < M; i++)
    for (int j = 0; j < N; *pFin >> A[i][j++]);
    return A;
    }
    штоэта?

    Добавлено:
    как это понять?
     
  3. Kro0sh

    Kro0sh Гость

    Это функция создания матрицы. "Пропала переменная" в том смысле что в файле вывода выводится не верный результат.( По моему это из-за какой то переменной)
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    По моему это из-за какой то переменной

    дак пройдись отладчиком и посмотри на значения переменных.
     
  5. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    отладчик отказывается идти по неотформатированному коду
     
  6. Kro0sh

    Kro0sh Гость

    На мой взгляд ошибка в переменной E, но в ней и ошибаться то вроде негде -_-
     
  7. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    вобщем либо ты где-то делишь на ноль (у тебя тип дабл - там может быть просто очень маленькое значение, на которое он поделит без эксепшнов).
    Я посмотрел код, вроде бы все инициализируется перед использованием, наверное ты ошибся в алгоритме или вводишь недопустимые данные.
     
  8. Kro0sh

    Kro0sh Гость

    Видимо проблема вообще в задании. Так как у одногрупницы попался этот же вариант и такая же ошибка(Она сдавала во вторник), препод ошибку у нее так и не нашел) Скорей всего на самом деле просто где то очень маленькое значение)
     
Загрузка...
Похожие Темы - Ошибка Вычисления Главного
  1. Lamerman
    Ответов:
    0
    Просмотров:
    19
  2. Enima
    Ответов:
    0
    Просмотров:
    47
  3. Baindt
    Ответов:
    1
    Просмотров:
    67
  4. anna
    Ответов:
    2
    Просмотров:
    76
  5. gramzer
    Ответов:
    1
    Просмотров:
    119

Поделиться этой страницей