wxMaxima中for-do循环遍历列表提取数值问题咨询
wxMaxima for循环中列表元素取值问题解决方案
问题原因
Maxima默认将z[i]形式的表达式解析为带下标i的符号变量z_i,而非读取列表z的第i个元素,这就是你看到输出z_2、带下标1的列表符号的核心原因。
你写的thetas[c1]能正常工作,是因为Maxima对新定义的列表变量在部分场景下会默认启用列表索引解析,但这个规则存在歧义,不建议依赖。
解决方案
使用Maxima内置的nth()函数读取列表指定位置的元素,语法为nth(列表变量, 索引位置),索引从1开始计数,完全避免符号下标歧义。
修改后的可运行代码如下:
(%i2) thetas : [45,-45,-45,45]$ z : [-0.5,-0.25,0.0,0.25,0.5]$ (%i3) for c1:1 thru length(thetas) do ( htop : nth(z, c1+1), hbottom : nth(z, c1), theta : nth(thetas, c1)*%pi/180, disp(htop), disp(hbottom), disp(theta) );
运行后第一次循环就会输出你预期的htop=-0.25、hbottom=-0.5的结果。
可选方案
如果你更习惯用方括号索引的写法,可以将列表声明为数组类型:
z : make_array(any, length(z), z);
后续就可以用z[c1]直接读取元素,但数组类型无法直接使用列表专属的操作函数,使用灵活度低于原生列表+nth()的组合。
内容的提问来源于stack exchange,提问作者mily
相关产品推荐
相关产品推荐

