Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab ode45在函数delet(h)中使用了很长的工具和步骤_Matlab - Fatal编程技术网

Matlab ode45在函数delet(h)中使用了很长的工具和步骤

Matlab ode45在函数delet(h)中使用了很长的工具和步骤,matlab,Matlab,我对ode45有问题。我已经定义了一个函数,并试图用ode来解决它,但当我运行它时,它需要很长时间。我试图在我的函数中显示“t”输入,结果显示时间步长为10^-8![我没有收到来自ode45的任何错误] 因此,我在函数的末尾放置了一个断点,在我执行一次步骤之后,它将转到sym.m文件并调用函数delet(h) 在步骤之后,它转到 function delete(h) if builtin('numel',h)==1 && inmem('-isloaded','mupadm

我对ode45有问题。我已经定义了一个函数,并试图用ode来解决它,但当我运行它时,它需要很长时间。我试图在我的函数中显示“t”输入,结果显示时间步长为10^-8![我没有收到来自ode45的任何错误]
因此,我在函数的末尾放置了一个断点,在我执行一次步骤之后,它将转到sym.m文件并调用函数delet(h)

在步骤之后,它转到

function delete(h)
    if builtin('numel',h)==1 && inmem('-isloaded','mupadmex') && builtin('numel',h.s)==1 && ~isa(h.s,'maplesym')
        mupadmex(h.s,1);
    end
    end
这就是它太长的原因,因为它在那里循环。
怎么了?!谢谢

听起来这对我来说是个“棘手”的问题。我建议使用专为僵硬问题设计的解算器。我还建议尝试在小步距~0.001的情况下使用固定步长解算器,并查看输出结果。如果你正在闯入
sym.m
,听起来你好像有一些符号逻辑在里面。有没有一种方法可以将符号表达式转换为?

正如macduff所指出的,您的问题可能很棘手。尝试
ode15s
(专为刚性问题设计),看看步长是否仍然降低到不可接受的低值

如果确实如此,那么您的问题可能包含一个初始值的奇点。如果问题的维度小于3,则可以定义一个小的
事件
函数来深入了解每个步骤的值,并绘制它们以查看是否确实存在问题

那么,你真的需要符号数学吗?这背后的理念是,它更容易为人类阅读,这使得计算机处理起来很糟糕:)如果你能将它转换成非符号的东西,请这样做——这将显著提高性能

另外,还有一点建议,
delete
也是Matlab的内置函数。通常,以Matlab buitins命名函数是一个不好的主意——这很混乱,而且在Matlab决定使用哪个函数时会导致大量开销

function delete(h)
    if builtin('numel',h)==1 && inmem('-isloaded','mupadmex') && builtin('numel',h.s)==1 && ~isa(h.s,'maplesym')
        mupadmex(h.s,1);
    end
    end