Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Транспонирование и перемножение матриц 
V
    Опции темы
Bigimot
Дата 12.1.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.1.2007

Репутация: нет
Всего: нет



Ребят вот какая проблема-все что выложено по этим темам не подходит для решения моей задачи!Помогите плиз с ней если кто может.
Сама задача:
Заданы матрицы A и B.
Получить произведение транспонированных матриц A(T) и B(T). Транспонирование матриц оформить в виде подпрограммы. В транспонированной матрице P(T) каждый элемент определяется как  P(Т)[i][j]=P[j][i]
Исходные данные:
 a[3][3]={2.5,3.3,0.5,-2,0.1,-1.5,1.33,0.7,0.25}
 b[3][3]={0.5,1.2,0.25,-1,0.33,-4.5,2.1,4.8,5.1}
Заранее спасибо.
PM MAIL   Вверх
GIK
Дата 12.1.2007, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 1
Всего: 14



Цитата

Получить произведение транспонированных матриц A(T) и B(T). Транспонирование матриц оформить в виде подпрограммы. В транспонированной матрице P(T) каждый элемент определяется как  P(Т)[i][j]=P[j][i]

Я вот нифина не учился в вузе  (бросил через месяц как поступил) Напомни ка,  что есть транспортирование матрицы.


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Axxent
Дата 12.1.2007, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 25.3.2004
Где: Новосибирск

Репутация: 2
Всего: 5



Цитата
В транспонированной матрице P(T) каждый элемент определяется как  P(Т)[i][j]=P[j][i]

И все. Если бы надо было транспонировать быстрее, то проще поменять индексы. Но если уж тебе надо прям транспонировать на месте, то циклом.
Код

float buf;
for(int i=1; i<size-1;i++)
   for(int j=i+1;j<size-1;j++) {
      buf=a[i][j];
      a[i][j]=a[j][i];
      a[j][i]=buf;
}

А в перемножении какие трудности? взял подходящих размеров массив, пошел по нему циклом и давай множить строчку на столбец в исходных. Аль с математикой вообще никак?

Это сообщение отредактировал(а) Axxent - 12.1.2007, 10:47
PM MAIL ICQ   Вверх
Bigimot
Дата 12.1.2007, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.1.2007

Репутация: нет
Всего: нет



Спасибо за совет,сейчас попробую с умножением)А с матекой правда туговато =)
PM MAIL   Вверх
Sartorius
Дата 12.1.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



 <удалил> smile 

Это сообщение отредактировал(а) Sartorius - 12.1.2007, 10:50
PM MAIL ICQ   Вверх
Bigimot
Дата 12.1.2007, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.1.2007

Репутация: нет
Всего: нет



Код

#include <stdio.h>
#include <iostream.h>
#include <math.h>
double a[3][3]={2.5,3.3,0.5,-2,0.1,-1.5,1.33,0.7,0.25};
double b[3][3]={0.5,1.2,0.25,-1,0.33,-4.5,2.1,4.8,5.1};
double Function(void);

void main()
double i,j,k,m,n;
{
  for (int i=0; i< n; i++)
    for (int j=0; j< n; j++) 
    { c[i][j]=0;
      for (int k=1; k< m; k++)
        c[i][j] = c[i][j]+a[i][k]*b[k][j];
    }
}
double Function(void)
{float x;
for(int i=1; i<2;i++)
   for(int j=i+1;j<2;j++) {
      x=a[i][j];
      a[i][j]=a[j][i];
      a[j][i]=x;}}
{float y;
for(int i=1; i<2;i++)
   for(int j=i+1;j<2;j++) {
      y=b[i][j];
      b[i][j]=b[j][i];
      b[j][i]=y;}}
Вот что у меня пока получилось только что-то это все коряво( Как оформить в виде подпрограммы еще не знаю.

Это сообщение отредактировал(а) Bigimot - 14.1.2007, 10:20
PM MAIL   Вверх
Axxent
Дата 12.1.2007, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 25.3.2004
Где: Новосибирск

Репутация: 2
Всего: 5



я там код подправил в прошлом посте, погляди.

Код умножения выглядит верно. Теперь только офрмить транспонирование в виде функции так чтобы оно работало не с глобальными переменными а с тем что передано в виде параметров.
PM MAIL ICQ   Вверх
Bigimot
Дата 12.1.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.1.2007

Репутация: нет
Всего: нет



Он мне в 8 строчке где дабл ошибки выдает что-то ему не нравится.Сейчас подумаю над оформлением)

Добавлено @ 11:28 
Цитата(Axxent @ 12.1.2007,  11:10)
я там код подправил в прошлом посте, погляди.

Код умножения выглядит верно. Теперь только офрмить транспонирование в виде функции так чтобы оно работало не с глобальными переменными а с тем что передано в виде параметров.

Оки,я исправления вроде внес вот только ничего не работает.В 8 строчке он мне пишет вот такие ошибки-откуда он их взял-не знаю
warning C4518: 'double ' : storage-class or type specifier(s) unexpected here; ignored
error C2146: syntax error : missing ';' before identifier 'i'
fatal error C1004: unexpected end of file found
PM MAIL   Вверх
PoloS
Дата 12.1.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 29.12.2006
Где: МО, г. Одинцово

Репутация: 1
Всего: 5



Код

#include <stdio.h>

double a[3][3]={2.5,3.3,0.5,-2,0.1,-1.5,1.33,0.7,0.25};
double b[3][3]={0.5,1.2,0.25,-1,0.33,-4.5,2.1,4.8,5.1};

void Trans (double A[3][3], double B[3][3]) //транспонирует 2 матрицы
{
    double buf;
    for(int i=0; i<3;i++)
    for(int j=i+1;j<3;j++)
    {
      buf=A[i][j];
      A[i][j]=A[j][i];
      A[j][i]=buf;

      buf=B[i][j];
      B[i][j]=B[j][i];
      B[j][i]=buf;
    }
}

void mult (double A[3][3], double B[3][3], double C[3][3]) //умножение матриц А и В рез-т записываем в С
{
    for (int i=0; i< 3; i++)
    for (int j=0; j< 3; j++)
    { C[i][j]=0;
      for (int k=0; k< 3; k++)
        C[i][j] += A[i][k]*B[k][j];
    }
}

void print (double A[3][3])  //печать (отладочная)
{
    for (int i =0; i < 3; i++)
            printf ("\n %f %f %f", A[i][0], A[i][1], A[i][2]);
}

int main()
{
    double c[3][3];
    printf ("\nInput:");
    print(a);
    printf("\n\n");
    print(b);
    printf("\n\n");
    printf ("\nTranspose:");
    Trans(a, b);
    print(a);
    printf("\n\n");
    print(b);
    printf("\n\n");
    printf("Output:");
    mult(a, b, c);
    print(c);
}


Вот рабочая прога твоя. Если размерность матрицы заранее неизвестно, то надо работать с динамич. 2мерными массивами. Если че, пиши в личку.
PM MAIL ICQ   Вверх
Bigimot
Дата 12.1.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.1.2007

Репутация: нет
Всего: нет



Огромное спасибо всем кто принял участие в решении проблемы,тема закрыта =)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.