Cross[a,b]
ベクトル a と b の外積を与える.
Cross 
Cross[a,b]
ベクトル a と b の外積を与える.
詳細
- a と b が長さ3のリストのときは(三次元ベクトルに相当),Cross[a,b]も長さ3のリストになる.
- StandardFormおよびInputFormでは,Cross[a,b]を使う代りに ab,a
cross
b またはa\[Cross]b を使っても入力できる.\[Cross]と\[Times]の違いに注意すること. - Crossは非対称である.つまり,Cross[b,a] = -Cross[a,b]である. »
- Cross[{x,y}]は垂直ベクトル{-y,x}を与える.
- 一般に,長さ n のベクトル積Cross[v1,v2,…,vn-1]は完全に非対称な積になり,vi すべてに直交した長さ n のベクトルを与える.
- Cross[v1,v2,…]は,n 次元空間における単一形としてみたベクトル vi の双対(ホッジ(Hodge)の星演算子)を与える.
例題
すべて開く すべて閉じる例 (3)
u = {1, 2, -1};
v = {-1, 1, 0};w = Cross[u, v]Graphics3D[{Black, Arrow[Tube[{{0, 0, 0}, u}]], Arrow[Tube[{{0, 0, 0}, v}]], StandardRed, Arrow[{{0, 0, 0}, w}], White, InfinitePlane[{0, 0, 0}, {u, v}]}, Axes -> True, PlotRangePadding -> 2]Cross[{1, Sqrt[3]}]Graphics[{Arrow[{{0, 0}, {1, Sqrt[3]}}], StandardRed, Arrow[{{0, 0}, {-Sqrt[3], 1}}]}, Axes -> True]{a, b, c}⨯{x, y, z}スコープ (9)
Cross[{3.2, 4.2, 5.2}, {0.75, 0.09, 0.06}]Cross[{1.3 + I, 2, 3 - 2 I}, {6. + I, 4, 5 - 7 I}]{1, 2, 3}⨯{1, 8, 9}{u, v} = RandomReal[4, {2, 3}, WorkingPrecision -> 20]u⨯vCross[{x, 0, x}, {x, y, 2x}]QuantityArrayベクトルの外積を計算する:
e = QuantityArray[{1, 2, 3}, "Newtons" / "Coulombs"]b = QuantityArray[{4, 5, 6}, "Teslas"]QuantityArrayの構造は保持されている:
e⨯b%//MatrixFormCross[{x, y}]{x, y}.%a = {1, 2, 3};b = {4, 5, 6};Crossが反対称であることを確認する:
Cross[a, b] == -Cross[b, a]{a, b, c} = {{1, 2, 3, 4}, {1, 4, 9, 16}, {1, 8, 27, 81}};d = a⨯b⨯c{d.a, d.b, d.c}可能なすべての積順を計算する.2つのベクトルを入れ替えても符号が変わるだけである:
Cross @@@ Permutations[{a, b, c}]アプリケーション (10)
幾何学のアプリケーション (5)
u = {1, 2, 3};
v = {1, 4, 9};w = Cross[u, v]{w.u, w.v}w.{x, y, z} == 0u = RandomReal[1, 2]v = Cross[u]u.vn 次元における n-1個のベクトルに直交するベクトルを求める:
n = 5;
uu = RandomReal[1, {n - 1, n}];
v = Apply[Cross, uu]Chop[uu.v]a = {1, 2, -2};
b = {1, -1, 2};
Norm[a⨯b]Areaを使った直接計算と比較する:
Area[Parallelepiped[{0, 0, 0}, {a, b}]]Norm[a]Norm[b]Sin[VectorAngle[a, b]]Graphics3D[Parallelepiped[{0, 0, 0}, {a, b}]]フレネ・セレ(Frenet–Serret)の系は全空間曲線の特性をベクトル基底とスカラー関数で符号化する.次の曲線について考える:
c[t_] := {Cos[t], Sin[t], (t/2π)}接線,法線,従法線の各ベクトルを最初の2つの導関数の外積によって定義する:
{Subscript[e, 1], Subscript[e, 2], Subscript[e, 3]} = Simplify[{Normalize[c'[t]], Normalize[c'[t]⨯(c''[t]⨯c'[t])], Normalize[c'[t]⨯c''[t]]}, t∈Reals]こらら3つのベクトルは,
についての右手系の直交基底を定義する:
{Table[Subscript[e, i].Subscript[e, j], {i, 3}, {j, 3}], Subscript[e, 1]⨯Subscript[e, 2] == Subscript[e, 3]}//Simplify{κ, τ} = Simplify[{(Norm[c''[t]⨯c'[t]]/Norm[c'[t]]^3), (c'[t].(c''[t]⨯c'''[t])/Norm[c'[t]⨯c''[t]]^2)}, t∈Reals]FrenetSerretSystemを使って答を確認する:
Simplify[{{κ, τ}, {Subscript[e, 1], Subscript[e, 2], Subscript[e, 3]}} == FrenetSerretSystem[c[t], t], t∈Reals]DynamicModule[{s}, Labeled[Show[ParametricPlot3D[c[t], {t, 0, 6π}, PlotRangePadding -> {.5, .5, .9}], Graphics3D[{AbsoluteThickness[2], StandardBlue, Arrow[{c[t], c[t] + Subscript[e, 1]}], StandardRed, Arrow[{c[t], c[t] + Subscript[e, 2]}], StandardPurple, Arrow[{c[t], c[t] + Subscript[e, 3]}]}] /. t -> Dynamic[s]], Animator[Dynamic[s], {0, 6π}], Top]]物理のアプリケーション (5)
F = Quantity[{0, 0, -10}, "Newtons"];
r = Quantity[{1.5, 3.2, 1.25}, "Meters"];r⨯Fm = Quantity[3, "Kilograms"];
v = Quantity[{1.5, 2.3, -3.4}, "Meters" / "Seconds"];
r = Quantity[{2.5, -3.3, 1.4}, "Meters"];r⨯(m v)電荷
,速度
で
の磁場を正の
方向に移動する粒子の磁力を求める:
q = Quantity[2, "Coulombs"];
v = QuantityArray[{3, -4, 5}, "Meters" / "Seconds"];
B = QuantityArray[{0, 0, 0.075}, "Teslas"];q v ⨯BUnitSimplifyを使って期待される単位ニュートンを求め,MatrixFormを使ってベクトルをフォーマットする:
UnitSimplify[%]//MatrixForm
軸から固定の距離で回転するように制約された粒子について考える:
r[t_] := {0, Cos[t^2], Sin[t^2]}ω = (r'[t]⨯r''[t]/r'[t].r'[t])//Simplifyr'[t] == ω⨯r[t]Subscript[a, perp] = ω⨯r'[t]Simplify[Norm[Subscript[a, perp]] == Norm[ω]Norm[r'[t]] == (r'[t].r'[t]/Norm[r[t]]), t∈Reals]Simplify[Norm[Subscript[a, perp]] == (r'[t].r'[t]/Norm[r[t]]), t∈Reals]α = D[ω, t]Subscript[a, par] = α⨯r[t]r''[t] == Subscript[a, par] + Subscript[a, perp]固定の三次元ベクトルについての外積は行列の乗算で表すことができるが,これは回転運動を学ぶ際に役に立つ.線形演算子
を表す反対称行列を構築する.
は
軸の周りの角速度である:
Overscript[ω, ⇀] = {0, 0, 2};(Subscript[ℒ, L] = Map[Cross[#, Overscript[ω, ⇀]]&, IdentityMatrix[3]])//MatrixFormSubscript[ℒ, L]. {x, y, z} == Overscript[ω, ⇀]⨯{x, y, z}時点
における回転行列は,前の行列を
倍した行列指数である:
(rot[t_] = MatrixExp[t Subscript[ℒ, L]])//MatrixFormRotationMatrixを使って
を確認する:
rot[t] == RotationMatrix[Norm[Overscript[ω, ⇀]]t, {0, 0, 1}]Overscript[r, ⇀] = rot[t].{x, y, z}Overscript[v, ⇀] = Overscript[ω, ⇀]⨯Overscript[r, ⇀](Overscript[v, ⇀]⨯Overscript[ω, ⇀]/Overscript[ω, ⇀].Overscript[ω, ⇀])//ExpandWith[{w = Overscript[ω, ⇀], x = rot[s].{1, 1, 1}}, Animate[Legended[Graphics3D[{AbsoluteThickness[3], StandardRed, Arrow[{{0, 0, 0}, w}], StandardBlue, Arrow[{{0, 0, 0}, x}], StandardCyan, Arrow[{{0, 0, 1}, x}], StandardPurple, Translate[Arrow[{{0, 0, 0}, w⨯x}], x]}, PlotRange -> {{-3, 3}, {-3, 3}, {0, 2}}], SwatchLegend[{StandardRed, StandardBlue, StandardPurple, StandardCyan}, {ω, r[t], v[t] == ω⨯r[t], Subscript[r, "⟂"] == (v[t]⨯ω/ω.ω)}]], {{s, 0, t}, 0, 2π}]]特性と関係 (10)
u と v が線形に非依存の場合,u×v は非零で u と v に直交する:
{u, v} = RandomInteger[{-9, 9}, {2, 3}]w = Cross[u, v]{u.w, v.w}u = RandomReal[1, 3];
v = RandomReal[1] u;Chop[Cross[u, v]]三次元ベクトル
を求める.ただし,
は
と
の間の角度である:
{u1, u2} = RandomReal[1, {2, 3}];
Norm[u1⨯u2] == Norm[u1]Norm[u2]Sin[VectorAngle[u1, u2]]Cross[u1,…,uk]のノルムは uiが跨る k 次元平行六面体の測度値である:
{u1, u2} = {{5, -9, 6}, {-7, 5, 3}};
p = Parallelepiped[{0, 0, 0}, {u1, u2}];
Norm[u1⨯u2] == Area[p] == RegionMeasure[p, 2]{v1, v2, v3} = {{8, -5, 5, -1}, {6, 7, 8, -2}, {-7, 6, -3, 2}};
p = Parallelepiped[{0, 0, 0, 0}, {v1, v2, v3}];
Norm[v1⨯v2⨯v3] == Volume[p] == RegionMeasure[p, 3]Crossは反対称である:
{u, v} = RandomReal[1, {2, 3}];Cross[u, v] == -Cross[v, u]Crossは,各引数で線形である:
Subscript[u, 1] = {Subscript[x, 1], Subscript[y, 1], Subscript[z, 1]};
Subscript[u, 2] = {Subscript[x, 2], Subscript[y, 2], Subscript[z, 2]};
Subscript[u, 3] = {Subscript[x, 3], Subscript[y, 3], Subscript[z, 3]};Expand[Cross[a Subscript[u, 1] + Subscript[u, 3], Subscript[u, 2]] == a Cross[Subscript[u, 1], Subscript[u, 2]] + Cross[Subscript[u, 3], Subscript[u, 2]]]Expand[Cross[Subscript[u, 1], b Subscript[u, 2] + Subscript[u, 3]] == b Cross[Subscript[u, 1], Subscript[u, 2]] + Cross[Subscript[u, 1], Subscript[u, 3]]]Crossは線形なので,演算子
は行列の乗算で表すことができる:
Overscript[ω, ⇀] = {Subscript[ω, x], Subscript[ω, y], Subscript[ω, z]};(Subscript[ℒ, L] = Map[Cross[#, Overscript[ω, ⇀]]&, IdentityMatrix[3]])//MatrixFormSubscript[ℒ, L].{a, b, c} == Overscript[ω, ⇀]⨯{a, b, c}(Subscript[ℒ, R] = Map[Cross[Overscript[ω, ⇀], #]&, IdentityMatrix[3]])//MatrixFormSubscript[ℒ, R].{a, b, c} == {a, b, c}⨯Overscript[ω, ⇀]これら2つの行列は,転置,あるいは反対称性のために同等の,互いの否定である:
Subscript[ℒ, R] == Transpose[Subscript[ℒ, L]] == -Subscript[ℒ, L]
次元のCrossは
ベクトルをレヴィ(Levi)-チヴィタ(Civita)テンソルに縮約したものである:
α = Array[a, {4}];
β = Array[b, {4}];
γ = Array[c, {4}];
Cross[α, β, γ] === TensorContract[αβγLeviCivitaTensor[4, List], {{1, 4}, {2, 5}, {3, 6}}]
次元の
ベクトルのCrossは,それらのテンソル積のホッジ(Hodge)双対の(
倍である:
{a, b, c, d}⨯{d, e, f, g}⨯{h, i, j, k}(4 - 1)!HodgeDual[{a, b, c, d}{d, e, f, g}{h, i, j, k}]% == %%
ベクトルのTensorWedgeのホッジ双対はそれらのベクトルのCrossと一致する:
v1 = {a, b, c};
v2 = {x, y, z};Normal@HodgeDual[v1v2] === Cross[v1, v2]v1 = {a, b, c, d};
v2 = {x, y, z, t};
v3 = {p, q, r, s};Normal@HodgeDual[v1v2v3] === Cross[v1, v2, v3]TensorWedgeは,より高階の形式を扱うことができる:
M = Array[m, {5, 5}];
Q = Array[q, {5, 5}];HodgeDual[MQ]インタラクティブな例題 (1)
-
平面上のドラッグ可能な2つのベクトル,(
軸と平行の)その外積,それらが跨る平行四辺形を可視化する:
Manipulate[
DynamicModule[{vv, ww, angles, cros},
vv = Normalize[v];ww = Normalize[w];
cros = First[PadLeft[v, 3]⨯PadLeft[w, 3]];
angles = Sort[N@{ArcTan@@vv, ArcTan@@ww}];Graphics[{IconizedObject[«x ticks»], {If[showPar, {If[cros > 0, RGBColor[1, 0.6, 0.7000000000000001, 0.5], RGBColor[0.6, 0.7000000000000001, 1, 0.5]], Polygon[{{0, 0}, v, v + w, w}]}]},
{LightDarkSwitched[GrayLevel[0]], Arrow[{{0, 0}, v}]}, {LightDarkSwitched[GrayLevel[0]], Arrow[{{0, 0}, w}]}, AbsoluteThickness[3], {If[cros < 0, RGBColor[0.4, 0.6, 1], RGBColor[0.98, 0.56, 0.17]], Circle[{0, 0}, .3, If[-Subtract@@angles < π, angles, Reverse[angles] + {0, 2π}]]}, {If[cros > 0, RGBColor[0.98, 0.56, 0.17], RGBColor[0.4, 0.6, 1]], Arrow[{{0, 0}, cros{-1 / 2, -1 / 2}}]}, Text["OverscriptBox[v, ⇀]", v 3 / 4, {1, 1}], Text["OverscriptBox[w, ⇀]", 3w / 4, {1, 1}], Text["OverscriptBox[v, ⇀] ⨯ OverscriptBox[w, ⇀]", cros{-1 / 2, -1 / 2}, {1, 1}]}, Axes -> True, PlotRange -> 3, AxesLabel -> {y, z}, ImageSize -> {400, 400}, PlotLabel -> Grid[
{{If[cros > 0, Style["acute or obtuse angle", RGBColor[0.98, 0.56, 0.17]], Style["reflex angle", RGBColor[0.4, 0.6, 1]]], Norm["OverscriptBox[v, ⇀] ⨯ OverscriptBox[w, ⇀]"] == DecimalForm[Abs[cros], {4, 3}]}}, ItemSize -> 10]]],
{{showPar, True, "show parallelogram"}, {True, False}},
{{v, {1., 0.5}}, {-3, -3}, {3, 3}, Locator, Appearance -> None, Exclusions -> {0, 0}},
{{w, {-2., 1.}}, {-3, -3}, {3, 3}, Locator, Appearance -> None, Exclusions -> {0, 0}}
]関連するガイド
-
▪
- ベクトル操作 ▪
- 行列と線形代数 ▪
- 記号的なベクトル,行列,配列
履歴
1996 で導入 (3.0)
テキスト
Wolfram Research (1996), Cross, Wolfram言語関数, https://reference.wolfram.com/language/ref/Cross.html.
CMS
Wolfram Language. 1996. "Cross." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/Cross.html.
APA
Wolfram Language. (1996). Cross. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Cross.html
BibTeX
@misc{reference.wolfram_2026_cross, author="Wolfram Research", title="{Cross}", year="1996", howpublished="\url{https://reference.wolfram.com/language/ref/Cross.html}", note=[Accessed: 13-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_cross, organization={Wolfram Research}, title={Cross}, year={1996}, url={https://reference.wolfram.com/language/ref/Cross.html}, note=[Accessed: 13-September-2026]}