本篇内容主要讲解“怎么使用java代码求解sin(x)”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用java代码求解sin(x)”吧!
1 泰勒级数介绍
近期工作中需要使用matlab建模,期间做案例的时候有个方程:sin(x)=0,要求不使用现有api进行求解,然后有点懵,不知道如何下手,最后翻了很多资料终于有点头绪。有了java的解题思路,再把思路转变为stateflow就简单了。
在数学中,泰勒级数用无限项连加式——级数来表示一个函数,这些相加的项由函数在某一点的导数求得。泰勒级数是以于1715年发表了泰勒公式的英国数学家布鲁克·泰勒的名字来命名的。通过函数在自变量零点的导数求得的泰勒级数又叫做麦克劳林级数,以苏格兰数学家科林·麦克劳林的名字命名。 泰勒级数在近似计算中有重要作用。
定理
以下图截取自百度百科。
泰勒级数的重要性体现在以下三个方面:
幂级数的求导和积分可以逐项进行,因此求和函数相对比较容易。
一个解析函数可被延伸为一个定义在复平面上的一个开区域上的泰勒级数通过解析延拓得到的函数,并使得复分析这种手法可行。
泰勒级数可以用来近似计算函数的值。
2 sin(x)泰勒级数变换求解
2.1 将sin(x)展开成泰勒级数的形式
sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ...
2.2 定义变量
double x0 = 1.0; // 初始值 double error = 1.0; // 误差值 double tolerance = 1e-6; // 精度值 int n = 1; // 迭代次数
2.3 循环计算误差值
使用迭代公式不断逼近解,直到误差值小于精度值为止
while (error > tolerance) { double term = x0; // 泰勒级数的第一项 double x = x0; // 迭代得到的新的x值 for (int i = 1; i <= 2*n+1; i++) { term *= -x0*x0/(i*(i+1)); // 计算泰勒级数的下一项 x += term; // 累加泰勒级数的各项 } error = Math.abs(x - x0); // 计算误差值 x0 = x; // 更新x0的值 n++; // 迭代次数加1 }
2.4 完整java代码实现
public class Main { public static void main(String[] args) { double x0 = 1.0; // 初始值 double error = 1.0; // 误差值 double tolerance = 1e-6; // 精度值 int n = 1; // 迭代次数 while (error > tolerance) { double term = x0; // 泰勒级数的第一项 double x = x0; // 迭代得到的新的x值 for (int i = 1; i <= 2*n+1; i++) { term *= -x0*x0/(i*(i+1)); // 计算泰勒级数的下一项 x += term; // 累加泰勒级数的各项 } error = Math.abs(x - x0); // 计算误差值 x0 = x; // 更新x0的值 n++; // 迭代次数加1 } System.out.println("sin(x) = 0 的一个解为 x = " + x0); } }
运行结果:
sin(x) = 0 的一个解为 x = 3.141592653589793