【问题标题】:"Linear Model" of a Pendulum via Euler's Method in MATLAB通过 MATLAB 中的欧拉方法对摆进行“线性模型”
【发布时间】:2017-03-31 04:09:56
【问题描述】:

在我的问题中,线性模态被定义为 sin(x) 级数展开中的第一项,因此:

sin(x) = x 是线性模态。

所以有了这个,我就得写了

作为 x' 和 y' 的系统,所以:

我尝试了欧拉方法中的线性模态,初始条件 X(1) = 1 和 V(1)=0(V 将是 y 然后遵循最后一个方程):

for i = 1:1000
    V(i+1) = V(i)-(1.*s) ;
    X(i+1) = V(i);
end 

其中 s 是步长。但显然,当我相对于 X 绘制 V 时,我应该得到一个圆圈,这是有道理的,但我得到的只是一条直线。

如果我将其更改为:

for i = 1:1000
    V(i+1) = V(i)-(X(i).*s) ;
    X(i+1) = V(i);
end 

在 s=0.8 时,我得到一个螺旋,这看起来像是一个发展,但我并不接近我所期待的圆形。我想我只需要一双全新的眼睛来看看可能存在明显错误的地方。

【问题讨论】:

    标签: matlab numerical-methods ode differential-equations


    【解决方案1】:

    您编写的代码与您在方程式中写下的完全不同。如果你用相同的顺序和变量名写下方程,你可能已经看到你的错误了。

    此外,您应该知道以下几点:

    • 步长在两个方程中都不是线性因子。
    • 在您的第一次尝试中,XV 没有影响。

    尽管如此,这里是将您的方程式直接转换为代码(以及欧拉方法):

    for i = 1:1000
        x(i+1) = x(i) + y(i)*s;
        y(i+1) = y(i) + sin(x(i))*s;
    end
    

    如果您真的想使用线性近似,只需将sin(x(i)) 替换为x(i)。然而,线性逼近的要点是它对解析解和理论分析很好。由于您是用数字解决问题,我认为没有必要。

    最后,请注意,由于您正在积分哈密顿系统,您将很快看到欧拉方法的问题,即,您总是会得到一个明显的螺旋。试想一下,如果你用切向向量模拟地球绕太阳运动会发生什么:

    【讨论】:

    • 感谢您的回答。但是,欧拉的方法不是形式 y(i+1) = y(i) + s*y'(i) 吗?为什么你只是乘以 s?此外,如果我绘制你用 y 相对于 x 编写的代码,我不会得到我需要的圆圈。
    • 你为什么只乘 s? – Argh;我的错;固定。
    • 在我原来的问题中,sin(x) 为负这一事实是否也会影响欧拉方法?为什么不是 cos(x) ,因为它是 s*y'(i) ?
    • 我所说的循环性质有点类似于我的半线性模态(该系列的前两个术语):pasteboard.co/s5xbGhYbP.png。较小的步长往往会螺旋式下降并失去圆形。我的印象是线性模态会接近一个完美的圆
    • 在我原来的问题中,sin(x) 是否为负这一事实不会也影响到欧拉方法吗? – 是的,应该是 -sin(x),但那是你在推导微分方程时已经犯了一个错误(它已经是here)。
    猜你喜欢
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多