Matrix 将某些矩阵元素替换为最大值中的零

Matrix 将某些矩阵元素替换为最大值中的零,matrix,replace,element,moodle,maxima,Matrix,Replace,Element,Moodle,Maxima,我试图把一个等于und的矩阵的元素变成零。我尝试用矩阵图来实现这一点,但没有成功: und_to_zero(element) := block( [], if ( is( element = und ) then element : 0 ) else ( ) ); Ma : matrix([25,40,0,und,und],[und,und,15,20,20]); MaCalc : copymatrix(Ma); MaCalc: matrixmap(und_to_zero, MaCalc);

我试图把一个等于und的矩阵的元素变成零。我尝试用矩阵图来实现这一点,但没有成功:

und_to_zero(element) := block( [], if ( is( element = und ) then element : 0 ) else (  ) );
Ma : matrix([25,40,0,und,und],[und,und,15,20,20]);
MaCalc : copymatrix(Ma);
MaCalc: matrixmap(und_to_zero, MaCalc);
这会在Moodle上引发
检查最大连接
错误。我猜问题在于我在函数
和_to_zero
的定义中的条件构造,但我不确定我做错了什么


有人能帮我发现错误吗?

事实证明,您必须在
else
分支中指定要完成的任务:

und_to_zero(element) := block( [], if  is( element = und ) then element : 0  else element:element );

我认为实现相同效果的一个更简单的方法是说,
MaCalc:subst(und=0,Ma)

该函数可以变得更简洁。(1)
块([],…)
无效,因为函数体中只有一个表达式。(2)
if is(…)…
相当于
if…
(即
is
if
之后不需要)。(3)
如果
是带有值的表达式,而不是带有副作用的命令。因此无需分配给
元素
。全部加在一起:
und\u to\u zero(元素):=如果元素=und,那么0 else元素