Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/435: Рейтинг темы: голосов - 435, средняя оценка - 4.66
5243 / 3571 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
1

СЕКРЕТНО! Зловещая точка претыкания

12.12.2012, 19:00. Показов 89709. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Огромное число ошибок в 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ни матриц)
Эти операции требуют определеных свойств входных параметров, поэтому получаются следующие ошибки:
- при перемножении двух векторов-строк вылетает ошибка "размерности не совпадают":
>> a = 1:3 ;
>> b = [3 2 5];
>> a*b
??? Error using ==> mtimes
Inner matrix dimensions must agree.
- в степень можно возводить только квадратные матрицы, поэтому при возведении в степень вектора вылетает ошибка "матрица должна быть квадратной":
>> a = [1 2 3];
>> a^2
??? Error using ==> mpower
Matrix must be square.
- с делением происходит более гадкий вариант: при делении векора-строки на вектор-строку ошибка не вылетает, но в результате получается не массив, а одно число!!!, что часто приводит к неверным результатам!
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
Почему понадобилось дополнение
Ребятки, привет!
Благодарю всех за идеи и примеры! Откуда вообще та тема появилась и в чем была цель ее написания? Большое число новичков спотыкались именно на этой точке, которой нет в других ЯП, поэтому и упор был сделан именно на три действия *,/,^
(cо сложением и вычитанием все как-то понятней было: ошибся размером - получи ошибку. На момент написания 2013г таких хитрых вариантов сложения с разными размерностями, как привел в примере AlMih, не было)
За транспонирование я знал, но оно встречалось крайне редко, я не стал выносить его в отдельную тему. Что ж, пришло время дополнить:


Дополнение
* * *

Для маленьких и не очень фанатов работы с комплексными числами небесполезно будет запомнить, что в MATLAB операция транспонирования ( ' ) не так проста как кажется! Соль (с перцем) в том, что по умолчанию матлаб делает эрмитово сопряжение, т.е. кроме транспонирования меняет знак мнимой части!
Например:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
m=[4+1i, 6-3i] % исходный массив-строка
 
m =
   4.0000 + 1.0000i   6.0000 - 3.0000i
 
m' % эрмитово сопряжение, обрати внимание на знак мнимой части! 
 
ans =
   4.0000 - 1.0000i
   6.0000 + 3.0000i
 
m.' % классическое транспонирование, знак мнимой части НЕ изменился  
 
ans =
   4.0000 + 1.0000i
   6.0000 - 3.0000i
Разница лишь в маленькой незаметной точечке! Еще раз:
Операция без точки: ' - транспонирование с сопряжением, знак мнимой части меняется,
Операция с точкой: .' - обычное транспонирование, знак мнимой части НЕ меняется.
Но если в слове "комплексные" ты делаешь ударение на букву "о", и при дискриминанте меньше нуля для тебя корней нет, то не заморачивайся, пиши без точки, а сэкономленную энергию направь на что-то общеполезное, например, спасение мира!

Все люди равны... Теоретически, но в реальности кто-то все-равно ровнее. Так к примеру обладатели MATLAB версии R2017 и позже имеют уникальную сверхспособность складывать и вычитать вектора разных размерностей, причем безо всяких точек!
Смотри пример:
Matlab M
1
2
3
4
5
6
7
8
9
a = [1; 2; 3]; % столбец их 3 элементов
b = [4 5 6 7]; % строка из 4 элементов
r = a + b % сумма совершенно разных штуковин!
 
r =
 
     5     6     7     8
     6     7     8     9
     7     8     9    10
То есть каждый элемент вектора-столбца складывается со строкой и получаем на выходе матрицу!
Или еще пример сложения матрицы с векторами:
Matlab M
1
2
3
4
5
6
A = [ 1 2 3; 4 5 6 ]
b = [ 7 8 9 ]
c = [ 1; 2]
 
r1 = A + b
r2 = A + c
Также получаем в результате матрицы. Очевидно, что размерности векторов и матриц должны быть соответствующие.

Плохо это или хорошо? Без разницы! Но такую особенность тоже нужно иметь в виду, чтобы не получить ошибочный результат при отсутствии синтаксических ошибок!
39
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2012, 19:00
Ответы с готовыми решениями:

Дополнение к теме "СЕКРЕТНО! Зловещая точка претыкания"
Там не указаны некие операции, которые допускаются в матлабе и не являются вполне очевидными,...

Дана точка М (x, y). Присвоить z = 1, если точка внутри эллипса и z = 0, если точка вне эллипса
задачу паскаль абс Данная точка М (x, y). Присвоить z = 1, если точка внутри эллипса (смотрите...

Точка задана координатами.Определить попадает ли точка в заштрихованную область.
Точка задана координатами.Определить попадает ли точка в заштрихованную область.Вот рисунок к ней

компы не видят друг друга при прямом подключении wifi - точка-точка
Короче, суть вот в чём: создаю беспроводную сеть на одном компе, подключаюсь к ней с ноутбука или с...

0
12.12.2012, 19:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2012, 19:00
Помогаю со студенческими работами здесь

Описать структуры Шар и Точка; проверить, находится ли точка внутри заданного шара
Определить структуры, описывающие шар и точку в трехмерном пространстве. Составить и протестировать...

Дана точка с координатами (х,у) и заштрихованная область. Лежит ли точка внутри заштрихованной области?
Дана точка с координатами (х,у) и заштрихованная область. Лежит ли точка внутри заштрихованной...

Дана точка М( х,у ). проверить, лежит ли данная точка внутри закрашенной области, представленной на рисунке
Дана точка М( х,у ). проверить, лежит ли данная точка внутри закрашенной области, представленной на...

С клавиатуры вводится точка M с координатами [x ; y]. Вычислить, принадлежит ли введенная точка M заштрихованной области рисунка
Помогите плз задачку сделать


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru