Найти в Дзене
Бычков Дмитрий

Что есть Тензор?

Оглавление

Если вы слышали про тензоры, но не знаете что это такое, а объяснения из учебников кажутся сложными и запутанными, в этой статье я попробую объяснить это максимально просто.

Но здесь есть нюанс, схожий с боевыми искусствами, освоить любую технику можно за пару часов/дней, а вот что-бы довести её до совершенства и стать мастером понадобятся годы, если не десятилетия, тоже и с тензорами, понять что это такое вы можете за пару десятков минут, а вот мастерски распоряжаться ими сможете только спустя месяцы и годы практики (это я к тому, что не стоит ждать от этой статьи чуда).

Но так или иначе описать что такое тензор в трех словах можно:

Тензор - это таблица чисел.

Так просто? Да, но не совсем. Это не обычная таблица чисел, да и не всегда чисел впрочем, но обо всем по порядку.

Я скажу так: Тензор это таблица чисел подчиняющихся особому правилу которое будет ясно позже. То есть не всякая таблица чисел это тензор.

Далее я буду предполагать что вы знакомы лишь с арифметикой и уже знаете как складывать числа, умножать их, вычитать и делить. Больше ничего не понадобится.

Итак, что бы понять разницу между просто таблицей чисел и тензором достаточно...

Достаточно 3х шагов:

  • Нужно понять что числа бывают разные.
  • Нужно понять что такое линейность.
  • Нужно понять что такое вектор.

Будет довольно легко, но придётся чуть-чуть приложить усилия для понимания.

Я признаюсь что нигде не видел такого объяснения, которое попытаюсь дать я (возможно оно где-то есть, хз), обычно начинают сразу с определения тензоров или в лучшем случае с векторов. Мне кажется что так объяснять не надо, и я постараюсь сделать это по другому, но так как я пишу это первый раз, то... получится как получится.

Приступим...

Числа бывают разные.

Что значит что числа бывают разные? То, что 5 это не 7, ясно, речь о другом, о том, что числа не всегда можно складывать или умножать.

Как так? Почему не всегда? Я объясню на примере.

Вот есть два числа: 5 и 7, мы можем сложить их и получим 12, отлично.

Теперь важный шаг для понимания, числа могут нести разный смысл, например если я подразумеваю что у меня есть 5 яблок и 7 яблок то их сумма даст мне 12 яблок, все логично и привычно, но что если у меня есть 5 яблок и 7 литров сока, если я сложу их, я получу как и раньше 12
НО 12 ЧЕГО?
Яблоколитров? Литрояблок? Не понятно, мы ведь сложили штуки с литрами.

(аналогичный эффект мы получим если попытаемся сложить например минуты с килограммами, градусы с дюймами, или к скорости прибавим плотность, ...)

Если числа имеют разный смысл, разную размерность, то просто так мы не можем их сложить. Точнее сказать, можем, но получится что-то не понятное.

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

То есть, важно понять что 5 штук яблок и 5 литров сока это немного разные пятёрки, мы не можем просто так их сложить если хотим получить что-то вразумительное с точки зрения размерностей.

Вот здесь мы приближается к понятию векторного пространства, но пока мы не будем его так называть (да и вообще не будем, можно обойтись и без него).

То есть 5 яблок живут в как бы пространстве яблок, там живут и прочие числа имеющие смысл количества яблок: 6, 9, 457, и тд..

И 7 литров сока живут в своём как бы пространстве (в своём мире) литров сока (я имею ввиду число 7, а не сок, сок находится в нашем мире, его можно выпить). Мы интуитивно понимаем это называя одни объекты литрами, а другие штуками.

Это как 2 параллельных мира, поэтому мы не можем оперировать этими числами напрямую, в начале их нужно поместить в одно пространство (в один мир): либо штуки преобразовать в литры, либо литры в штуки, либо и то и другое преобразовать во что-то третье, например в калории или килограммы.

Переместим литры в штуки, для этого нам нужен закон, сколько яблок нужно что бы получить 1 литр сока? Допустим 10 яблок, для примера. (условимся добавлять букву "я" если число обозначает яблоки и букву "л" если число обозначает литры)

Теперь у нас есть закон: 10я/л.

Теперь мы можем сложить яблоки и литры в пространстве размерности яблок, 5я + 7л = 5я + 7л*10я/л = 75я.

