我正在使用 Matlab 符号工具箱来创建一个高度复杂的函数。然后将此函数写入 .m 文件(使用matlabFunction
)。出于某种原因,在简化函数后,函数以看起来像的形式返回fun = (A*1.329834759483753e310 + B*5.873798798237459e305 + ...)*7.577619127319697e-320
,其中A
和B
是我的变量的函数(太复杂,无法在此重复)。也就是说,括号内的所有项的顺序大约为 1e280 到 1e300。当指数大于大约 1.79e308 时就会出现问题,因为这会导致双精度溢出(调用生成的 .m 函数时)。函数的实际大小远不会造成溢出,但这种表达函数的方式确实如此。如果简化函数将 1e-320 乘以括号,这将得到解决,但由于某种原因它没有。
知道为什么符号工具箱选择以这种方式表示我的功能吗?
我发现我可以调用 callexpand(fun)
将 1e-320 乘以括号。生成的表达式然后具有预期大小的指数(在 -1 到 -30 范围内),但我更希望首先知道表达式看起来像这样的原因,以及是否有比调用更好的选项expand
来避免问题。此外,调用expand
似乎创建了一个比我拥有的更复杂的函数,我试图在这里获得一个计算速度非常快的函数。