![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Димас |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 90 Пол: Мужской Реальное имя: Дима Репутация: ![]() ![]() ![]() |
есть задача:
Дано две квадратические матрицы A и D, (n = 3) . Вычислить Матрицу: C = A * B + D * A , где элементы матрицы B делаются за формулою , Умножения матрицы на матрицу сделать у виде подпрограммы. единственное что не ясно с задачи - как сделать матрицу B ? ![]() думал так вот:
const int n = 3;
...
for (int i = 0 ; i < n; i++)
{
for (int j = 0 ; j < n; j++)
{
if ( i < j)
{
arrayB[i][j] = 1 / (i + j -1) ;
}
else
{
arrayB[i][j] = 1 / (i + j + 1) ;
}
}
}
...
но єто маразм какой то получаеться ![]() Сообщение отредактировано: Димас - 3.12.2007 23:46 Эскизы прикрепленных изображений ![]() -------------------- Каждый человек , которого я знаю встречаю, превосходит меня в какой нить области, и я готов у него этому учится:)
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Картинку присоедини к посту, она не открывается: "You don't have permission to access /lab12.GIF on this server."
|
Димас |
![]() ![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 90 Пол: Мужской Реальное имя: Дима Репутация: ![]() ![]() ![]() |
Картинку присоедини к посту, она не открывается: "You don't have permission to access /lab12.GIF on this server." перезалил... -------------------- Каждый человек , которого я знаю встречаю, превосходит меня в какой нить области, и я готов у него этому учится:)
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата но єто маразм какой то получаеться Почему же маразм? Все правильно получается, хотя можно и короче:for (int i = 0 ; i < n; i++) {
for (int j = 0 ; j < n; j++) {
arrayB[i][j] = 1 / (i + j + (i < j ? -1 : 1));
}
}
(непонятно, что будет с элементами главной диагонали, правда... В моем случае они будут считаться как 1 / (i + j + 1), хотя в условии этого не оговорено.) |
Димас |
![]()
Сообщение
#5
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 90 Пол: Мужской Реальное имя: Дима Репутация: ![]() ![]() ![]() |
volvo , моя ошибка была в том что я матрицу B обявил как int , а там же получается надо например double ...
но сделал я все таки вот так :
const int n = 3;
double b[n][n];
int i, j;
for (i = 0; i < n; i++)
{
b[i][i] = 0;
for (j = 0; j < i; j++)
b[i][j] = ( i+j == 1 ? 0 : 1./(i+j-1) );
for (j = i+1; j < n; j++)
b[i][j] = 1./(i+j+1);
}
В данном случае главную диагональ заполняем нулями, если получается деление на ноль, то тоже присваеваем ноль. Сообщение отредактировано: Димас - 4.12.2007 20:48 -------------------- Каждый человек , которого я знаю встречаю, превосходит меня в какой нить области, и я готов у него этому учится:)
|
Димас |
![]() ![]()
Сообщение
#6
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 90 Пол: Мужской Реальное имя: Дима Репутация: ![]() ![]() ![]() |
теперь вопрос как умножить две матрицы ?
поискал гуглом нашел такое: Умножения двух матриц но дык, это ж не правильно ?! я вот посмотрел как матрицы умножаютмя на: Википедиа (там написано Умножение матриц не коммутативно!) я понимаю как матрицы умножаются на "бумаге" . но не могу сделать алгоритм ... ![]() Эскизы прикрепленных изображений ![]() -------------------- Каждый человек , которого я знаю встречаю, превосходит меня в какой нить области, и я готов у него этому учится:)
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата но дык, это ж не правильно ?! Вот когда ты напишешь СВОЙ алгоритм - обязательно выложи его сюда, чтоб я тоже мог не глядя написать: "и это тоже неправильно!"Почему неправильно? "Какие Ваши аргументы" (С), как говорится? Что не так в программе? Или "не читал, но осуждаю"? |
Michael_Rybak |
![]()
Сообщение
#8
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
|
Димас |
![]()
Сообщение
#9
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 90 Пол: Мужской Реальное имя: Дима Репутация: ![]() ![]() ![]() |
Или "не читал, но осуждаю"? нет я не осуждаю а пытаюсь понять... Почему неправильно? "Какие Ваши аргументы" (С), как говорится? Что не так в программе? Вы абсолютно правы... (мои аргументы были ошибочными ![]() просто я не до конца понял как работает алгоритм, только что взял расписал все на бумаге, оказалось что все работает ![]() скажите я правильно доделал задачку ?
#include <iostream>
#include <conio>
#include <iomanip>
using namespace std;
const int n = 3;
double MatrixIncrease(double A[n][n], double B[n][n], double C[n][n])
{
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
C[i][j] = 0;
for(int k = 0; k < n; k++)
C[i][j] += (A[i][k] * B[k][j]);
}
return C[n][n];
}
double MatrixAddition(double A[n][n], double B[n][n], double C[n][n])
{
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
C[i][j] =0;
for(int k = 0; k < n; k++)
C[i][j] += (A[i][k] + B[k][j]);
}
return C[n][n];
}
int main(int argc, char* argv[])
{
clrscr();
randomize();
double arrayA[n][n];
double arrayB[n][n];
double arrayC[n][n];
double arrayD[n][n];
double arrayTMP1[n][n];
double arrayTMP2[n][n];
for (int i=0; i < n; i++)
{
for (int j=0; j < n; j++)
{
arrayA[i][j] = random(30) ;
arrayD[i][j] = random(50) ;
}
}
for (int i = 0; i < n; i++)
{
arrayB[i][i] = 0;
for (int j = 0; j < i; j++)
arrayB[i][j] = ( i+j == 1 ? 0 : 1./(i+j-1) );
for (int j = i+1; j < n; j++)
arrayB[i][j] = 1./(i+j+1);
}
cout << "Matrix A: \n" << endl;
for( int i = 0; i<n ; i++ )
{
for( int j = 0 ; j < n ; j++ )
cout << setw(4) << arrayA[i][j];
cout << "\n\n";
}
cout << "Matrix D: \n" << endl;
for( int i = 0; i<n ; i++ )
{
for( int j = 0 ; j < n ; j++ )
cout << setw(4) << arrayD[i][j];
cout << "\n\n";
}
cout << "Matrix B: \n" << endl;
for( int i = 0; i<n ; i++ )
{
for( int j = 0 ; j < n ; j++ )
cout << setw(11) << arrayB[i][j];
cout << "\n\n";
}
// A*B
MatrixIncrease(arrayA, arrayB, arrayTMP1);
// D*A
MatrixIncrease(arrayD, arrayA, arrayTMP2);
// C = A*B + D*A
MatrixAddition( arrayTMP1 , arrayTMP2 , arrayC);
cout << "Matrix C: \n" << endl;
for( int i = 0; i<n ; i++ )
{
for( int j = 0 ; j < n ; j++ )
cout << setw(11) << arrayC[i][j];
cout << "\n\n";
}
system("pause");
return 0;
}
Сообщение отредактировано: Димас - 4.12.2007 21:45 -------------------- Каждый человек , которого я знаю встречаю, превосходит меня в какой нить области, и я готов у него этому учится:)
|
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 5:30 |