1
我试图在文档中打印某些内容,但它只适用于我试过的第一个值!我试图自己弄清楚,但我不到一个小时就把这段代码给我的教授,所以我有点绝望。 :/当它经历一个循环时,fprintf不打印
#include <stdio.h>
#include <math.h>
double euler(double v0, double *t0, double h, double (*f)(double));
double dv(double v);
int main(){
double vlim, t = 0;
double *pt = &t;
double h0 = 1.e-7;
vlim = euler(0, pt, h0, dv);
printf("O tempo e a velocidade limite para um passo de %.0e s sao respectivamente:\n", h0);
printf("%.0e s e %lf mm/s.\n\n", *pt, vlim);
double h = h0, v = 0;
do {
*pt = 0;
v = euler(0, pt, h, dv);
h /= 5.;
} while (fabs(v-vlim)/v > 1e-5);
printf("O passo necessario para atingir a convergencia na velocidade limite e' %.1e s.\n",h);
return 0;
}
double euler(double y, double *x, double h, double (*f)(double)){
FILE *arq = fopen("bolha.dat","w+");
double y0, eps = 1e-4;
do{
y0 = y;
y = y0 + h*f(y0); // Metodo de Euler
*x += h;
fprintf(arq, "%.1e\t%.7lf\n", *x, y);
} while (fabs((y-y0)/y) > eps);
fclose(arq);
return y;
}
dv是不相关的,所以我没有发布它。它看起来像循环中的东西真的很愚蠢,因为如果我把h0 = 2.e-8(这是我试图打印的值)它适用于该值。
什么是f(y0)?你确定这不是0吗? – SheetJS
@Nirk y0是另一个变量,对不起,我没有指定它。我的欧拉函数使用欧拉方法来求解微分方程。 f(y0)是导数。 –
我的观点是,如果f(y0)== 0,循环会停止,因为y将是y0 + h * f(y0)= y0 + 0 = y0 – SheetJS