如何在类型SymFun的函数上使用MATLAB中的Interp1函数



我对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的时间值。我考虑通过执行:t_f = interp1([0,5],YSol,0);在MATLAB中使用interp1函数,但它不起作用。错误读取:Values V must be of type double or single。在MATLAB中使用Interp1在symfun类型的功能上使用Interp1的正确方法是什么?P.S.自变量't'尚未定义为先前persay的任何事物的向量(我知道matlab喜欢向量)。

我不确定 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/help/optim/ug/fsolve.html

相关内容

  • 没有找到相关文章

最新更新