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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2013, 14:10   #1
Артегор
Пользователь
 
Регистрация: 28.06.2011
Сообщений: 24
По умолчанию LU разложение матрицы

хотел написать программу для LU разложения матрицы.
взял формулы с вики , не правильно находит элемент (3,3) в матрице U.
(пробовал только матрицу 3х3 ,иожет при больших размерах ещё больше неточностей будет )
что не так ?
#include <iostream>


int main(int argc, char* argv[])
{
int i,j,k, n=3;
float sum;

float ** A=new float *[n];
float ** L=new float *[n];
float ** U=new float *[n];

for (int i=1; i<=n; i++) {
A[i]=new float [n];
L[i]=new float [n];
U[i]=new float [n]; }

std::cout<<"A matr \n";

for (i=1;i<=n;i++){
for (j=1;j<=n;j++){
A[i][j]=rand()%9;
L[i][j]=0;
U[i][j]=0;
L[i][i]=1;
std::cout<<A[i][j]<<" ";
}std::cout<<"\n";}

/////////// L и U марицы


for (j=1;j<=n;j++) {
U[1][j]=A[1][j];}
for (j=2;j<=n;j++) {
L[j][1]=A[j][1]/A[1][1]; }


for (i=2;i<=n;i++){
for (j=i;j<=n;j++){
sum=0;
for (k=1;k<i;k++){sum=sum+L[i][k]*U[k][j];}
U[i][j]=A[i][j]-sum;

}}



for (i=2;i<=n;i++){
for (j=i+1;j<=n;j++){
sum=0;
for (k=1;k<i;k++){sum=sum+L[j][k]*U[k][i];}
L[j][i]=(A[j][i]-sum)/U[i][i];
L[i][i]=1;
}}



std::cout<<"L matr \n";
for (i=1;i<=n;i++){
for (j=1;j<=n;j++){
std::cout<<L[i][j]<<" ";
}std::cout<<"\n";}

std::cout<<"U matr \n";
for (i=1;i<=n;i++){
for (j=1;j<=n;j++){
std::cout<<U[i][j]<<" ";
}std::cout<<"\n";}


system("pause");
return 0;

}
Артегор вне форума Ответить с цитированием
Старый 02.01.2013, 18:01   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Начните с того, что прочитайте как нумеруются массивы в с++...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 02.01.2013, 18:16   #3
Артегор
Пользователь
 
Регистрация: 28.06.2011
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Начните с того, что прочитайте как нумеруются массивы в с++...
о боже,ну с нуля ,что с того то ?это всего лишь смещение
разницы в подсчете не будет
Артегор вне форума Ответить с цитированием
Старый 03.01.2013, 15:18   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Артегор Посмотреть сообщение
о боже,ну с нуля ,что с того то ?это всего лишь смещение
разницы в подсчете не будет
Я очень поверхностно знаю C++, но тем не менее:
Вот тут ты задаешь размерность массива
Код:
A[i]=new float [n];
То есть если n=3 то, А[i] состоит из А[i][0], A[i][1] и A[i][2]
Далее
Код:
for (i=1;i<=n;i++){
 for (j=1;j<=n;j++){
пробегаются элементы A[i][1], A[i][2] и A[i][3], который не существует. Так что это не "всего лишь смещение".
Все тривиальное просто
whatever вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си,Си ++, QR разложение Осип Помощь студентам 1 28.10.2012 16:41
Определитель матрицы через разложение по первой строке AlexSun Помощь студентам 1 16.04.2011 21:04
Определитель матрицы через разложение по первой строке AlexSun Общие вопросы C/C++ 0 16.04.2011 16:53
разложение матрицы на произведение двух треугольных в и н Monomah Общие вопросы C/C++ 0 28.02.2011 21:15
разложение матрицы Monomah Помощь студентам 2 28.02.2011 19:47