java求导数_JAVA实现表达式求导运算的分析总结

本文详细介绍了使用JAVA实现表达式求导的三个阶段,从简单的多项式求导,到引入sin(x)和cos(x),再到处理嵌套因子。通过类图和度量分析展示了代码结构的演变,以及在处理合法性判断、求导计算和结果化简中遇到的问题和解决方案。在最后一次作业中,作者通过重构解决了超时问题,实现了更高效的方法。
摘要由CSDN通过智能技术生成

1第一次作业

1.1题目描述

对形如4*x+x^2+x的多项式求导。

1.2类图

7b4c03f54d8cec3ba79837678cf5f387.png

1.3度量分析

3fb6be092ae3e5757ce2c111e97c1e5a.png

在完成第一次作业时,我的写法没有特别的“面向对象”。唯一封装起来的是Node,代表多项式的一个项。PolyDerivation是一个方法庞杂的类,先判断输入是否合法,再将多项式拆分成独立的项,接着求导,同时也包含了程序的入口main。这无疑是一个面向方法的写法。

写valid方法判断合法性的时候,经历过一次波折。一开始的思路是用一个很长的大正则表示出整个多项式,写完发现超过了100个字符,很不美观。而且如果表达式的项数过多,递归层数太深会爆栈。然后我换了一种思路,正则每次只匹配一个项,而项又可以根据x有没有系数和指数分为5类,所以我一共写了5种很短的正则分别匹配5种项。

但是我有一个地方多此一举了。就是用parsePoly和parseOp两个方法分别取得独立的项和他们之前的符号。其实连接各个项的符号可以归并到每个项里。

1.4BUG分析

我公测和互测阶段都没有bug。其实提交之前,我改了很多自己的bug。比如优化之后&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java计算器,可以计算多项式和它的导: ```java import java.util.Scanner; public class Calculator { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("请输入多项式的次:"); int n = input.nextInt(); double[] a = new double[n+1]; System.out.println("请输入多项式的系:"); for(int i=0; i<=n; i++) { a[i] = input.nextDouble(); } System.out.print("请输入自变量x的值:"); double x = input.nextDouble(); double result = evaluate(a, x); double derivative = evaluate(derivative(a), x); System.out.println("多项式的值为:" + result); System.out.println("多项式的导为:" + derivative); } // 计算多项式f(x)在x处的值 public static double evaluate(double[] a, double x) { double result = 0; for(int i=0; i<a.length; i++) { result += a[i] * Math.pow(x, i); } return result; } // 计算多项式f(x)的导 public static double[] derivative(double[] a) { double[] result = new double[a.length-1]; for(int i=1; i<a.length; i++) { result[i-1] = a[i] * i; } return result; } } ``` 在上面的代码中,我们首先读入多项式的次和系,然后读入自变量x的值。接着,我们调用`evaluate`函计算多项式的值和`derivative`函计算多项式的导。最后,我们输出结果。 `evaluate`函采用了一个简单的循环来计算多项式的值。我们首先初始化结果为0,然后遍历系组,并累加每个系乘以自变量的幂次方的结果。 `derivative`函也采用了一个简单的循环来计算多项式的导。我们首先初始化结果组为0,然后遍历系组,并将每个系乘以其对应的幂次方的结果存入结果组中。注意,导的次比原多项式的次要少1。 这个计算器可以计算任意次的多项式和它的导
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值