之前研究了单变量求解一元多次方程,可以解决线性求解或者非线性求解。后面一直想研究输入方程式,直接求解的方法。目前获得小小进展,接下来简单介绍下。
1. 根据方程式,求得结果
可以在Excel/WPS中,输入方程式,以及未知数x的取值,直接得到结果值。效果如下:
从上动图可以看到,函数自动识别了方程式,然后通过输入x值,进行了自动计算。
2. 字符串识别为计算式
将字符串识别为计算式,主要是通过codingseb/ExpressionEvaluator类库实现的。此外还有NCalc等方法。
在此基础上,对字符串是被进行了少量改动,主要是将^这个符号的作用进行了单独识别,原^表示异或,运算规则是两个位相同为0,相异为1。在这里,将其修改为幂函数,即次方的作用,x^3表示x的3次方。
替换方式主要通过正则式,识别字符串中的^符号,然后替换为Pow(x,a),这样才能被程序正常识别。由于正则式比较简单,所以目前只能识别单括号内容,无法识别嵌套括号。
比如判断^后面的数字,可以用下面正则式表示:
pattern1 = @"(\^([-+]?\d+))+";
识别括号的指数,可以用下面正则式:
pattern1 = @"\([0-9a-zA-Z\+\-\*/\%]+\)\^";
最终通过多个正则式,将字符串中的x^a,转化为Pow(x,a),从而完成计算。
3. 方程式输入规则
方程式常规输入方式如下:ax^m+bx^n+c。只能有一个未知数x,其中a,b,c,m,n都是常数,可以为负数。方程式可以有括号,如(a-bx)^n。
一些特殊函数输入方式如下:sin(x)、cos(x)、tan(x),exp(x)、log10(x)、log(a,x)、log(x,a)等等,这些必须输入括号。
按以上规则输入时,x暂不能作为指数,若想x作为指数计算,必须按以下输入方式,pow(5,x)。表示5^x,即5的x次方,这种方式程序才能识别。
4. 总结
总而言之,目前函数只支持一元n次方程计算,在想快速进行计算时,该函数会比较高效便捷。
下一篇文章,我将介绍如何快速进行方程求解。
自定义函数需要通过安装插件才能使用,插件地址我会放在评论区,也可以在我发表的其他文章中查看下载地址。若发现函数有错误,或有什么好的建议或想法,欢迎留言讨论。