2007年10月24日

2分法

戯れに"tan(x) -a = 0"を満たすxを2分法で解くプログラムを作ってみました。多分、ちょっと精度がよくないかもしれません。


#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;
}
posted by 台北猫々 at 20:45| Comment(0) | TrackBack(0) | 技術メモ(Linux C/C++)