最近AI、区块链异常火爆,简单了解一下,发现需要了解不少数学知识。本身数学也是自己的一个短板,把基本数据知识捡一捡。
积分求解圆的面积
将圆垂直切分成N条线段,每条线段的宽度是2 * radius / N,长度是在(0, 2 * radius]之间。不断扩大N的值,汇总N条线段的总面积,就可以近似取得圆的面积。
public class CircleArea {
public static void main(String[] args) {
// 圆的半径
int radius = 1;
// 分割的线段条数(越大π值越精确)
int N = 20;
for (int i = 1; i < 100000000; i *= 10) {
double area = getArea(radius, N * i);
System.out.println("N=" + N * i + ", area=" + area);
}
}
/**
* 获取第N条线段的长度
*
* @param radius
* @param N
* @param width
* @param n
* @return
*/
public static double getLength(int radius, int N, double width, int n) {
// 线段长度 (勾股定理)
double length = 2 * (Math.pow((radius * radius - ((width * Math.abs(1.0 * N / 2 - n)) * ((width * Math.abs(1.0 * N / 2 - n))))), 0.5));
//System.out.println("length=" + length);
return length;
}
public static double getArea(int radius, int N) {
// 线段宽度
double width = 1.0 * 1 * 2 / N;
// 面积
double area = 0.0;
for (int i = 0; i < N; i++) {
double length = getLength(radius, N, width, i+1);
area += length * width;
}
return area;
}
}
标准值(截取):3.14159265358979323846
N=20, area=3.104518326248318
N=200, area=3.1404170317790445
N=2000, area=3.1415554669110275
N=20000, area=3.1415914776113376
N=200000, area=3.1415926164019083
N=2000000, area=3.1415926524139355
N=20000000, area=3.141592653553218
N=200000000, area=3.1415926535888827