задача на с++ линейной алгебры

  • Автор темы Guest
  • Дата начала
G

Guest

#1
ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ
Решить СЛАУ A2X=YT,
где A =
∣2 1 5 2
5 2 2 6
2 2 1 2
1 3 3 1∣
Y = [3 1 2 1 ]
 

DarkKnight

Well-known member
01.08.2010
653
0
#2
Ксюха761 , Ксения, опять же скажу... Я уже как почти 5 лет как закончил университет, мне фраза: практически ни о чем не говорит, могу только предполагать, что это связанно с "системой линейных ... уровнений"
Хочется увидить (раз нет кода) хотя бы отрывки теории, и тогда поверьте, за милую душу наша группа (C/С++ Team) вам поможет...
Иначе подумайте сами, люди из группы затратят время на поиск теории, а в это время ваша задача уже уйдет из актуальных, и в конечном итоге так и останется без ответа...
Так что надеюсь на ваше участие(!!!) и понимаение...
 
G

Guest

#3
а теории нет никакой просто дали задачу и все...((
 

DarkKnight

Well-known member
01.08.2010
653
0
#4
а теории нет никакой просто дали задачу и все...((
Понял Ксения... Действительно такое былает... Вы заочник??? Я завтра... Попробую понятно описать каждое решение....
Если конечно все успею... (одну я вам написал, если какие то моменты не понятны, опишите из в той теме)....
 

DarkKnight

Well-known member
01.08.2010
653
0
#5
Где то видно ошибку в методе Якобби допустил.. Завтра буду искать...

C++:
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <iostream>

using namespace std;

//Метод Якоби (простая итерация)
void MJacobi (int Size, double **A, double *F, double *X, double eps)
// Size - размерность матрицы; A[Size][Size] - матрица коэффициентов, F[Size] - столбец свободных членов,
// X[Size] - начальное приближение, ответ записывается также в X[Size];
// esp - точность
{
double * TempX = new double[Size];
double norm; // норма, определяемая как наибольшая разность компонент столбца иксов соседних итераций.

do {
for (int i = 0; i < Size; i++) 
{
TempX[i] =- F[i];
for (int g = 0; g < Size; g++) 
{
if (i != g)
TempX[i] += A[i][g] * X[g];

}
TempX[i] /= -A[i][i];

}
norm = abs(X[0] - TempX[0]);
for (int h = 0; h < Size; h++) {
if (abs(X[h] - TempX[h]) > norm)
norm = abs(X[h] - TempX[h]);
X[h] = TempX[h];
}
} while (norm > eps);
delete[] TempX;
}

//Основная функция программы
void main(void)
{
setlocale(LC_ALL,".1251");
const int Size = 4; //Размер уравнение (кол-во уранений и коэффициентов)

//Исходные данные
double A[Size][Size] = {
{2,1,5,2},
{5,2,2,6},
{2,2,1,2},
{1,3,3,1}
};

double Y[Size] = {3,1,2,1};


//Ввод x и t
double x,t;
cout << "Введите x = ";
cin >> x;
cout << "Введите t = ";
cin >> t;

//Приведем к СЛАУ A2X=YT,
double **Arr = new double*[Size]; //Выделим память под строки
for (int i = 0; i< Size; i++)
{
Y[i] = Y[i] * t;
Arr[i] = new double[Size]; //Выделим память под строки столбцы
for (int j = 0; j< Size; j++)
{
Arr[i][j] = 2*x* A[i][j];
Arr[i][j] = A[i][j];
}
}

double ArrResult[Size]={0}; //Результ. матрица
double esp = 10.0; //Точность

//Решим СЛАУ с помощью метода Якобби
MJacobi(Size, Arr,Y, ArrResult ,esp);

cout<< "Результат : " << endl;
for (int i = 0; i < Size; i++)
{
cout << ArrResult[i] << endl;
}


}