Я предполагаю, что это потому, что код будет кэшироваться при первом запуске, поэтому последующие запуски будут выполняться быстрее.Изменяя параметры, вы должны выполнить код один раз, чтобы новые определения кэшировались.
MATLAB может кэшировать дескрипторы сценариев с помощью временного каталога.Например, выполните clean all
, затем запустите [M,X,C] = inmem('-completenames')
до и после запуска сценария.Вы заметите, что были кэшированы следующие классы:
{'matlab.internal.editor.eval.TempFolder' }
{'matlab.internal.editor.eval.TmpFilePath' }
{'matlab.internal.editor.EODataStore' }
Но что касается производительности, я посмотрел на нее, и около 99% 3-секундного времени выполнения тратится на оценку символических выражений, когда оно передается в решение(), поэтому ожидается, что время выполнения будет намного ниже для последующих запусков, так как ваши символические выражения неизменны.Теперь, изменив параметры, вам придется снова подождать 3 секунды, пока он не будет переоценен.Если вы хотите точно увидеть, что происходит, вы можете профилировать ваш вызов execute ():
profile on
solved = solve(constraints);
profile viewer
Затем вы можете увидеть, что происходит внутри mupadengine.evalin, который отвечает за оценку символического выражения..