#4
by かずま » 8年前
かずま さんが書きました:無限ループを解消し、少しでも改善したプログラムを示してくれたら、
まともな台形公式のプログラムを見せてあげましょう。
質問を削除するような人に、改善したプログラムは期待できないでしょう。
次のようなプログラムを用意していました。
コード:
#include <stdio.h>
#include <math.h> // sqrt
const int N = 1024; // 分割数
double trapezoid(double f(double), double a, double b, int n)
{
double h = (b - a) / n, s = (f(a) + f(b)) / 2;
for (int i = 1; i < n; i++) s += f(a + h * i);
return s * h;
}
double f1(double x) { return x; };
double f2(double x) { return x*x; };
double f3(double x) { return sqrt(1 - x*x); }
double f4(double x) { return 4 / (1 + x*x); }
int main(void)
{
printf("∫x dx = %g\n", trapezoid(f1, 0, 1, N));
printf("∫x^2 dx = %g\n", trapezoid(f2, 0, 1, N));
printf("∫sqrt(1 - x^2) dx = %g\n", trapezoid(f3, 0, 1, N));
printf("∫4 / (1 + x^2) dx = %g\n", trapezoid(f4, 0, 1, N));
return 0;
}
積分区間は [0, 1] です。
[quote="かずま" id=3,19167,145191]無限ループを解消し、少しでも改善したプログラムを示してくれたら、
まともな台形公式のプログラムを見せてあげましょう。[/quote]
質問を削除するような人に、改善したプログラムは期待できないでしょう。
次のようなプログラムを用意していました。
[code=c]
#include <stdio.h>
#include <math.h> // sqrt
const int N = 1024; // 分割数
double trapezoid(double f(double), double a, double b, int n)
{
double h = (b - a) / n, s = (f(a) + f(b)) / 2;
for (int i = 1; i < n; i++) s += f(a + h * i);
return s * h;
}
double f1(double x) { return x; };
double f2(double x) { return x*x; };
double f3(double x) { return sqrt(1 - x*x); }
double f4(double x) { return 4 / (1 + x*x); }
int main(void)
{
printf("∫x dx = %g\n", trapezoid(f1, 0, 1, N));
printf("∫x^2 dx = %g\n", trapezoid(f2, 0, 1, N));
printf("∫sqrt(1 - x^2) dx = %g\n", trapezoid(f3, 0, 1, N));
printf("∫4 / (1 + x^2) dx = %g\n", trapezoid(f4, 0, 1, N));
return 0;
}
[/code]
積分区間は [0, 1] です。