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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2011, 20:20   #1
Foralberg
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 10
По умолчанию Решение СЛАУ в С++

Помогите с программой, пожалуйста.

Задание:

Решить СЛАУ A^2*X=Y^T,
где A = ∣2 1 5 2|
|5 2 2 6|
|2 2 1 2|
|1 3 3 1∣ , Y = [ 3 1 2 1 ]

Вот то, что пытался написать я:

Код:
#include "stdafx.h"
#include <iostream.h>
#include <math.h>

void Pow_mtr(double **mtr, int height)
{
    int i, j, k, n;
	double temp[n][n];    
    --height;

    while (height > 0)
    {
        for(i=0; i<n; ++i)
            for(j=0; j<n; ++j)
            {
                temp[i][j]=0;

                for(k=0; k<n; ++k)
                    temp[i][j] += mtr[i][k]*mtr[k][j];
            }
        for (i = 0; i < n; i ++)
            for (j = 0; j < n; j ++)
                mtr[i][j] = temp[i][j];

       --height;
    }
}

int SLAU(double **matrica_a, int n, double *massiv_b, double *x)
{
int i, j, k, r;
double c, M, max, s;
double **a, *b;
a=new double *[n];
for(i=0; i<n; i++)
a[i]=new double[n];
b=new double[n];
for(i=0; i<n; i++)
for(j=0; j<n; j++)
a[i][j]=matrica_a[i][j];
for(i=0; i<n; i++)
b[i]=massiv_b[i];
for(k=0; k<n; k++)
{
	max=fabs(a[k][k]);
	r=k;
	for(i=k+1; i<n; i++)
		if (fabs(a[i][k]>max))
		{
			max=fabs(a[i][k]);
			r=i;
		}
		for(j=0; j<n; j++)
		{
			c=a[k][j];
			a[k][j]=a[r][j];
			a[r][j]=c;
		}
		c=b[k];
		b[k]=b[r];
		b[r]=c;
		for(i=k+1; i<n; i++)
		{
			for(M=a[i][k]/a[k][k], j=k; j<n; j++)
				a[i][j]-=M*a[k][j];
			b[i]-=M*b[k];
		}
}
if(a[n-1][n-1]==0)
if(b[n-1]==0)
return -1;
else return -2;
else
{
	for(i=n-1; i>=0; i--)
	{
		for(s=0, j=i+1; j<n; j++)
			s+=a[i][j]*x[j];
		x[i]=(b[i]-s)/a[i][i];
	}
	return 0;
}
for(i=0; i<n; i++)
delete [] a[i];
delete [] a;
delete [] b;
}



int main(int argc, char* argv[])
{
	int n;
double **mas_a;
double *mas_b;
double *mas_x;
double **matr;
double v[1]={2};
cout << "Ukazhite razmernost matrici";
cin >> n;
mas_a = new double *[n];
	for(i=0; i< n; i++)
      mas_a[i] = new double[n];
mas_b = new double [n];
mas_x = new double [n];
matr = new double *[n];
	for(i=0; i< n; i++)
      matr[i] = new double[n];
for (int i = 0; i < n; i++)
  for (int j = 0; j < n; j++)
  {
	  cout << "Vvedite element: ";
	  cin >> mas_a[i][j];
  }
for (int i = 0; i < n; i++)
{
	  cout << "Vvedite element: ";
	  cin >> mas_b[i];
}
tr_matr(mas_a, matr);
mul_matr(matr, matr, mas_a);
mul_matr_vect(mas_a,v, matr);
SLAU(matr, n, mas_b, mas_x);
for (int i =0; i < n; i++)
	cout >> mas_x[i];
for(i=0; i<n; i++)
delete [] a[i];
delete [] a;
delete [] b;
	return 0;
}
Foralberg вне форума Ответить с цитированием
Старый 10.06.2011, 10:56   #2
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Цитата:
Решить СЛАУ A^2*X=Y^T,
А что это за загадочная буковка Т?
А вообще я думаю надо пролагорифмировать уравнение и ввести новые переменные Y1=ln(Y) и X1=ln(X), дальше СЛАУ решается как обычно (Гаусом) и в конце делается обратная замена.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 12.06.2011, 16:50   #3
Foralberg
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 10
По умолчанию

Буковка Т означает, что матрица должна быть транспонирована
Foralberg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение СЛАУ в mfc Gollandec Помощь студентам 0 10.05.2010 22:26
Решение СЛАУ. Паскаль. Дабл Помощь студентам 3 05.04.2010 08:36
Решение СЛАУ Alex2012 Общие вопросы .NET 2 10.02.2010 02:07
Параллельное решение СЛАУ Mixasik Помощь студентам 1 28.08.2008 23:44
Решение СЛАУ с ограничениями сероглазая Помощь студентам 10 04.05.2008 09:30