int main() { int i, n; vector diag, sub1, sub2, sup1, sup2, b; printf("n = "); scanf("%d", &n); if (n < 3) return EXIT_FAILURE; diag = new_vector(n); sub1 = new_vector(n); sub2 = new_vector(n); sup1 = new_vector(n); sup2 = new_vector(n); b = new_vector(n); /* 例題. 正解はすべて 1 */ for (i = 0; i < n; i++) { diag[i] = 11; sub1[i] = 3; sub2[i] = 1; sup1[i] = 4; sup2[i] = 2; b[i] = 21; } b[0] = 17; b[n - 1] = 15; b[1] -= 1; b[n - 2] -= 2; gauss5(n, diag, sub1, sub2, sup1, sup2, b); vecprint(b, n, 8, "%9.6f"); printf("正解はすべて 1\n"); return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { double a = 1, b = 2, S, I = primitive(b) - primitive(a); unsigned i, n = 10; if(argc > 1) n = atoi(argv[1]); rlxd_init(2,time(NULL)); FILE *f1 = fopen("integral1.dat","a"); FILE *f2 = fopen("integral2.dat","a"); FILE *f3 = fopen("integral3.dat","a"); FILE *f4 = fopen("integral4.dat","a"); for(S = i = 0; i < n; i++) S += newton_cotes1(function, a+i*(b-a)/n, a+(i+1)*(b-a)/n); fprintf(f1,"%d\t%e\n", n, fabs(I-S)); for(S = i = 0; i < n; i++) S += newton_cotes2(function, a+i*(b-a)/n, a+(i+1)*(b-a)/n); fprintf(f2,"%d\t%e\n", n, fabs(I-S)); for(S = i = 0; i < n; i++) S += gauss5(function, a+i*(b-a)/n, a+(i+1)*(b-a)/n); fprintf(f3,"%d\t%e\n", n, fabs(I-S)); S = monte_carlo(function, a, b, n); fprintf(f4,"%d\t%e\n", n, fabs(I-monte_carlo(function, a, b, n))); fclose(f1); fclose(f2); fclose(f3); fclose(f4); return 0; }