求导计算机在线,求导计算器
第一次:
一.表达式处理
题目要求表达式合法,而不合法的表达式显然是不能进行后续操作的,因此第一步要做的就是把不合法的表达式排除在外。
我的想法是这样的:
1. 把所有包含正确表达式不该有的字符的输入屏蔽掉
2. 把所有包含非法数字的表达式屏蔽掉
3. 把所有含有类似“+++”、“+-+”、“^++”等的表达式屏蔽掉,为下一步的拆分做铺垫
4. 当表达式差分成一个个项的时候,只要有一个项出现异常,整个串即为不合法
其中可能会出现一些细节问题,例如:
1. 判断非法字符的方法:我采用了最土的方法,把合法字符全部删除,如果还存在字符则显然非法。
2. 不合法数字的正则表达式:"(.*)[-\\+\\^][-\\+]( )+(\\d)(.*)"和"(.*)(\\d)( )+(\\d)(.*)"。
3. 处理分隔符时的方法:因为我采取的分割口是“+”,所以每两个项之间必须有一个加号,还要保证x^\\d中不能出现加号,因此要将将x^\\d中可能出现的加号删除,将++换成+,--换成+,-+和-换成+-,这样就可以保证所有拆分出来的项都是合法的。当然如果表达式开头出现加号则在开头加上“0”,结尾出现加号则屏蔽掉。
二.项的处理
将切分好的项进行标准化,化成"(.*)*x^(.*)"的形式,以便使用*x^进行切割,将两边的数字进行处理,为防止数据溢出采用biginteger,一旦出现异常,则表达式显然不合法。将处理好的键值对存入hashmap中,通过幂次相等来合并同类项。
求导,更新hashmap中的数值等待输出。
三.输出处理
将每个键值对标准化成"\\d*x^\\d\\+"的形式,添加到同一个空字符串上,将系数或指数为0或1的项进行化简,最后删除最末尾的+即可输出。
第二次:
一.表达式处理
和第一次基本相同,又略有差异。首先将不合法表达式粗略的排除在外。
具体操作如下:
1.排除空串(将所有‘\t’转化成‘ ’)
2.将所有包含非合法字符(串)的表达式排除(合法字符包括^*+-以及数字、(x)、sin、cos)
3.将所有含有类似“++++”、“+-+-”、“^++”、“*++”等的表达式屏蔽掉,为拆分做铺垫
4.数字非法的正则表达式前多加入正负号,其他均与第一次相同
5.拆分好的项被称为乘法项,作为下一步处理的输入
二.乘法项的处理
将切分好的项再以*号分割,并将同类项合并,利用通式求导化简存入哈希表,x的幂次作为key,新建triangle类用与化简三角函数,最后输出。其他均与第一次相同。
三.化简处理
显然输出结果中会出现sinx^2+cosx^2等情况,我在作业中做了如下处理。
1. 合并同类项(以x为key)
2. 当出现asinx^(m+2)cosx^(n)+bsinx^(n)cosx^(n+2),ab>0时,可以进行化简提取通式将sin2+cos2化简成1,并降低幂次和系数
3. 当出现类似asinx^(m)cosx^(n)-asinx^(m)cosx^(n+2)时,可以将两项划为一项
4. 当出现1-sinx^2时合并成一项。最后按照第一次输出。
第三次:
一.表达式处理
1.判断是否有输入,如果有,则扫描一行字符,判断是否存在非法字符。
2.判断是否存在不合法数字,即:9 9;+++ 9;^+ 9;*+ 9等(同时避免了++++;^++;*++等的出现。
3.判断是否存在不合法加减号,并替换成+,+-两种状态。
4.为满足以加号分割的需求,将所有非连接表达式的+号替换成&。
5.将切分好的各项存入term中
二.项的处理
1.将每个项用*号分割,并存入factor,同时判断拆分出来的表达式的类型,使用term递归。
2.在处理过程中,严格把控每一种情况,一旦出现非法表达式或项,立刻抛出异常。
三.Term类
1.将Term分为三类,
(1).x类:经过求导之后,直接输出导函数
(2).sin类:经过求导之后,输出原函数减一次幂乘上脱掉外层括号后的导函数
(3).cos类:经过求导之后,输出原函数减一次幂乘上脱掉外层括号后的导函数
2.脱括号:当整个表达式不包含在括号外的*和+时,可以脱掉一层括号,当不能再脱括号时转化成一个Factor类
3.求完导数后的结果套上一层括号,保存为一个字符串
4.将Term类数组中的所有导数相加即得到结果
四.Factor类
1.将Factor类用*号切割,把每一个切开的项用链式求导法则求导。
2.求完导数后的结果套上一层括号,保存为一个字符串
五.输出处理
本次输出我完全没有处理,还是求稳好一点吧。
关于互测:
三次作业我并没有采用对拍等方式进行互测找bug,而是通过查看正则表达式的方法,寻求bug突破点,同时也发现了许多值得注意的地方:
1.多数同学采用的是Pattern和Matcher类来处理正则,而我直接用(.*)和matches方法来处理。
2.部分同学使用超长正则一次性匹配,在bug检查时简直无懈可击,但是可能会出现TLE等不可预知的情况
我的bug:
第一次出现在正则表达式中的+号和*号失误,导致空格的判断出现问题
第二次出现在化简时符号省略出错,导致输出变得诡异
第三次出现在参数带入错误,导致删括号的函数直接删掉了所有外围括号,将许多例如(1)+(1)等的测试点处理成了1)+(1,而后直接判错
可能我的代码并不是真正的面向对象,(不过相信会慢慢好起来的)。
求导计算机在线,求导计算器相关推荐
- 括号计算机在线使用方法,计算器的使用方法
A.1.单击MS存储当前的显示值.比如计算"Sqrt(3)/2",得出结果0.8660254037844,后面的计算中又会用到它,这时我们就可以按一下MS钮存起它.有数据在存储区时 ...
- 求根计算机在线,在线一元方程求解计算工具-一元函数自动求解在线计算器
一元函数自动求解在线计算工具 牛顿法是求解的核心方法,它的维基百科的定义为:牛顿法是一种在实数域和复数域上近似求解方程的方法.方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x)=0的根.简言之 ...
- 求根计算机在线,jQuery实现的简单在线计算器功能
本文实例讲述了jQuery实现的简单在线计算器功能.分享给大家供大家参考,具体如下: 先来看看运行效果图: 完整代码如下: /p> "http://www.w3.org/TR/xhtm ...
- 科学计算机算余切,科学计算机在线算(科学计算器如何算正态分布)
科学计算器开根号怎么算的? 计算器-查看-科学型被开方数-INV打勾(在计算器的第5行左侧)-x^2,这是开平方.若点x^3则是开立方.若点x^y-4就是开4次方. 下列那个属于计算机科学计算(在线等 ...
- 算数计算机在线应用,数学计算器
类别:系统软件大小:7.4 MB 日期:2020-05-10语言:简体中文 版本:V2.1.8 安卓免费版 平台:Android All 数学计算器(数学计算器在线带根号)应用程序是一个功能强大的全方 ...
- 求逆矩阵计算机方法,求逆矩阵的快速方法(用于编程).pdf
求逆矩阵的快速方法(用于编程) ? ? 1 2 2 2 Ρ Ρ Ρ Ρ Ρ ? Α Α Α Α Α Α 3 Α Β Β Β 3 Α Β Α Β Α Β Α Β Β Β Β 第 20 卷第 1 期 大 ...
- 年龄计算机在线计算,年龄计算器在线计算
年龄计算器在线计算是一款最近在抖音上非常火的年龄计算器,可以精准的计算今年的哪一天你多少岁了,农历的时间也可以自由的转换,可以精确到分和秒哦,计算的界面非常的简洁,但很实用,也可以记录身边人重要的日子 ...
- 浮点数运算计算机在线,双浮点运算计算器
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 双字换算计算机 双浮点运算计算器 初始数值: 双字数值: var button = window.document.getElementById(&quo ...
- 浮点运算计算机在线,双浮点运算计算器
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 双字换算计算机 双浮点运算计算器 初始数值: 双字数值: var button = window.document.getElementById(&quo ...
- 百度年龄计算机在线,百度年龄计算器生日书app
百度年龄计算器生日书app是一款非常好用的计算年龄和生日的神器工具,大家都可以来计算自己的年龄数据,可以精确到秒呢,而且可以在线记录男女朋友,或者比较重要人的生日,每次在他们生日即将来临之际,就可以悉 ...
最新文章
- 利用Python在Jetson TX2上抓取和显示摄像头影像
- apollo在liunx环境实战(三)
- 使用OpenCV-Python的函数minMaxLoc()应该注意的两点
- Spring Boot 整合 Netty(附源码)
- Java 第二章 程序设计基础
- NIO 之 FileChannel
- 14 张Python数据科学速查表
- error_reporting
- 300张小抄表搞定机器学习知识点:学习根本停不下来!
- 【中级】 微信小程序 - 腾讯云 - wafer2 - PHP - DEMO - 003 - 源码分析 - 01 - 文件组成详细分析
- CSS样式表——列表与布局
- 【2020】微软 MCSA,MCSD,MCSE认证于2021年1月31停用,此后您将无法再获得此认证 - GJYJSJGS - 高级云计算架构师
- 2012年读书年度小结
- 2020软件构造实验三
- 百度地图如何准确定位?注意surroundingPois
- linux下mysql(rpm)安装使用手册
- 【论文翻译】Recent security challenges in cloud computing 近代云计算面临的安全挑战
- 彻底删除Cygwin
- 牛客小白月赛4 D.郊区春游
- HTB-AdmirerToo
热门文章
- 三星电脑打开虚拟服务器,三星笔记本进BIOS后怎么开启CPU虚拟化
- Houdini17 OptiX Denoise使用
- VBA实战(7) -字典(Dictionary)
- A* operator/(A*, A*)‘ must have an argument of class or enumerated type
- 苹果移动设备(iPhone/iPad)分辨率汇总
- lob移表空间 oracle_关于oracle带lob对象的分区表,移动表空间的问题
- WiFi-802.11 2.4G频段 5G频段 信道频率分配表
- OC5028B 内置MOS开关降压型LED恒流驱动器
- 养猪订阅号文章添加一键拨号
- border缩写属性