博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oo之homework2个人分析
阅读量:5212 次
发布时间:2019-06-14

本文共 2127 字,大约阅读时间需要 7 分钟。

作业要求:简单幂函数和简单正余弦函数的导函数的求解。
与第一次作业的差别:增加了sin(x)、cos(x)以及所对应的指数形式,如sin(x)^+2
 
易错点:sin与cos中不能出现空格,即s i n不符合情况,与先前的常数项中不能有空格相同
 
个人思路:
(Ⅰ)wronginput部分
1.匹配是否出现了其他非法字符,利用将合法字符全部删除来检测是否有其他字符方法来实现。
主要调用函数:string.replaceAll();
2.以+号为分割,将各个部分分开,称之为项1.
/*这一部分有可能出现++|+-|-|--的形式,利用++为+,+-不变,-+为+-,--为+的方式进行屏蔽化简
与此同时,对于指数上出现正号的情况,利用正则表达式将其屏蔽化简,如x^+6,对应正则表达式为x\\s*\\^\\s*\\+\\s*\\d去进行化简*/
3.对于各个风格的部分,利用正则表达式去进行匹配,不合法的部分wrong输出
/*以一个包含了各个方面的正确例子为制造正则表达式
2*sin(x)^+2  *  7x+7*x*8*x+3*sin(x)*cos(x)*x*sinx^+3*/
4.由于在上一步进行分析的时候发现,可能会出现(中强测一定会出现)多元因子连乘的情况,所以我准备再用*号对项1进行分割,从而得到项二,对于项二利用正则表达式进行匹配,对于不合法的项wrong输出。
/*先利用trim将项2的前后空格去掉,这样在匹配过程中就会减少对于\\s的匹配,从而提升利用率
项2的合法正则表达式:
[+-]?[(sin)(cos)]?\\s*\\(x\\)(\\s*\\^\\s*\\d*)? || [+-]?\\s*\\d*\\s*
*/
 
(Ⅱ)rightinput部分
1.经过wronginput检测后,可以确定所有空格对本表达式均无害,所以将全部空格去掉化简
/*主要调用函数:string.replaceAll("\\s","');
*/
2.将整个表达式进行符号的化简,依旧采用+号进行分割的方式,我们将分出的项称为项1,同wrongingput中的第二步相同
/*这一部分有可能出现++|+-|-|--的形式,利用++为+,+-不变,-+为+-,--为+的方式进行屏蔽化简
与此同时,对于指数上出现正号的情况,利用正则表达式将其屏蔽化简,如x^+6,对应正则表达式为x\\s*\\^\\s*\\+\\s*\\d去进行化简*/
3.将项1中的式子进行乘法化简
/*具体化简有:以*号去划分项1中的每一项得到项2,继而将项2中相同性质的项进行乘法运算,如
这里有个小坑就是-sin(x)应该先做一个分解,将其变为-1*sin(x),+同上
\\d*\\d得到常数1
x^\\d * x^\\d 得到x项
sin(x)\\^\\d * sin(x)\\^\\d 得到sin项
cos(x)\\^\\d * cos(x)\\^\\d 得到cos项
化简到最后的情况会变为(\\d*\\*)?(x\\^(-)?\\d*\\*)?(sin\\(x\\)\\^(-)?\\d*\\*)?(cos\\(x\\)\\^(-)?\\d*\\*)
即:num1*x^num2*sin(x)^num3*cos(x)^num4
*/
4.将化简之后的式子进行求导
/*我们将所有整合后的式子全部变为num1*x^num2*sin(x)^num3*cos(x)^num4这样的标准形式
这样再求导的过程中,可以直接利用通式
num1*num2*x^(num2-1)*sin(x)^num3*cos(x)^num4+num1*num3*x^(num2)*sin(x)^(num3-1)*cos(x)^(num4+1)-num1*num4*x^(num2)*sin(x)^(num3+1)*cos(x)^(num4-1)
从而可以得到求导的结果*/
5.将求导后的式子进行化简
通过寻找求导后的式子是否有相同的x、sinx、cosx的指数从而去进行一个同类项的合并
为了使得化简更加的精炼,我们对上一步求导后返回各项的系数,指数,即新的num11,num12,num13,num14,+num12,num22,num32,num42,+num13,num23,num33,num43
共12组数字,并采用空格与+号进行分割
如果num11、num12、num13为0,那么第一组|第二组|第三组不做处理
接着将非零的项用ArrayList存起来
如果num12,num13,num14与后置相同
那么合并同类项进行num11的计算,将原项删除,并且将合并的项动态数组ArrayList存起来
6.输出化简得项
结束程序
wa点:sin(x)^  sin (x)  23+sin(x)*+3+x^8  +++x  \f1  \v1  +++  +
1*+1  x*+-1  x*++1
 
以上纯属个人观点,作者是个小白,编程这一块比较弱,欢迎各位大神指正。

转载于:https://www.cnblogs.com/pikaqiu-orange/p/10518120.html

你可能感兴趣的文章
服务器被疑似挖矿程序植入107.174.47.156,发现以及解决过程(建议所有使用sonatype/nexus3镜像的用户清查一下)...
查看>>
类型“XXX”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。
查看>>
JQuery 学习
查看>>
session token两种登陆方式
查看>>
C# ArrayList
查看>>
IntelliJ IDEA 12集成Tomcat 运行Web项目
查看>>
java,多线程实现
查看>>
个人作业4-alpha阶段个人总结
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
递归-下楼梯
查看>>
实用的VMware虚拟机使用技巧十一例
查看>>
监控工具之---Prometheus 安装详解(三)
查看>>
Azure Iaas基础之---创建虚拟机
查看>>
不错的MVC文章
查看>>
网络管理相关函数
查看>>
IOS Google语音识别更新啦!!!
查看>>
20190422 T-SQL 触发器
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
poj1422_有向图最小路径覆盖数
查看>>
BootScrap
查看>>