#include #include "math.h" double bisect(double kl, double kr, double k); double f(double x, double k) { double W = 1; return(cos(x) + W*sin(x)/x-cos(k)); } int main() { int N = 200; double pi = acos(-1); for(int i = 0; i < N; i++){ double k = -pi+2*pi/N*i; double step = 0.002; for(double k2 = -00; k2 <= 20; k2+=step){ double k_solution = bisect(k2, k2+step, k); if(k_solution != 99999) std::cout << k << " " << k_solution << " " << k2*k2/2. << std::endl; } } } double bisect(double kl, double kr, double k) { double ret_val = 99999; double tol = 1.e-8; if(f(kl,k)*f(kr,k) > 0) return ret_val; while(true){ double km = (kl+kr)/2.; if(f(km,k)*f(kl,k) < 0) kr = km; else kl = km; // std::cout << kl << " " << kr << " " << fabs(kl-kr) << std::endl; if(fabs(kl-kr) < tol) break; } ret_val = kl; return ret_val; }