K
Kro0sh
Нужно написать программу.Что в общем то я сделал,но есть проблема пропала переменная, но я никак не пойму где именно это произошло.Вследствие чего выводятся непонятно откуда взятые значения. Само задание написано в прикрепленном файле 1.doc. Просьба помочь нуждаюсь в зачете по этому предмету
Главный собственный вектор
1.11193e-118 1.09975e-106 6.93655e-076 1
Оценки главного собственного значения
8.9934e+117 7.27439e+106 8.64983e+075 71
Программа :
#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;
Fout << "Главный собственный вектор" << endl;
for (int i = 0; i < N; i++)
Fout << V << " ";
Fout << endl << "Оценки главного собственного значения" << endl;
for (int i = 0; i < N; i++)
Fout << E << " ";
}
Главный собственный вектор
1.11193e-118 1.09975e-106 6.93655e-076 1
Оценки главного собственного значения
8.9934e+117 7.27439e+106 8.64983e+075 71
Программа :
C++:
#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;
Fout << "Главный собственный вектор" << endl;
for (int i = 0; i < N; i++)
Fout << V << " ";
Fout << endl << "Оценки главного собственного значения" << endl;
for (int i = 0; i < N; i++)
Fout << E << " ";
}
C++: