tutorial. 向量表示:分量与显式偏导[math-0005]
本页聚焦两类对象:按坐标排列的Cartesian向量分量,以及保留变量和方向的显式偏导项。构造器只描述数学对象;pipeline调用才执行计算。
构造向量场[#100]
x、y、z是独立坐标,a是常数参数。三个Semantic分量按空间顺序组成向量v。这里Formula reader只负责sin(z)这个方便的短写;其结果仍是Semantic值。
term: (components (^ (var x) (num "2")) (+ (var y) (var a)) (sin (var z)))nspace requirement: ((space (var x) (var y) (var z)))
math命令用当前布局把向量渲染为列;term保留components的三个标量表达式;requirement记住它所依赖的Cartesian空间。声明没有自动进入所有计算,所以仍要显式传入事实。
构造偏导,不要和执行混淆[#101]
◆:partial只构造待计算的偏导项。它不会执行求导:
(partial (+ (^ (var x) (num "3")) (* (var a) (* (var x) (var y)))) (var x))
要执行偏导,调用pipeline:
输出对应3*x² + a*y。math-partial的坐标参数和被求导表达式都是Semantic值;空间与参数作为假设提供。对y或z求偏导会分别得到a*x和0。
为什么参数声明重要[#102]
若只知道a是scalar,系统无法推出它对x的导数为零。参数值的声明明确表达它相对独立坐标保持不变:
result requirements: ((differentiable (+ (^ (var x) (num "3")) (* (var a) (* (var x) (var y))))) (coordinate (var x)) (coordinate (var y)) (parameter (var a)) (differentiable (^ (var x) (num "3"))) (differentiable (var x)) (differentiable (* (var a) (* (var x) (var y)))) (differentiable (var a)) (differentiable (* (var x) (var y))) (differentiable (var y)))
偏导结果保留来源值的语义条件。之后复用结果时,调用者仍须提供适合当前计算的事实;不会因为以前某次计算声明过参数,就永久污染全局状态。
用列向量展示不同内容[#103]
Notation列布局不携带向量语义:
(1)
这适合手工排版。若后续要计算div或curl,则应构造◆:components并附上有序space。