sin(x)如何求解的java代码实现方法

 更新时间:2023年04月26日 16:55:02   作者:八斗五车  
这篇文章主要为大家介绍了sin(x)如何求解的java代码实现方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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

3 总结

说实话,做了这么多年的开发,没有去注重这些实现,都是直接使用api。真正哪天需要从基础开始实现的时候,真的一头雾水。

这几天学了matlab,才知道自己知识多么薄弱,往后需要大补啊。

以上就是sin(x)如何求解的java代码实现方法的详细内容,更多关于java sin(x)求解的资料请关注脚本之家其它相关文章!

相关文章

  • spring的jdbctemplate的crud的基类dao

    spring的jdbctemplate的crud的基类dao

    本文主要介绍了使用spring的jdbctemplate进行增删改查的基类Dao的简单写法,需要的朋友可以参考下
    2014-02-02
  • 小白教程! Linux服务器上JDK安装配置方法

    小白教程! Linux服务器上JDK安装配置方法

    这篇文章主要为大家详细介绍了Linux服务器上JDK安装配置方法,小白教程!具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • java邮件发送简单实现代码

    java邮件发送简单实现代码

    这篇文章主要为大家详细介绍了java邮件发送简单实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 浅谈Spring Cloud Eureka 自我保护机制

    浅谈Spring Cloud Eureka 自我保护机制

    这篇文章主要介绍了浅谈Spring Cloud Eureka 自我保护机制,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 总结Java常用加解密方法AES SHA1 md5

    总结Java常用加解密方法AES SHA1 md5

    这篇文章主要为大家介绍了Java常用加密方法AES SHA1 md5总结及示例demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • springboot发送邮件功能的实现代码

    springboot发送邮件功能的实现代码

    发邮件是一个很常见的功能,在java中实现需要依靠JavaMailSender这个接口,今天通过本文给大家分享springboot发送邮件功能的实现代码,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • Java中Spring WebSocket详解

    Java中Spring WebSocket详解

    本篇文章主要通过代码给大家详细分析了Java中Spring WebSocket的用法,需要的读者们参考学习下吧。
    2017-12-12
  • Feign如何使用protobuf的类作为参数调用

    Feign如何使用protobuf的类作为参数调用

    这篇文章主要介绍了Feign如何使用protobuf的类作为参数调用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java实现JDK动态代理的原理详解

    Java实现JDK动态代理的原理详解

    这篇文章主要介绍了Java实现JDK动态代理的原理详解,Java常用的动态代理模式有JDK动态代理,也有cglib动态代理,本文重点讲解JDK的动态代理,需要的小伙伴可以参考一下的相关资料
    2022-07-07
  • Java使用lambda自定义Arrays.sort排序规则说明

    Java使用lambda自定义Arrays.sort排序规则说明

    这篇文章主要介绍了Java使用lambda自定义Arrays.sort排序规则说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论