(Здесь литры сократятся так как мы умножаем на них и делим, если интересно, подробнее, можете почитать статью "Как самостоятельно придумывать уравнения?" там подробно описано как это работает в широком контексте с кучей примеров, это знание применяется во всей математике, но жалко что этому не учат в школе, хотя я надеюсь что будут в будущем)

А это уже начинает иметь смысл, то есть если у нас есть 75 яблок мы можем отложить 5 из них и из остальных выжить сок и получим ровно 7 литров, это эквивалент яблок.

Это было прямое преобразование, мы 7 умножали на 10.

То же самое можно проделать если яблоки перевести в литры и сложить их: 5я + 7л = 5я/10я/л + 7л = 0.5л + 7л = 7.5л

(в этом случае уже сократились яблоки)

Здесь мы уже не умножали, а делили на 10. Но на самом деле это нужно было бы проделать иначе, нужно выразить яблоки через литры из нашего закона: 10я/л --> 0.1л/я (из 1 яблока получаем 0.1 литра = 100 мл сока).

Теперь получаем: 5я + 7л = 5я*0.1л/я + 7л = 7.5л

То есть в одном случае мы умножали на просто 10, а в другом на число обратное 10, т.е. на 0.1.

-2

Это как бы преобразование координат, одна шкала сжата по отношению к другой и что бы число отмеченное на одной шкале преобразовать в число на другой шкале нужно умножать на 10 либо на 0.1.

Поясню подробнее логику перемещения между шкалами.

Отметьте на нижней шкале одно деление.
Буквально видно глазами что оно в 10 раз меньше чем на верхней шкале, это понятно. Теперь когда мы что-то переносим, мы переносим
деления, а значит одно деление на нижней шкале перейдет в одно деление на верхней, это аналогично отождествлению 1я=1л. То есть при таком преобразовании фактически нижнее деление как-бы растянется в 10 раз относительно своего исходного размера. Для того что бы такого не случилось нужно умножить его на число обратное к 10, то есть на 0.1 и тогда нижняя шкала сохранит свой размер. Казалось бы, шкала и так маленькая и мы ещё её уменьшаем, но присмотритесь, маленькая шкала при переносе растягивается и мы её уменьшаем что бы скомпенсировать это растяжение на большей шкале.

То есть вместо такого преобразования, 1 к 1 :

-3

Мы хотим и получим преобразование с сохранением размера нашей маленькой шкалы:

-4

Тоже самое работает и в отношении преобразования большой шкалы в малую, если мы просто перенесем деления 1 к 1, то получим похожую картину, большое деление уменьшится в 10 раз:

-5

И что бы оно не изменилось его нужно увеличить, причем именно в 10 раз, тогда получится такое преобразование:

-6

Именно это и происходит когда мы яблоки делили на 10 при преобразовании в литры, и литры умножали на 10 при преобразовании в яблоки, а не наоборот (иногда кажется что нужно делать наоборот, раз литры такие большие их нужно поделить на 10, а раз яблоки такие маленькие их нужно умножить на 10, но это не так, всё как раз наоборот, логику "почему?" я описал)

Это важное свойство, я бы сказал ключевое, которое в будущем очень понадобится, аналогом этого будет обычная и обратная матрица для векторов, и поднятие/опускание индексов для тензоров. Смысл практически тот же, только названия другие.

То есть давайте запишем закон преобразования на будущее, он будет таков.

Обозначим величину в одной шкале Х (пусть это будет наша нижняя шкала, шкала яблок), на другой Y (пусть это будет верхняя шкала, шкала литров) и наш закон преобразования обозначим D (у нас D было равно 10я/л).

Теперь закон:

X = Y*D

Y = X*D^(-1) = X/D

Здесь D^(-1) это величина обратная (к) D, можно было бы придумать обозначение и покороче, но такое более наглядное и универсальное. В книжках и статьях обычно пишут в таком виде:

-7

То что D^(-1) и D взаимообратные иллюстрируется следующим законом:

D*D^(-1) = D^(1)*D^(-1) = D^(1-1) = D^0 = 1

-8

Линейность.

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

f(a*x + b*y) = a*f(x) + b*f(y)

Что это значит? Что это за свойство?

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

Это всё равно не очень понятно, поэтому я приведу пример, возможно не самый удачный но забавный.

Пусть есть такая ситуация, вы купили кроссовки вырабатывающие вам биткойны за бег в них (звучит как начало анекдота), вы решили сделать забег и он состоит как-бы из двух дистанций, первой и второй))).

Пусть дистанции отличаются тем что одну вы бежите по берегу\песку, а вторую по асфальтированной дороге (или ещё где-то, это не важно). Каждую дистанцию вы можете представить как среднюю длину шага х умноженную на количество шагов на этой дистанции а, получается первая пройденная дистанция это а*х, то же самое и на второй дистанции, обозначим количество шагов на ней буквой b, и среднюю длину шага за у, тогда вся пройденная вторая дистанция равна b*у.

Функцией f() будем обозначать количество заработанных биткойнов.

Теперь линейность, по формуле выше.

Количество биткойнов заработанное со всего забега будет зависеть от пройденной суммарной дистанции, то есть f(a*x + b*y)

Но количество заработанных биткойнов так же можно вычислить и иным способом. Следите.

Суммарный заработок всего забега равен сумме заработков на каждой дистанции, то есть f(a*x + b*y) = f(a*x) + f(b*y)

И в тоже время заработок на каждой дистанции равен сумме заработков на каждом шаге длиной х и у, то есть много маленьких заработков:

f(a*x) = f(x)+f(x)+f(x)+f(x)+f(x)+... (а шагов) = а*f(x)
f(b*y) = f(y)+f(y)+f(y)+f(y)+f(y)+... (
b шагов) = b*f(y)

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

Получается суммарный заработок за весь забег можно выразить как количество биткойнов за средний шаг (х и у) на каждой дистанции, умноженный на количество этих шагов (а и b) на каждой дистанции:

f(a*x + b*y) = a*f(x) + b*f(y)

Общий заработок на всех шагах равен сумме заработков на каждом шаге.

Вот когда некоторый процесс или система может быть разложена также, говорят что он\она\оно обладает свойством линейности.
То есть
РЕЗУЛЬТАТ СОВОКУПНОСТИ МОЖНО ПРЕДСТАВИТЬ КАК СОВОКУПНОСТЬ РЕЗУЛЬТАТОВ!

Вообще во многих (почти во всех) областях математики эта идея проходит красной нитью, но не всегда она называется линейностью.

Разумеется линейность - очень большая тема и всего о ней не расскажешь, но её очень удобно применять. В частности матрицы и тензоры это воплощение линейности, и о них я немного расскажу ниже.

Векторы.

В общем-то бОльшая часть уже пройдена, остался последний шаг - понимание того, что такое вектор. Как только вы это поймете, понять что такое тензор не составит особого труда.

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

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

Когда вы слышите или читаете что, есть такой-то такой-то вектор, это автоматически (причем абсолютно всегда!) подразумевает что уже введено некоторое векторное пространство, ибо векторы в другом не живут. И это автоматически означает что существует особый объект, матрица преобразования вектора между базисами.

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

Мы можем не описывать эту матрицу преобразования, мы можем даже не пользоваться ей, но если мы ведем речь о векторах подразумевается что она есть (или мы можем её заполучить), векторы не существуют в отрыве от неё, иначе это не векторы, а просто наборы чисел которые меняются как им(или ещё кому-то) захочется.

Дело в том, что преобразуя вектор при помощи этой матрицы преобразования, вектор не изменяет своего размера. То есть, во всех координатах "стрелка" останется "стрелкой", она не удлинится и не сожмется. Это основное свойство, именно с этой целью вектор и существует в математике, для этого он и нужен, что бы при преобразованиях координат сохраняться. Просто набор чисел, даже если они записаны в столбец не обладает таким свойством.

Я опишу это немного иначе. Представьте что вы говорите о "водителе", каком-то водителе, им может быть например ваш сосед или друг, не важно. Что важно, так это то, что говоря о "водителе" вы автоматически подразумеваете что существует некий "автомобиль" который "водитель" водит. Вы можете не говорить о автомобиле, но он негласно подразумевается. И действительно, если подумать, "водители" не существуют без "автомобилей", так же как и не существует "автомобилей" без "водителей". Не углубляясь в споры по поводу автопилотирования, вы понимаете что и "водитель", и "автомобиль" существуют только и только в комплексе, вместе, в совокупности.
Тысячу лет назад не было "автомобилей" и не было "водителей", да и откуда взяться "водителю" если ему нечего водить?
Также и векторы, существуют в совокупности с векторным пространством, о нем можно не упоминать, ведя разговор о векторах, но оно негласно подразумевается.

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

Вектор это такой объект которые можно записать как некоторый набор чисел (чаще столбец): например вектор на плоскости (3: 7), или вектор в пространстве (-2: 1.64: 5), или даже вектор в одномерном пространстве (2.6), как видно это просто число.

Вы уже знаете как складываются числа, векторы складываются почти так же, покомпонентно как числа, вот пример:

(2; 4) + (7; 11) = (2+7; 4+11) = (9; 15)

Будто мы просто просуммировали два разных набора, но в совокупности.

А ещё мы можем умножить вектор на число, тогда умножаются все его компоненты, вот пример с числом 10 и вектором (2; 5):

10*(2; 5) = (10*2; 10*5) = (20; 50)

Более того, обратите внимание на такое важное свойство чисел (даже не векторов, а просто чисел), мы можем представить любое число как сумму двух других каких-то чисел, примеры для числа 7:

7 = 1+6 = 3+4 = 3,5 + 3,5 = 10 - 3 = 1007,64 - 1000,64 = ...

То же покомпонентно мы можем сделать и с вектором,
пример для вектора (2; 5):

(2; 5) = (1+1; 5+0) = (12-10; 1+4) = (1,7 + 0,3; 6,49 - 1,49) = ...

Но это по определению эквивалентно сложению векторов:

(1+1; 5+0) = (1; 5) + (1; 0)

(12-10; 1+4) = (12; 1) + (-10; 4)

(1,7 + 0,3; 6,49 - 1,49) = (1,7; 6,49) + (0,3; -1,49)

Ничего не угадываете? это похоже на линейность:

f(a*x + b*y) = a*f(x) + b*f(y)

Более того, раз мы уже можем представить любой вектор, как сумму каких-нибудь двух других векторов, то мы можем выбрать эти векторы какими-нибудь определенными (удобными для той или иной цели).

Зачем? ну например у нас есть большой набор разных векторов и мы, задав определенный набор векторов через которые будем представлять данные векторы, можем свести все только к сумме этих выбранных комбинаций векторов. Посмотрим на примере.

Будем называть наши выбранные векторы базисными, пусть это будут два простейших вектора: (1; 0) и (0; 1)

Теперь, например, я могу представить любой вектор как совокупность базисных, вот пример для вектора (2; 5):

(2; 5) = (2; 0) + (0; 5) = 2*(1; 0) + 5*(0; 1)

То есть в данном базисе коэффициенты при базисных векторах равны 2 и 5 соответственно.

Вам может быть некомфортно и непонятно "что это?" и "зачем это?", зачем складывать какие-то числа в скобках?.. это до боли знакомые мне чувства, если это так, то вы можете пока что представлять что это игра. Есть игры в слова, есть игры где нужно переставлять буквы в слове, а это игра в которой нужно вот так складывать числа в скобках, по правилам сложения.

Давайте возьмем другие базисные векторы и посмотрим что получится с ними, пусть теперь наши векторы будут например такими: (2; 0) и (0; 10)

Тогда для вектора (2; 5):

(2; 5) = (2; 0) + (0; 5) = 1*(2; 0) + 0,5*(0; 10)

Как видим коэффициенты изменились теперь они равны 1 и 0.5, но вектор не изменился, изменилось лишь представление вектора. То есть в другом базисе этот же вектор представлен другим набором коэффициентов.

Причем, заметьте, мы увеличили один базисный вектор в два раза:

(1; 0) --> (2; 0)

И коэффициент при нем уменьшился в 2 раза: 2 --> 1

А другой базисный вектор мы увеличили в 10 раз:

(0; 1) --> (0; 10)

И коэффициент при нем уменьшился в 10 раз: 5 --> 0,5

Это похоже на то что мы обсуждали в самом начале, когда преобразовывали единицы измерений и шкалы.

Векторы можно складывать и графически, визуально, например методом параллелограмма или треугольника. Метод треугольника самый простой и быстрый (просто потому, что по правилам этого метода нужно меньше рисовать). Метод прост: нужно все векторы которые вы скалываете, не изменяя направлений и длин, перенести составив цепочку из векторов, причем важно начало переносимого вектора нужно ставить на окончание другого вектора, а после соединить начало и конец полученной цепочки векторов, это соединение и будет искомым вектором равным сумме всех векторов. Звучит возможно непонятно, один раз проще увидеть чем сто раз прочесть.

Возьмём для примера два таких вектора, синий и красный. Можно было бы дать им имена, но в данном случае нет необходимости.

-9

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

-10

Получим вот такой результат

-11

Теперь нужно соединить начало и конец цепочки другим вектором, я нарисую его фиолетовым

-12

фиолетовый вектор это и есть суммарный вектор. Вообще этим методом пользуются не так часто (в пространстве сложно складывать векторы подобным способом, а в высоких измерениях почти не возможно), обычно в математических целях работают с численным представлением векторов или вообще работают с векторами как с объектами векторного пространства даже не вдаваясь в их размеры и направления, но для наших целей этот метод подходит он даёт наглядное представление суммирования векторов.

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

-13

Эти проекции, если вы заметили, аналогичны представлению вектора как суммы двух других векторов. Действительно давайте я перемещу синие проекции так, что бы они образовали цепочку по правилу треугольника и наш синий вектор будет соединять начало и конец цепочки, т.е. будет их суммой, а это значит что я могу использовать или один синий вектор или две его проекции, результат будет одинаков.
А теперь посмотрим на проекции фиолетового вектора, я нарисую их чуть ниже красных и синих проекций (если я нарисую проекции фиолетового вектора поверх проекций синего и красного векторов, они будут не видны, а нам важно видеть их, так что я нарисую проекции ниже, но вы должны понимать что они идут ровно по черной оси, как и синие и красные проекции)

-14

можно заметить что длины фиолетовых проекций равны сумме длин красных и синих проекций, это то же самое что мы делали когда складывали векторы в численном виде:
(2; 3) + (6; 1) = (8; 4)

-15

Векторы сложились покомпонентно в численном виде и по осям в геометрическом виде. В конце объяснения я покажу как это свойство наследуется тензорами и возводится в абсолют, но для начала нам нужно ещё узнать немного информации о умножении векторов, точнее о умножении вектора на матрицу.

Всю теорию по матрицам нам знать не нужно, достаточно знать что матрицы есть, они представляют собой таблицу чисел и их можно складывать и перемножать (можно ещё много чего делать, но мы ограничимся только этим).

Матрицы бывают разных размеров и складываются как векторы покомпонентно. Вот пример матриц и их сложения:

-16

Есть только одно правило, для сложения нужны матрицы одного размера, одной формы (если так можно выразиться), т.е. если матрица имеет два столбца и две строки, то нужно складывать её только с матрицей имеющей так же два столбца и две строки. В общем-то складываются как и векторы покомпонентно, только матрицы "толще" чем векторы.

Умножение чуть замудрённей, но тоже не сложно если вникнуть. Умножать нужно матрицы по правилу: строка левой матрицы умножается на столбец правой и потом результаты перемножений складываются.
Это не случайно, тому есть ряд причин, но они за пределами нашего дискурса, поэтому просто считайте и это тоже некоторой игрой, с особыми странными правилами. Вас же не смущают правила шахмат или шашек? а ведь они выдуманы наобум, так же и для матриц, только здесь правила умножения в отличие от шахмат выбраны обоснованно и имеют ряд полезных следствий и применений.

Посмотрим на примере умножения двух таких "квадратных" матриц

-17

Давайте умножим по порядку, сначала первая строка на первый столбец

-18

Получаем 1*0+2*1, так и запишем в результирующую матрицу (хотя можно сразу посчитать 1*0+2*1=2). Я напишу и сумму и результат

-19

теперь вторая строка, так же, умножается на первый столбец

-20

Здесь имеем 3*0+4*1=4

-21

Дальше всё сначала, но уже умножаем на второй столбец

-22

Имеем 1*1+2*0=1

-23

И осталось умножить вторую строку на второй столбец

-24

Получаем 3*1+4*0=3

-25

Возможно вы заметили что изначальная матрица и результирующая зеркальны

-26

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

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

-27

Давайте возьмем некоторые базисные векторы и посмотрим что получится с ними, пусть теперь наши базисные векторы будут например такими:
(2; 0) и (0; 10)

Тогда для вектора (2; 5) имеем:

(2; 5) = (2; 0) + (0; 5) = 1*(2; 0) + 0,5*(0; 10)

