TI-Nspire自定义函数运行报错:For循环语句提示无效表达式求助
问题排查与解决
错误根源
TI-Nspire 的自定义函数不能直接访问全局变量,你的函数中使用了全局变量 n、x、y,但未将它们作为参数传入函数,这直接导致了For i,1,n语句处的报错。
修复方案一:修改函数参数
调整函数定义,把n、x、y作为参数传入函数:
Define areabelow(ypna, n, x, y)= Func Local a_below,term a_below:=0 For i,1,n If y[i]≤ypna and y[mod(i,n)+1]≤ypna Then term:=(x[i]-x[mod(i,n)+1])*(y[i]+y[mod(i,n)+1]-2*ypna) ElseIf y[i]≤ypna and y[mod(i,n)+1]>ypna Then term:=(((x[i]-x[mod(i,n)+1])*(y[i]-ypna)^(2))/(y[mod(i,n)+1]-y[i])) ElseIf y[i]>ypna and y[mod(i,n)+1]≤ypna Then term:=(((x[mod(i,n)+1]-x[i])*(y[mod(i,n)+1]-ypna)^(2))/(y[i]-y[mod(i,n)+1])) Else term:=0 EndIf a_below:=a_below+term EndFor a_below:=0.5*a_below Return a_below EndFunc
调用方式
执行时需要传入所有参数,示例:
areabelow(5, 10, {0,350,350,0,0,20,20,330,330,20}, {0,0,350,350,0,20,330,330,20,20})
修复方案二:改为程序(Program)
如果想避免重复传入全局变量,可以将函数改为TI-Nspire的程序格式,程序允许直接访问全局变量:
Define areabelow(ypna)= Prgm Local a_below,term a_below:=0 For i,1,n If y[i]≤ypna and y[mod(i,n)+1]≤ypna Then term:=(x[i]-x[mod(i,n)+1])*(y[i]+y[mod(i,n)+1]-2*ypna) ElseIf y[i]≤ypna and y[mod(i,n)+1]>ypna Then term:=(((x[i]-x[mod(i,n)+1])*(y[i]-ypna)^(2))/(y[mod(i,n)+1]-y[i])) ElseIf y[i]>ypna and y[mod(i,n)+1]≤ypna Then term:=(((x[mod(i,n)+1]-x[i])*(y[mod(i,n)+1]-ypna)^(2))/(y[i]-y[mod(i,n)+1])) Else term:=0 EndIf a_below:=a_below+term EndFor a_below:=0.5*a_below Disp a_below EndPrgm
修改后直接调用areabelow(5)即可正常运行。
内容的提问来源于stack exchange,提问作者Megidd
相关产品推荐
相关产品推荐

