C 如何计算钟摆的周期

C 如何计算钟摆的周期,c,physics,numerical-methods,ode,C,Physics,Numerical Methods,Ode,任务是计算钟摆的周期。我的一个值在接近t=0时爆炸了,这让我很困惑。我也不知道我的价值观是否正确 以下是我的插值函数Interp: #include <stdio.h> #include <math.h> double Interp(double x_1, double y_1, double x_2, double y_2, double x){ double k,y,b; k=(y_2-y_1)/(x_2-x_1);

任务是计算钟摆的周期。我的一个值在接近t=0时爆炸了,这让我很困惑。我也不知道我的价值观是否正确

以下是我的插值函数Interp:

#include <stdio.h>
#include <math.h>

double Interp(double x_1, double y_1, double x_2, double y_2, double x){
        double k,y,b;
        k=(y_2-y_1)/(x_2-x_1);
        b=y_2-(k*x_2);
        y=k*x+b;
        return(y);       
}

这些值对我来说似乎是合理的,但我不明白为什么它会在n=0.05时爆炸到无穷大。我也不完全确定如何检查我的结果是否正确

任何帮助都将不胜感激。提前谢谢你至少要解决这个问题

sol=crosst2-crosst1可以使用
crosst2、crosst1
而不设置其中一个或两个,从而导致未定义的行为

最好是初始化它们,或者在两者都设置好之前不执行减法


对于进一步调查,建议如下:GTG

fprintf(fp, "%.17g %.17g %lf\t%lf\n", crosst1, crosst2, n, sol);
注意:我使用了
#define M#u PI 3.1415926535897932384626433832795
至少解决了这个问题

sol=crosst2-crosst1可以使用
crosst2、crosst1
而不设置其中一个或两个,从而导致未定义的行为

最好是初始化它们,或者在两者都设置好之前不执行减法


对于进一步调查,建议如下:GTG

fprintf(fp, "%.17g %.17g %lf\t%lf\n", crosst1, crosst2, n, sol);

注意:我使用了
#定义M#PI 3.1415926535897932384626433832795

M#PI值是多少?我将其定义为3.1428,并在年执行。当n为0.5时,我得到了6.281470。我使用了#include,所以M#PI应该定义为3.14159265358979323846。在该编译器中,看起来M#PI没有定义。但是,我将M_PI定义为3.14159265358979323846并重新运行。n=0.5时仍为6.284170。我建议您在代码中打印中间值,并找出问题所在。M_PI值是什么?我将其定义为3.1428,并在年执行。当n为0.5时,我得到了6.281470。我使用了#include,所以M#PI应该定义为3.14159265358979323846。在该编译器中,看起来M#PI没有定义。但是,我将M_PI定义为3.14159265358979323846并重新运行。n=0.5时仍为6.284170。我建议您在代码中打印中间值,并找出问题所在。
fprintf(fp, "%.17g %.17g %lf\t%lf\n", crosst1, crosst2, n, sol);