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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2011, 18:43   #1
Monomah
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 16
По умолчанию разложение матрицы

необходимо разложить матрицу на две треугольные(верхнюю и нижнюю(и их главная диагональ состояла из едениц) причем так чтобы их произведение довало исходную матрицу.....
С верхней треугольной(b[][]) все нормально...а вот нижняя прблема(с[][])
при выводе какой-то бред выводит...на главной диагонали откуда-то нули берутся либо дикие 9-27значные числа...хотя по формуле все делаю верно( помогите найти ошибку
Код:
#include <stdio.h>
#include <conio.h>
void main(void)
{
int i,j,k,n;
double z,a[25],b[5][5],c[5][5],a1[25];

scanf("%d",&n);

for (i=0;i<n;i++)
    scanf("%lf",&a[i]);	
for(i=1;i<n;i++)
	for(j=1;j<n;j++)
		{
		if (i<j) c[i][j]=0;
		else
				 if (i==j) {b[i][j]=1;c[i][j]=0;}
				 else b[i][j]=0;
		}
		
for (i=0;i<n;i++)
	for (j=0;j<n;j++)
		if (i<j) if (c[i][i]==0) return 0;
                 else 
                 {
                      b[i][j]=a[i*n+j];
                      for (k=0;k<(i-2);k++)
                          b[i][j]=a[i*n+j]-c[i][k]*b[k][j];
                      b[i][j]=b[i][j]/c[i][i];
                 }
        else 
        {
            c[i][j]=a[i*n+j];
            for (k=0;k<(j-2);k++)
                c[i][j]=c[i][j]-c[i][k]*b[k][j];
        }
b[0][0]=1;
for (i=0;i<n;i++)
    for (j=0;j<n;j++)    
        printf("%lf\n",c[i][j]);
for (i=0;i<n;i++)
    for (j=0;j<n;j++)    
        printf("%lf\n",b[i][j]);
getch();
}
Monomah вне форума Ответить с цитированием
Старый 28.02.2011, 19:04   #2
Д_М
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 92
По умолчанию

n - размер матрицы?
a - исходная матрица?

Код:
for (i=0;i<n;i++)
    scanf("%lf",&a[i]);
Здесь вводится только первая строка матрицы, остальные строки не инициализированы.

И почему a[25], а не a[5][5]? Неудобно же так.
Д_М вне форума Ответить с цитированием
Старый 28.02.2011, 19:47   #3
Monomah
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Д_М Посмотреть сообщение
n - размер матрицы?
a - исходная матрица?

Код:
for (i=0;i<n;i++)
    scanf("%lf",&a[i]);
Здесь вводится только первая строка матрицы, остальные строки не инициализированы.

И почему a[25], а не a[5][5]? Неудобно же так.
Потому что в дальнейшем в задаче необходимо будет динамическое
выделение памяти что в двумерном массиве не очень удобно.... поэтому удобнее использовать одномерный массив
Monomah вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разложение на простые множители bloodflood Общие вопросы C/C++ 20 15.12.2010 13:57
Разложение функции stepanov_ivan Помощь студентам 0 25.10.2010 09:08
Разложение числа на 3 слогаемых azusdex Общие вопросы C/C++ 3 15.08.2010 00:31
Разложение Холецкого, Делфи DeeKay Помощь студентам 1 17.05.2010 09:17
Разложение числа на множители spamer Общие вопросы Delphi 5 01.01.2009 12:32