ti-basic - TI-NSpire 动态创建向量叉积变量

标签 ti-basic ti-nspire

好吧,我正在尝试在 TI-NSpire 中创建一个叉积函数,该函数采用 n-1 个维度为 n 的向量并采用如下矩阵的行列式:

[[u_x,u_y,u_z,u_w],
 [a_1,a_2,a_3,a_4],
 [b_1,b_2,b_3,b_4],
 [c_1,c_2,c_3,c_4]]

顶行是指向轴方向的单位向量。不幸的是,问题是,除非我给计算器提供 undefined variable ,否则找到该矩阵的行列式会导致错误,因为 u_x、u_y... 等是向量,并且该矩阵不是适当的矩阵,或者向量是值,并且行列式结果是单个值,而不是向量。然而,我能做的是保留单位向量未定义并执行行列式,然后在行列式完成后定义变量。

我剩下的要么将自己限制在最大向量大小(并非不合理,但我不想使用它),要么动态创建一个包含 n 个未定义局部变量的列表,我可以在计算完成。

我的问题是,如果可能的话,如何执行第二个选项?

编辑代码:(注意:当前使用的是我提到的变量列表。不幸的是,问题是“5→{a,b,c,d}[1,2]”错误。 )

Define LibPub cross_p(mat)=
Func
:Local i_,n_,unit_v,unit_list
:Local dim_v,num_v,len_v,new_v
:Local det_v
:[a,b,c,d,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]→unit_list
:dim(mat)→dim_v
:dim_v[1]→num_v
:dim_v[2]→len_v
:newMat(len_v,len_v)→unit_v
:For n_,1,len_v
:  1→unit_v[n_,n_]
:EndFor
:If num_v=len_v-1 Then
:  newMat(len_v,len_v)→new_v
:  subMat(unit_list,1,1,1,len_v)→new_v[1]
:  For i_,1,num_v
:    mat[i_]→new_v[i_+1]
:  EndFor
:  det(new_v)→det_v
:  For i_,1,len_v
:    unit_v[i_]→unit_list[1,i_]
:  EndFor
:  Return det_v
:EndIf
:EndFunc

最佳答案

在 NSpire 中,矩阵的元素必须是标量。

这意味着两件事:

 1)  `[i, j, k, l]` must be written `augment(i,augment(j,augment(k,l)))`

 2)  the output of det is a scalar

最后一个对你来说是最麻烦的。这基本上意味着如果您想使用您的方法,您需要编写自己的 det 版本。

现在问题的第二部分是如何针对任意维度实现这一点。可悲的是,NSpire 中的“编程语言”非常有限。第一个复杂之处是,augment 不能处理任意数量的参数。

相反,您需要编写一个 augment_from_list(vectors) ,它接受一个参数(向量列表)并增强它们。

这只是为了增强——您将需要类似的帮助器来扩展内置函数来处理任意数量的参数。

关于ti-basic - TI-NSpire 动态创建向量叉积变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32365545/

相关文章:

ti-basic - 是否有清除 Y 变量的命令?

ti-basic - 如何在图形计算器(在屏幕上)上显示 Hello World?

ti-basic - 在同一行上显示变量和字符串(TI-Basic)

lua - 使用 TI-Nspire 数学库中的 eval 函数

c - 重新映射内存映射 I/O

ti-basic - 有没有办法在 TI-Basic 中使用列表作为函数的参数?

TI-Basic:您如何将方程作为输入?

math - TI-84 Basic 可以处理 n 阶导数吗?