Как видим коэффициенты изменились теперь они равны 1 и 0.5, но вектор не изменился, изменилось лишь представление вектора. То есть в другом базисе этот же вектор представлен другим набором коэффициентов.

Причем, заметьте, мы увеличили один базисный вектор в два раза:

(1; 0) --> (2; 0)

И коэффициент при нем уменьшился в 2 раза: 2 --> 1

А другой базисный вектор мы увеличили в 10 раз:

(0; 1) --> (0; 10)

И коэффициент при нем уменьшился в 10 раз: 5 --> 0,5

Это похоже на то что мы обсуждали в самом начале, когда преобразовывали единицы измерений и шкалы.


Внимательно присмотритесь к разложению вектора (2; 5) в новом базисе:
(2; 5) = (2; 0) + (0; 5) =
1*(2; 0) + 0,5*(0; 10)

Что мы видим? А видим мы здесь матричное умножение, строка умножается на столбец. Лучше это записать так:

-28

Вектор (1; 0.5) в новом базисе (2; 0) и (0; 10) это тот же вектор что и вектор (2; 5) в старом базисе (1; 0) и (0; 1).

Можно даже записать как-то так, для наглядности:

-29

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

Ранее когда мы преобразовывали единицы измерений и шкалы, нам приходилось делить величину на коэффициент преобразования что бы произвести верное преобразование, здесь почти тоже самое. Только лучше заменить деление на умножение!, но умножение не любое, а на обратный элемент: обратный элемент как раз и находится делением (в случае операции умножения). Как я уже говорил, более подробно про обратные элементы описано в статье "Как самостоятельно придумывать уравнения?".

В данном случае, в случае матриц, нужно сделать то же самое: умножить на обратный элемент, но здесь мы уже работаем не с числами, а с списками чисел в виде векторов и матриц, и потому обратный элемент это будет обратная матрица, обозначается она чаще всего как матрица с степенью -1. Обратная матрица это такая что если умножить её на обычную, то получим единичную матрицу:

-30

Вот так и получается что если умножить вектор (2; 5) на обратную матрицу нового базиса, получим вектор (1; 0.5) в новом базисе.
При этом если новый базис стал больше, вектор уменьшится, что бы сохранить размер, а если новый базис уменьшился, вектор растянется и опять же останется исходного размера, как и в случае с преобразованиями между разными шкалами.

А что же происходит с вектором геометрически?

Вот в этом и кроется суть понимания того, что такое вектор и что такое тензор. Здесь нам понадобится всё то, о чём мы говорили ранее. Но теперь будет много рисунков для лучшего понимания, для наглядности.

Начнем с уже знакомого вектора (2; 5) в базисе (1; 0) и (0; 1)

-31

Обычный вектор... ничего примечательного. Даже визуально видно что этот вектор является суммой 2*(1; 0) + 5*(0; 1) = (2; 5)
Давайте рассмотрим его в другом базисе. Любом другом. Пусть он будет вот такой, (2; 1) и (-1; 2)

-32

Теперь наш вектор будет раскладываться уже чуть иначе:

-33

Визуально видно что в новом базисе проекции на оси стали другие, причем примерно одинаковые (правая проекция чуть длиннее).
Если мы их измерим в новых единицах, получим примерно такой результат:

-34

Каждая из фиолетовых(розовых) стрелок больше аналогичной синей стрелки примерно в 1.8 и 1.6 раз соответственно. Это видно визуально.

А что будет если мы посчитаем это же через формулы?

Это сделать даже проще, нужно просто обратную матрицу с значениями нового базиса (2; 1) и (-1; 2), умножить на наш вектор (2; 5):

-35

Т.е. что мы получили говоря о числах 1.8 и 1.6, а вот что, это коэффициенты при базисных векторах, и они же являются "вектором" в этом базисе.
Это значит что должно быть справедливо равенство
1.8*(2; 1) + 1.6*(-1; 2) = (2; 5)

Давайте проверим.

(1.8*2; 1.8*1) + (-1.6*1; 1.6*2) = (2; 5)
(3.6; 1.8) + (-1.6; 3.2) = (2; 5)
(3.6 - 1.6 ; 1.8 + 3.2) = (2; 5)
(2; 5) = (2; 5)

Вроде совпадает.

А теперь нужно пристальнее понять что происходит при такой смене базиса.

При смене базиса у нас не просто меняются проекции, а мы как бы раскладываем старый базис в новом. Вот как это происходит:

-36

