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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2010, 11:18   #1
KASPEER
Пользователь
 
Регистрация: 21.12.2007
Сообщений: 15
По умолчанию Составить функцию для умножения матрицы matr из n строк и m столбцов на вектор vect (из n элементов)

Составить функцию для умножения матрицы matr из n строк и m столбцов на вектор vect (из n элементов) с размещением результата в массиве res:
void matrvect(int n, int m, float *matr, float *vect, float *res).
KASPEER вне форума Ответить с цитированием
Старый 12.01.2010, 11:54   #2
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

Ну во первых батенька: умножить матрицу размером n x m на вектор n x 1 не возможно.
Можно умножить например матрицу n x m на вектор m x 1.

Ну да ладно.


Предположим что вам всётаки надо умножить матрицу n x m на вектор m x 1

Код:
void matrvect(int n, int m, float *matr, float *vect, float *res)
{
  for (int i=0;i<n;i++)
  {
    float s = 0;
    for (int j=0;j<m;j++)
    {
      s += matr[i*m+j]*vect[j];
    }
    res[i] = s;
  }
}
( данный код я не отлаживал, проверте его сами )
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."

Последний раз редактировалось val_nnm; 12.01.2010 в 11:59.
val_nnm вне форума Ответить с цитированием
Старый 12.01.2010, 12:21   #3
KASPEER
Пользователь
 
Регистрация: 21.12.2007
Сообщений: 15
По умолчанию

OK,СПС. ЗНАЧИТ ЗАДАНИЕ НЕ ВЕРНО???
ПОДСКАЖИ, КАК ПРОВЕРИТЬ
KASPEER вне форума Ответить с цитированием
Старый 12.01.2010, 14:04   #4
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

Ну почитай теорию про умножение матриц напимер вот
http://ru.wikipedia.org/wiki/Умножение_матриц

там сказанно "Операция умножения двух матриц выполнима только в том случае, если число столбцов в первом сомножителе равно числу строк во втором; в этом случае говорят, что форма матриц согласована"

это если по правилам умножения матриц. То только так. Если бы там было сказано что умножать элементы какимто особенным образом. Но это уже не будет умножене матриц, а будет какаято совсем другая операция над матрицами.

В принципе возможно сделать наоборот. умножить вектор размером 1 x n на матрицу размером n x m. Но не наоборот.

А чтобы проверить правельность работы кода. Нужно написать программу. Которая будет создавать какуюнибуть матрицу и вектор, а затем будет вызывать нашу функцию, и выводить результат на экран. И эти же данные расчитать самому, и сравнить их.
Ну функция вроде малленькая, несколько раз пересмотрел, вроде ошибок нет.
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."

Последний раз редактировалось val_nnm; 12.01.2010 в 14:32.
val_nnm вне форума Ответить с цитированием
Старый 12.01.2010, 14:28   #5
KASPEER
Пользователь
 
Регистрация: 21.12.2007
Сообщений: 15
По умолчанию

ОК, А С ФУНКЦИЕЙ ПОМОЖЕШ???
KASPEER вне форума Ответить с цитированием
Старый 12.01.2010, 14:35   #6
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

Так это же и есть готовая функция. Или ты имееш ввиду с программой?
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Старый 12.01.2010, 14:55   #7
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

а что вы хотите получить умножением матрицы на вектор? Насколько я думаю можно получить только вектор

matr[i*m+j] - вы представляете, что такое матрица и массив? не путаете здесь? по условию-то у нас матрица!
и еще как минимум здесь произойдет выход за пределы массива (если вы здесь имели ввиду массив)
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 12.01.2010, 15:11   #8
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

Нет я какразтаки не путаю что такое матрица и массив. Просто в C двумерный массив (он же матрица) заранее неизвестного размера передать в функцию нельзя (покрайней мере мне не известен такой способ). все массивы передаются только ссылками на первый их элемент. И в функции мы уже работаем с ними как с одномерным массивом. Соответственно в функции мы получаем не двумерный массив [m,n] а одномерный [m*n]. В котором элементы второй строки идут сразу после эементов первой строки. Элементы третьей строки сразу за элементами второй строки и.т.д.
Конечно в основной программе мы должны сразу создавать массив точно заданной размерности. Если например в основной программе мы создадим двумерный массив с запасом например из [100,100] элементов а будем использовать только [5,5] то тогда будут проблеммы. А если мы будем сразу создавать нужного размера то проблемм не будет.

Ну а в результате му действительно здесь получаем вектор (массив res).

Ну а если вы дейтсвительно хотите создавать в основной программе массивы с запасом то тогда нужно добавить ещё один параметр в нашу функцию.
Код:
void matrvect(int n, int m, float *matr, float *vect, float *res, int MaxM)
{
  for (int i=0;i<n;i++)
  {
    float s = 0;
    for (int j=0;j<m;j++)
    {
      s += matr[i*MaxM+j]*vect[j];
    }
    res[i] = s;
  }
}
где MaxM количество элементов (количество которое с запасом) в строке нашего друхмерного массива
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."

Последний раз редактировалось val_nnm; 12.01.2010 в 15:24.
val_nnm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с поиском max элементов строк матрицы в Паскале annexion Помощь студентам 4 05.04.2010 10:44
составить функцию для вычисления значения y=P(x) многочлена для заданного аргумента x KASPEER Помощь студентам 2 12.01.2010 15:03
(c++) Сортировка строк матрицы по возрастанию первых элементов Serg046 Помощь студентам 3 07.01.2010 23:17
сумма максимальных значений элементов столбцов матрицы motaro Помощь студентам 2 26.11.2009 19:00
Создать вектор из элементов матрицы Dayterius Паскаль, Turbo Pascal, PascalABC.NET 0 20.05.2009 12:32