2017-06-22 22 views
0

任何人都可以帮助我理解Scilab的这段代码吗? 假设flag ='c',thres = 2且A是某个矩阵。在scilab函数名称前使用%符号?

deff("[flag]=%smallei(x)","flag=real(x) >= thres") 
[X,dsmall] = schur(A,%smallei); 

虽然我得到'deff'被用来做一个名为%smallei的函数,它正在比较这些值。但是在Schur函数中,使用%smallei时没有输入参数。请帮助我,这段代码片段正在做什么以及我错了什么。

有关完整的Scilab代码 - http://cgit.scilab.org/scilab/plain/scilab/modules/linear_algebra/macros/psmall.sci?h=5.1&id=b97dd3f34da8b52ac799da43848d8d0910d83aef

回答

1

舒尔函数内部调用%smallei功能,为您传递一个函数指针在舒尔(见help)。函数通过传递一个参数(在你的例子中是'x')并且期望返回一个值(在你的例子中是'flag')来调用这个函数指针。因此,您可以使用任何遵循原型的函数来工作。

这是优化算法中的一种典型方法,您可以在其中使用一种可用于不同优化标准的通用算法。因此,您将算法在通用代码和用于标准的特定函数之间进行分割,并且该函数在算法中作为函数指针进行调用。用户可以通过将优化函数注入为函数指针来决定使用哪个自定义条件。