【问题标题】:How to use interp1 function in matlab on a function of type symfun?如何在 symfun 类型的函数上使用 matlab 中的 interp1 函数?
【发布时间】:2019-03-03 00:21:35
【问题描述】:

我的 matlab 脚本中有一个微分方程组的解。我将我的函数定义如下:

syms V_x(t) V_y(t) X(t) Y(t);
ode_V_x = diff(V_x,t) == -(B/m)*V_x;
ode_V_y = diff(V_y,t) == -g - (B/m)*V_y;
ode_X = diff(X,t) == V_x;
ode_Y = diff(Y,t) == V_y;

然后我用适当的初始条件解决它们,如下所示:

[V_xSol(t), V_ySol(t), XSol(t), YSol(t)] = dsolve(odes,conds);

例如,Y(t) 的解是:

YSol(t) = exp(-t/5)*((981*exp(t/5))/4 - 12891678040772023/35184372088832) - (981*t)/20 + 4262710785985975/35184372088832

现在我需要找到Y(t) = 0 的时间值。我想过在matlab中使用interp1函数通过执行:t_f = interp1([0,5],YSol,0);但它不起作用。错误为:Values V must be of type double or single。 在matlab中symfun函数类型上使用interp1的正确方法是什么? 附:自变量“t”尚未被定义为任何先前文章的向量(我理解 matlab 喜欢向量)。

【问题讨论】:

  • 我不得不谷歌 persay,原来你的意思是说本身。 :)
  • 我猜“本身”是正确的用法(:

标签: matlab interpolation ode differential-equations dsolve


【解决方案1】:

我不确定interpl 函数是否适合这项工作。你可以使用fsolve来达到你想要的结果。

fsolve的用法:

fsolve(function handle, initial guess)

这是在下面的 matlab 中针对您的问题实现的:

t = fsolve(@(t)exp(-t/5)*((981*exp(t/5))/4 - 12891678040772023/35184372088832) - (981*t)/20 + 4262710785985975/35184372088832, 5)

在这种情况下,答案是4.3243。请注意,答案取决于您给求解器的初始猜测。在您的情况下,我注意到任何高于 2 的初始值都应该有效。否则任何事情都会收敛到不同/错误的答案。

您可以在此处阅读有关fsolve 的更多信息: https://www.mathworks.com/help/optim/ug/fsolve.html

【讨论】:

  • 感谢您的回复,尽管我的脚本需要处理这个问题。即 t = fsolve(YSol, 0) 不起作用。不是我需要知道结果,而是我的脚本需要能够自给自足地解决问题并产生最终结果。
  • 您可以将符号方程转换为 MATLAB 函数句柄并将其传递给 fsolve。它应该是这样的:k = fsolve(matlabFunction(YSol), 5).
  • 感谢“matlabFunction”毕竟有效,但它不会产生我想要的结果。对于在这一点上遇到类似挫折的人来说,似乎有一种叫做“ode45”(我不知道为什么是 45!)的东西可以解决常微分方程。
  • 我认为您应该修改您的问题以反映您想要的内容。你想要的是一个(是)轨迹而不是单点解决方案。如果这是您想要的,那么您甚至不需要使用dsolveode45 应该可以解决问题。这只是将系统在时间上向前积分,直到 y(t) = 0。在这种情况下,您可以观察系统到达该点的时间。无论哪种方式,如果中间解决方案无关紧要,我的回应应该可以正常工作。
  • 在您的回复中,您没有解决我需要找到满足 Y(t) = 0 的“t”的事实,因为我在 matlab 中找到了我的解决方案。出于某种原因,您在回复中不断将 5 传递给函数。即使我通过了 0 或 5,但结果仍然不正确,问题很明显,这个概念可以追溯到中学。是的,这是一个轨迹问题,但我需要在 matlab 中解决它(说来话长!)。您的回答只是让我从一个参数函数结果(对任何人都没有好处)前进到一个稍微不那么麻烦的“matlabFunction”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
相关资源
最近更新 更多