私は、Matlab シンボリック ツールボックスを使用して、非常に複雑な関数を作成しています。この関数は、( を使用して) .m ファイルに書き込まれますmatlabFunction
。何らかの理由で、関数を単純化した後、関数は のような形式で返されますfun = (A*1.329834759483753e310 + B*5.873798798237459e305 + ...)*7.577619127319697e-320
。 whereA
およびB
は my 変数の関数です (複雑すぎてここで繰り返すことはできません)。つまり、括弧内のすべての項は、約 1e280 から 1e300 のオーダーです。指数が約 1.79e308 よりも大きくなると、double のオーバーフローが発生するため (生成された .m 関数を呼び出すとき)、問題が発生します。関数の実際のサイズは、オーバーフローを作成するほどではありませんが、関数をこの方法で表現するとオーバーフローが発生します。これは、単純化関数が 1e-320 を括弧内に乗算した場合に解決されますが、何らかの理由で解決されません。
シンボリック ツールボックスが私の関数をこのように表現することを選択した理由は何ですか?
expand(fun)
callを呼び出して、1e-320 を括弧内に掛けることができることがわかりました。結果の式には、予想されるサイズ (-1 から -30 の範囲) の指数がありますが、最初に式がこのように見える理由を知りたいですexpand
。問題。その上、呼び出しexpand
は私が持っているものよりも複雑な関数を作成するようで、ここで非常に高速に評価される関数を取得しようとしています.