Проблема при неправильном использовании команды Dot в Mma - PullRequest
4 голосов
/ 18 мая 2011
In[1]:= SameQ[Dot[1, 2], 1.2]
TrueQ[Dot[1, 2] == 1.2]

a = 1; b = 2;
SameQ[Dot[a, b], a.b]
TrueQ[Dot[a, b] == a.b]

Out[1]= False

Out[2]= False

Out[4]= True

Out[5]= True 

Я знаю, что используется неправильная команда Dot.Кто-нибудь может дать мне четкий резонанс для вышеупомянутых различных результатов?

спасибо!

Ответы [ 3 ]

9 голосов
/ 18 мая 2011

a.b интерпретируется как Dot[a,b], а затем подставляются переменные a и b, что означает Dot[1,2], и, следовательно, выполняется равенство.Это не то же самое, что 1.2, где точка обозначает десятичный разделитель, а не встроенный оператор Dot.

3 голосов
/ 18 мая 2011

enter image description here

Когда вы пишете 1.2, Mma понимает число (или 6/5), но если вы пишете {1, 1}.{2, 2} or a.b Mma понимает скалярное произведение , как обычно в любом книга с использованием векторов.

НТН!

2 голосов
/ 18 мая 2011

Это может быть информативно для просмотра выражения в Hold и FullForm:

a = 1; b = 2;
SameQ[Dot[a, b], a.b]] //Hold //FullForm
<b>    Hold[SameQ[Dot[a, b], Dot[a, b]]]</b>

С помощью этой комбинации команд Mathematica анализирует, но не оценивает выражение (Hold), а затем показывает длинную псевдо-внутреннюю форму выражения (FullForm).

В этом случае вы можете видеть, что второй член a.b анализируется как Dot[a, b] до того, как произойдет какая-либо оценка.

Когда . появляется с цифрами, как в 1.2, оно интерпретируется специально как десятичная точка. Это похоже на другие числовые форматы ввода, такие как: 1*^6, который распознается непосредственно как 1000000:

1*^6 //Hold //FullForm

Сравните, пытаясь ввести:

a = 1;

a*^6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...