Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/435: Рейтинг темы: голосов - 435, средняя оценка - 4.66
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18

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

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

Студворк — интернет-сервис помощи студентам
Огромное число ошибок в 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2012, 19:00
Ответы с готовыми решениями:

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

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

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.12.2012, 19:00
Помогаю со студенческими работами здесь

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

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

Дана точка с координатами (х,у) и заштрихованная область. Лежит ли точка внутри заштрихованной области?
Дана точка с координатами (х,у) и заштрихованная область. Лежит ли точка внутри заштрихованной области? Найдите формулу прямой (y=kx+b).

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

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


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

Или воспользуйтесь поиском по форуму:
1
Закрытая тема Создать тему
Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru