【问题标题】:matlab - 2 second degree ODE plot with runge kutta - numerical methodsmatlab - 带有 runge kutta 的 2 二级 ODE 图 - 数值方法
【发布时间】:2015-05-11 09:03:49
【问题描述】:

给出以下等式。

我知道我需要将 2 个二阶 ODE 分解为 4 个一阶 ODE。这就是我所拥有的。我首先介绍了新变量 u,并在图片底部编写了我与 ODE45 一起使用的 matlab 函数。

现在的问题是我应该得到一个抛物线形状的图形(蓝线),但这不是我得到的。

我已经检查了我的代码一千次,但没有任何结果。可以检测到我的函数中的任何错误吗?

主程序

global g H R alfa 
alfa=pi/2;
g = 20.0;
R = 1;
H=2.3;
k = 0:0.01:2;
[T,Y] = ode45(@fspace,k,[H 0 0 0]);
plot(T,Y(:,1))
hold on 


fi= 0:2*pi/60:2*pi;
xx =R*cos(fi);
yy =R*sin(fi);
plot(xx,yy)

函数f

function f = fspace(x,u)
global g R H alfa G
G=(g*R.^2)./((R+H).^2);
f = [u(2) G*cos(alfa)-g*((R.^2)/u(1).^2)+u(1)*u(4)^2 u(4) (G*sin(alfa)-2*u(2)*u(4))/u(1)];

【问题讨论】:

  • 你的问题与matlab有关吗?如果是,您需要发布相关的 matlab 代码。否则您的问题不适合 SO,而是应该移至 math.stackexchange.com
  • 它是 matlab realted。该函数是用matlab代码编写的。
  • 这是两个耦合的非线性 ODE;每个等式中的第二项就是这样。您必须以迭代、增量的方式解决这些问题。您必须先将这些线性化。
  • 但是,当我使用 ODE45 时,这不是我在做什么吗?并且在问题描述中说使用ODE45求解方程。
  • 我现在添加了matlab代码!谢谢!

标签: matlab math numerical-methods ode


【解决方案1】:

我认为你的问题在于这些行:

fi= 0:2*pi/60:2*pi;
xx =R*cos(fi);
yy =R*sin(fi);
plot(xx,yy)

您正在绘制一个半径为R 的圆。 phi 是来自 ode 求解器的解决方案的一部分,因此您应该改为:

plot(R*cos(Y(:,3)),R*sin(Y(:,3)))

但这总是会给你一个半径为R 的圆,而不是抛物线。还是抛物线指的是plot(T,Y(:,1))

据我所知,方程式和代码似乎是正确的。用Y(:,3) 替换你对phi 的定义基本上给出了相同的图,只是分辨率更低。正如我所说,通过绘制yyxx,你总会得到一个圆圈。您需要澄清抛物线应该指的是什么。

【讨论】:

  • 它不是应该是抛物线的圆。这是另一个情节!
  • 好吧,我已经仔细检查了方程和 MATLAB 代码,它们都是正确的,所以要么初始微分方程是错误的,要么你对抛物线的期望是错误的。
  • 系统在极坐标中(笛卡尔坐标中的系统是什么?)r=y(1)phi=y(3)。因此cart_x=Y(:,1).*cos(Y(:,3))cart_y=Y(:,1).*sin(Y(:,3))
  • @LutzL 看起来 OP 期望 r(t) 成为抛物线。不知道为什么或来自哪里......
  • 该系统似乎描述了一个引力场中的活动物体。推力是G·cos(α) 远离中心,G·sin(α) 与中心正交,即G 与径向矢量成角度α。它至少应该看起来在物理上是合理的。
猜你喜欢
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 2019-04-14
  • 2021-03-23
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多