一元二次、三次、四次方程求解和复数的运算
对一元三次或者四次方程,是有数学公式求精确解的,可以不用迭代法。参考了维基的上的方法,现在我贴出一元二次、三次或者四次方程的LISP求解方法。使得在求解效率可以得到极大提高。
注明: 因为这几个方程的解有可能是复数,所以我对每个解都用表的形式来列出。
如果这个表的第二项为0,那么这个解是实数,否则是复数。
譬如 :\({x^4+3x^3+7x^2+2x-5 = 0}\)
对一元三次或者四次方程,是有数学公式求精确解的,可以不用迭代法。参考了维基的上的方法,现在我贴出一元二次、三次或者四次方程的LISP求解方法。使得在求解效率可以得到极大提高。
注明: 因为这几个方程的解有可能是复数,所以我对每个解都用表的形式来列出。
如果这个表的第二项为0,那么这个解是实数,否则是复数。
譬如 :\({x^4+3x^3+7x^2+2x-5 = 0}\)
MathJax是一个跨浏览器的JavaScript库,它使用MathML、LaTeX和ASCIIMathML标记在Web浏览器中显示数学符号。也是现今很多mathdown采用的数学公式语法拓展,其中较为大家数学和常用的便是LateX的公式语法,写论文的同学想必很熟悉了。本文介绍常用的MathJax数学公式语法。
此处用比较纯LISP的方法来解非线性方程。
主要采用Ridders方法和Van Wijingaarden-Dekker-Brent方法求解。
下面是其源码:
以下是字段和LISP结合使用的实例:
表达式一般来说有三种:前缀表达式、中缀表达式、后缀表达式,其中后缀表达式又叫做逆波兰表达式。中缀表达式是最符合人们思维方式的一种表达式,顾名思义,就是操作符在操作数的中间。而前缀表达式和后缀表达式中操作符分别在操作数的前面和操作数的后面。在写表达式,我们一般用中缀表达式,譬如 1+2*3-4/5。并且按照操作符的优先级进行计算。
然而LISP语言是一种前缀表达式,为了把表达式转为LISP函数或者求值,需要进行翻译,添加大量的括号和修改函数的顺序。
这个程序的目的就是使得这一工作变简单。
当然,CAD里面本身也有几种种方式能完成这个,但它们的优缺点容我后面讨论。
程序借鉴了飞诗的一些代码,在此深表感谢。
程序的核心代码如下:
输入: (dictremove (namedobjdict) "ACAD_DGNLINESTYLECOMP"),
然后pu清除后保存即可 。 尽管是一个很老的CAD的bug,但是有时候经常会碰到,还是记录下来,以免忘记。
(defun c:test() (vl-load-com)
对Autolisp来说,没有生成随机数的函数,一般来说,有如下方法可以产生它:
方法一:用同余函数实现,这是纯LISP的方法。
这个是java代码:
最新评论