#include <stdio.h>
#include <math.h>
double f( double x, double a );
int main() {
double middle = 0;
double high;
double low;
double a = 0.1;
int count = 0;
high = 3.14/2; /* 右限は+π/2 */
low = -3.14/2; /* 左限は-π/2 */
do {
count++;
middle = (low + high) * 0.5;
if ( (f(middle,a) * f(low,a)) < 0) {
high = middle;
} else {
low = middle;
}
if (count == 50) {
printf("収束しませんでした。\n");
return 0;
}
printf("high[%f] low[%f] middle[%f] (f(middle,a))[%f]\n",
high, low, middle, fabs(f(middle,a)));
} while( !(fabs(f(middle,a)) < 0.000001) );
printf("収束しました。x=[%f] [%f]\n", middle, tan(middle)-a);
}
double f( double x, double a ) {
return tan(x)-a;
}
2007年10月24日
2分法
戯れに"tan(x) -a = 0"を満たすxを2分法で解くプログラムを作ってみました。多分、ちょっと精度がよくないかもしれません。