好的,我正在尝试在 TI-NSire 中创建一个叉积函数,该函数采用 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]]
顶行是指向轴方向的单位向量。不幸的是,问题是除非我给计算器提供未定义的变量,否则找到该矩阵的行列式会导致错误,因为 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