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