Наша изначальная запись (2; 1) как раз это и означает что теперь в качестве одного основного вектора мы будем брать совокупность 2 горизонтальных и 1 вертикального текущего базисного вектора,
и соответственно запись (-1; 2) означает что мы будем брать в качестве основного вектора совокупность 2 вертикальных и -1 горизонтального, минус всего лишь означает что вектор направлен в противоположную сторону.

Т.е. когда мы раскладываем вектор в новом базисе, мы делаем это в 2 этапа.
сначала мы раскладываем его в этом базисе

-37

А потом каждую проекцию раскладываем ещё раз но уже в старом базисе, ведь эти проекции это тоже векторы:

-38

Теперь, если мы сложим эти вторые проекции мы получим проекции вектора в старом базисе:

-39

Это чем-то похоже на конструктор, один вектор мы разбили на два кусочка, потом каждый из них разбили снова на 2 кусочка, а потом собрали их иначе, но получили снова то же самое. В этом основная суть векторов и вообще всей линейной алгебры.

Именно это происходит в формуле преобразования вектора между базисами, поэлементно вектор разбивается на составляющие, они снова разбиваются на части и те складываются в новом порядке в другое представление всё того же вектора.
Т.е.
при изменении базиса сам вектор не меняется, меняются только числа которые его представляют.

Визуально вы видели что стрелка остаётся одинаковой в любом базисе:

-40

И в любых других она останется такой же, а вот коэффициенты зависят от базиса.
Это пригождается когда мы можем выбрать удобный для нас базис, например такой, в нём вектор становится вообще одномерным, как бы аналогом просто числа:

-41

Причем здесь проекция вектора (2; 5) на одну ось нулевая, а на другую равна длине вектора: 5.385 (находится как корень суммы квадратов длин, по теореме Пифагора)

-42

Это простой тензор.

Тензоры.

В общем-то этот долгий путь закончен, теперь вы знаете что такое тензор.

Тензор - это объект который ведёт себя так, что он не изменяет своей длины при изменении базиса, его элементы могут меняться, преобразовываться, а он как и вектор который мы видели ранее будет оставаться неизменным. Это основная цель для которой тензор создавался.
И преобразуется между базисами он так же как и вектор: он расщепляется на составляющие, те расщепляются ещё раз, потом пересобираются и получают новое представление тензора, который при этом не изменился по длине.
Разумеется тензоры чаще всего имеют гораздо больше чисел в своём представлении, но концептуально преобразуются так же, разница только в обилии чисел.

Всё это возможно благодаря линейности, которую мы тоже затронули. Это свойство систем такое, что результат совокупности эквивалентен совокупности результатов...

Благодаря ней вектор\тензор может быть разложен в совокупность векторов\тезоров, эти совокупности могут быть снова разложены в меньшие совокупности, а те в свою очередь могут быть собраны в новые совокупности и все они при сложении дадут один и тот же результат, т.е. длина вектора\тензора не изменяется.

Я должен ещё упомянуть что визуально тензор можно представлять как таблицу чисел или даже многомерную таблицу числе по типу такой как на рисунке который я нашёл в интернете (мне было лень рисовать свою), но такую таблицу, которая меняется при переходе от одного базиса к другому определённым образом при помощи закона преобразования, как у вектора...

-43

(строго говоря то, что на картинке - это не тензор, так как не преобразуется между базисами, но объёмная таблица может выглядеть так же)

Это только понимание того, что это за объект и если вы это почувствовали, могу вас поздравить, теперь вы чувствуете тензоры)), ура, в повседневной жизни вам вряд ли это пригодится, но теперь возможно вы будете лучше понимать что имеют ввиду когда говорят про тензоры их преобразования между базисами.

По крайней мере я надеюсь что объяснил это максимально доходчиво...

________________________________

П.С. Мы даже не касались таких вещей как обозначение тензоров и операций с ними и их индексами, виды тензоров, и тд.. Всё изложенное это только представление о том, что такое тензор.

Возможно когда-нибудь я напишу продолжение про тензоры в Теории Относительности, раз уж теперь более-менее ясно что это такое. Там тоже нет ничего сложного, скорее нужна привычка.

________________________________

П.П.С. Статья про Теорию относительности всё же написана, не совсем про тензоры конечно, но за то про само уравнение Эйнштейна, она называется: "Что такое "уравнение Эйнштейна"?"