Python:四阶Runge-Kutta方法

时间:2015-11-26 02:27:48

标签: python runge-kutta

char *name = malloc(strlen(args[1]) + 6);
strcpy(name, args[1]);
printf("%zu\n", strlen(name);

所以我有四阶runge kutta方法编码,但我试图适应的部分是问题说如果[2t]是偶数则V_in(t)= 1或如果[2t]是奇数则为-1。

另外,我不确定我是否想要返回这个等式: 返回1 / RC *(V_in - V_out)

问题在于:

Problem 8.1

如果你帮助我,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

  

所以我对四阶runge kutta方法进行了编码,但我试图适应的部分是问题,如果[2t]是偶数,则V_in(t)= 1,如果[2t]是,则为-1奇

您将V_in视为常量。问题在于它是一个功能。所以一个解决方案就是让它成为一个功能!这是一个非常简单的函数:

def dV_out_dt(V_out, t) :
    return (V_in(t) - V_out)/RC

def V_in(t) :
    if math.floor(2.0*t) % 2 == 0 :
        return 1
    else :
        return -1

您在if的定义中不需要或不需要V_in(t)声明。循环内部的分支很昂贵,并且这个函数将在循环内多次调用。有一种简单的方法可以避免使用if语句。

def V_in(t) :
    return 1 - 2*(math.floor(2.0*t) % 2)

此功能非常小,您可以将其折叠为衍生函数:

def dV_out_dt(V_out, t) :
    return ((1 - 2*(math.floor(2.0*t) % 2)) - V_out)/RC

答案 1 :(得分:0)

该功能应如下所示:

def f(x,t):
    V_out = x
    n = floor(2*t)
    V_in = (1==n%2)? -1 : 1
    return 1/RC * (V_in - V_out)