【发布时间】:2015-05-18 19:31:02
【问题描述】:
我一直在尝试使用此1 求解二阶微分方程, 但是我无法做到正确,并且在网上没有发现任何有用的信息,但我相信我已经取得了进展。
我用过解决;
syms x(t) v(t) fi(t)
[x(t), v(t)] = dsolve(diff(x) == v, diff(v) == fi/m, x(0) == [-L, -L], v(0) == [5, 10] )
这给了我;
x(t) =
int(fi(x)/5, x, 0, t, 'IgnoreSpecialCases', true, 'IgnoreAnalyticConstraints', true) - 5
v(t) =
C2 + t*(int(fi(x)/5, x, 0, t, 'IgnoreSpecialCases', true, 'IgnoreAnalyticConstraints', true) - 5) + int(-(x*fi(x))/5, x, 0, t, 'IgnoreSpecialCases', true, 'IgnoreAnalyticConstraints', true)
现在我需要帮助对结果进行交互,我想知道是否可以使用此结果从 ode45 中得到一些东西?此外,我想将解决方案绘制为模拟通过力场移动的 500 个粒子的参考轨迹。
使用 ODE45:
function dxdt = solution(t,y0)
frprintf('Second stop')
.....
dxdt = [x, v]
end
从主文件调用:
t:dt:t_f
y0 = [x0,v0]
fprintf('first stop')
[x, v] = ode45(@solution, y0, t)
我已经设置好了,如果代码运行顺利,它会打印“第一站,第二站,第三站”和“第四站”,它只打印出第一站,这就是我得到错误的地方。
【问题讨论】:
-
dsolve和int用于符号数学,主要用于获得解析解。ode45用于数值求解 ODE。这两件事彼此非常不同。你这里的符号方程是完全抽象的,所以你不应该期待任何解决方案。我建议你回去学习如何使用ode45。阅读文档(命令行窗口中的doc ode45)。试试这些例子。不要指望马上就能弄清楚。如果您遇到问题/疑问,请搜索此站点。如果您提出问题,请确保它是具体的。 -
所以我真的不能将由此产生的任何东西放入 ode45 中吗?
-
没有。我不明白这一点。
dsolve旨在为您提供微分方程如果存在的解析解。它不能在这里存在,因为您已经根据抽象函数(没有定义的函数)fi指定了所有内容。如果您想使用符号数学来帮助您推导ode45、see this MathWorks blog post 的函数。
标签: matlab differential-equations dsolve