TI-BASIC技术问询:如何将用户输入的数字存入矩阵?
解决TI-BASIC中矩阵元素赋值的问题
听起来你在TI-BASIC里折腾矩阵赋值快头大了吧😅,我之前也碰到过类似的坑,特别是List>Matr这个指令的用法,很容易踩雷。
首先,先理清你核心的需求:要实现像MATLAB里x = A(r,c)那样读取矩阵指定位置元素,或者反过来把用户输入的数字存入矩阵的指定位置?你提到“无法定义第一行第一列之外的元素”,大概率是对TI-BASIC里矩阵的索引和赋值逻辑理解错了。
先说说你卡住的List>Matr({Lv},[B])这条指令:
List>Matr的作用是把列表内容按顺序填充到矩阵,但它要求列表的长度必须和矩阵的元素总数完全匹配,而且是按列优先的顺序填充(先第一列从上到下,再第二列,以此类推)。如果你的[B]矩阵不是1x1的,而你只传了一个元素的列表{Lv},那肯定会报错停止运行,这就是问题所在!
那如果想实现给矩阵指定位置[r,c]赋值,正确的做法应该是这样:
- 首先确保你的矩阵[B]已经被正确初始化(比如用
Dim([B],行数,列数)来定义维度) - 用
[B](r,c) = 数值直接赋值,比如你要把用户输入的Lv存入[B]的第2行第3列,就写:Input "输入数字:", Lv [B](2,3) = Lv - 如果是读取矩阵[r,c]的元素到变量x,就写
x = [B](r,c),这完全对应MATLAB里的x = A(r,c)。
那如果一定要用列表转矩阵的方式(虽然没必要,直接赋值方便得多),你得先把矩阵所有元素转成列表,修改对应位置的列表元素,再转回去:
Matr>List([B],L1) // 把[B]转成列表L1,按列优先 L1( (c-1)*行数 + r ) = Lv // 计算对应列表索引:列数优先,所以第c列的第一个元素是(c-1)*行数+1 List>Matr(L1,[B]) // 把修改后的列表转回矩阵
这里的索引计算很关键,TI-BASIC的列表是一维的,矩阵转列表是按列排的,比如3行2列的矩阵,元素顺序是B, B, B, B, B, B,所以[r,c]对应的列表索引是(c-1)*行数 + r。
另外,还要注意几个常见坑:
- 矩阵必须先定义维度,不然直接用
[B](r,c)会报错,比如Dim([B],3,3)创建一个3x3的矩阵。 - TI-BASIC里的矩阵索引是从1开始的,和MATLAB一样,这点倒是一致的。
- 如果你是在循环里给多个元素赋值,别用
List>Matr反复折腾,直接用[B](r,c)=数值效率高得多。
如果你的程序还有其他逻辑(比如用户输入行列号再赋值),可以补充具体代码片段,我再帮你调整细节!
内容的提问来源于stack exchange,提问作者ProgrammingEnthusiast
相关产品推荐
相关产品推荐

