Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2012, 23:18   #1
Kro0sh
Новичок
Джуниор
 
Регистрация: 24.12.2012
Сообщений: 5
Печаль Где ошибка? Язык С++.

Я студент.Для зачета нужно написать программу на С++.Дело сделано.Все в общем то работает, но какая то переменная берется неизвестно откуда и главный собственный вектор выводится неверно,так же как и Оценки главного собственного значения.( Задание в файле 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[i][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[i][j] = Ain[i][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[i] = 0;
			for (int j = 0; j < N;j++)
				V[i]+= A[i][j];
			S += V[i];
			};
		for (int i = 0; i < N; i++) //11
			V[i]=(V[i] / S);

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

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

		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[i][k] * A[k][j]);
				A[i][j] = t;
				}
			}
		}//15

	double *E = new double [N]; //16
	for (int i = 0; i < N; i++)
		{
		E[i] = 0;
		for (int j = 0; j < N; j++)
			E[i] += Ain[i][j]*V[j];
		}
	for (int i = 0; i < N; i++)
		E[i] = E[i] / 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] << " ";
	}
Вложения
Тип файла: doc 1.doc (46.0 Кб, 9 просмотров)
Тип файла: txt DataOut.txt (151 байт, 114 просмотров)
Тип файла: txt Data.txt (38 байт, 119 просмотров)

Последний раз редактировалось Kro0sh; 24.12.2012 в 23:24.
Kro0sh вне форума Ответить с цитированием
Старый 25.12.2012, 10:42   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

У Вас V[i] - ноль. Точнее, вектор V получился (0,0,0,1). К слову, это есть собственный вектор (лень скачивать файлы)?

А вот кто такой вектор E, я не понимаю. Если Вы так считаете собственное значение, то это одно число, и нулевые компоненты исходного вектора надо просто пропускать.
Abstraction вне форума Ответить с цитированием
Старый 25.12.2012, 12:16   #3
Kro0sh
Новичок
Джуниор
 
Регистрация: 24.12.2012
Сообщений: 5
По умолчанию

Извиняюсь , "Лень скачивать файлы" - о каких файлах речь? И как пропустить нулевые значения? Если не трудно просто напишите кусок программы,который не правильный,с исправлениями. Буду премного благодарен.
Kro0sh вне форума Ответить с цитированием
Старый 25.12.2012, 12:23   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Извиняюсь , "Лень скачивать файлы" - о каких файлах речь?
Которые в приложении. У Вас конкретная матрица, так? Вопрос: (0,0,0,1) - её собственный вектор?
Цитата:
И как пропустить нулевые значения?
Встречный вопрос: что такое (по Вашему мнению) собственное значение матрицы и чего Вы ожидали увидеть в качестве компонент вектора E?
Abstraction вне форума Ответить с цитированием
Старый 25.12.2012, 12:49   #5
Kro0sh
Новичок
Джуниор
 
Регистрация: 24.12.2012
Сообщений: 5
По умолчанию

Да у меня конкретная матрица. Я хотел бы увидеть в файле вывода примерно это(Взято из работающей программы, препода) :

Главный собственный вектор
0.108664 0.664611 0.226725
Оценка главного собственного значения
7.4 45.26 15.44
Kro0sh вне форума Ответить с цитированием
Старый 25.12.2012, 12:59   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Оценка главного собственного значения
7.4 45.26 15.44
Так. Что-то нифига не понимаю. У Вас есть ссылка на текст, разъясняющий, какой смысл вкладывается в термины "главный собственный вектор" и "главное собственное значение"? Потому что они явно означают что-то совсем не то, что обычно понимается под словами "собственный вектор" и "собственное значение (соответствующее этому вектору)."
Abstraction вне форума Ответить с цитированием
Старый 25.12.2012, 15:20   #7
Kro0sh
Новичок
Джуниор
 
Регистрация: 24.12.2012
Сообщений: 5
По умолчанию

Я сам толком не могу понять Посмотри задание (Файл 1.doc)
Kro0sh вне форума Ответить с цитированием
Старый 25.12.2012, 15:34   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Уже. Определения "главного собственного значения" там нет. В тех определениях, которые мне удалось откопать, "главное собственное значение" остаётся одним числом (обычно максимальным из собственных значений матрицы). Что за "оценка" из трёх компонент - мне лично непонятно.
Abstraction вне форума Ответить с цитированием
Старый 25.12.2012, 18:55   #9
Kro0sh
Новичок
Джуниор
 
Регистрация: 24.12.2012
Сообщений: 5
По умолчанию

Ты пробовал выполнить все эти задания, если да,то скинь пожалуйста что у тебя получилось ,а то мне к четвергу надо её сделать А я уже недели 2 с этой программой вожусь, 2 раза переделывал. Вот сейчас вроде все нормально,а значения не нравятся преподу.(
Kro0sh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
где ошибка?! Tolian92 Паскаль, Turbo Pascal, PascalABC.NET 2 29.11.2011 21:37
Где ошибка asnikifor HTML и CSS 1 12.10.2011 16:20
написал программу, где то ошибка, не пойму где... Kelevra91 Общие вопросы C/C++ 5 17.01.2011 16:38