Форум программистов, компьютерный форум, киберфорум
Наши страницы
Зосима
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 1.

Зловещая точка претыкания!

Запись от Зосима размещена 13.12.2012 в 13:16
Метки matlab

Огромное число ошибок в MATLAB программах связано с отсутствием точки перед умножением,делением, степенью!

Поэтому, дружочек, в твоих же интересах ознакомиться с данным текстом до конца!

He пyтaй мaтpичнoe и пoэлeмeнтнoe yмнoжeниe/дeлeниe/cтeпeнь! Не забывай ставить точки!

Выражения a.*b, a./b, a.^b - этo пoэлeмeнтныe oпepaции! их зачастую и нужно использовать при работе с векторами!
Здесь особых премудростей нет, главное, чтобы совпадали длины и ориентация векторов, в результате получаем вектор такой же длинны и ориентации:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>> a = [1 2 3 4];
>> b = [3 5 4 1];
>> a.*b
 
ans =
 
     3    10    12     4
 
>> a./b
 
ans =
 
    0.3333    0.4000    0.7500    4.0000
 
>> a.^b
 
ans =
 
     1    32    81     4
Нужно помнить, что в результат вычисления ф-ций от массива, например sin(a), так же является массивом, той же длинны и той же ориентации, что и входная величина:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>> a = [1 2 3 4];
>> sin(a)
 
ans =
 
    0.8415    0.9093    0.1411   -0.7568
>> b = [3;5;4];
>> sin(b)
 
ans =
 
    0.1411
   -0.9589
   -0.7568
А вот a*b, a/b, a^b - этo мaтpичныe oпepaции! (cм. пpaвилa yмнoжeния/дeлeния/cтeпeни матриц)
Эти операции требуют определеных свойств входных параметров, поэтому получаются следующие ошибки:
- при перемножении двух векторов-строк вылетает ошибка "размерности не совпадают":

- в степень можно возводить только квадратные матрицы, поэтому при возведении в степень вектора вылетает ошибка "матрица должна быть квадратной":

- с делением происходит более гадкий вариант: при делении векора-строки на вектор-строку ошибка не вылетает, но в результате получается не массив, а одно число!!!, что часто приводит к неверным результатам!
Matlab M
1
2
3
4
5
6
7
>> a = [1 2 3];
>> b = [3 2 5];
>> a/b
 
ans = 
 
  0.5789
- при перемножении вектора-строки на вектор-столбец получаем число, что также может привести к неверным результатам.
Matlab M
1
2
3
4
5
6
7
>> a = [1 2 3];
>> b = [2;3;4];
>> a*b
 
ans =
 
    20
Результат равен сумме произведений элементов, иногда удобно использовать, кстати

- при перемножении вектора-столбца на вектор-строку получаем матрицу, что также может подпортить результат:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
>> x = [1;2;3;4;5];
>> a = [1 2 3];
>> x*a
 
ans =
 
     1     2     3
     2     4     6
     3     6     9
     4     8    12
     5    10    15
Здесь каждый столбец равен произведению столбца x на каждый элемент строки a, что тоже иногда очень может пригодиться!

Замечание:
При умножении числа на вектор нет разницы при использовании матричных и поэлементных операций! (Так как число - это то же матрица, только размером 1х1, не занл? )
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
>> a = 3;
>> b = [3, 5, 4];
>> a*b
 
ans =
 
     9  15  12
 
>> a.*b
 
ans =
 
     9  15 12
Поэтому при действиях с константами и элементами матриц(массивов) точки можно не ставить:
Matlab M
1
2
3
4
5
6
7
8
9
>> i = 3; % индекс
>> n = 0.5; % переменная-число
>> M = magic(5); % матрица 5х5
>> v = 1:10; % вектор
>> (2.54/M(1,i))*v(i+2)^n % так можно
 
ans =
 
    5.6796
Размещено в Без категории
Просмотров 1037 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru