找回密码
 新注册用户
搜索
查看: 6320|回复: 6

建立一个“通用的多元方程逼近求解的项目”如何

[复制链接]
发表于 2008-8-8 16:35:33 | 显示全部楼层 |阅读模式
在念书的时候比较懒,方程的解一般都用计算机逼近计算。

比如求一个一元二次方程的最大值,说明只有一个最大值。
就用x不断的增长,y也不断的增长,当x下一个步近得出的y比上一个小的时候,就说明y的最大值在x的这个步近之间。

具体的术语已经忘了,反正就是一元2次方程只有一个弯,3次方程有2个弯,4次方程有3个弯等等,一元n次方程用n-1分法进行分段计算,再不断逼近,总之不回露掉任何一个拐点的。

当预到多元多次的方程阵的时候,分的段就更多了,分段数几乎是:元数×(次数-1)。

后来发现有的工程要计算的矩阵真是要崩溃的。线性方程就有100阶以上。我挨个试验得多少分法才行啊

如果大家算就好多了。500元12次方程也只不过分6000段进行计算嘛。

如果开发一个通用的程序,可以对任意多元的方程(带点指数对数的也没有关系)进行n分法逼近计算,应该是个很实用的程序。
这种项目的原生数据少:只是描述一下多元方程的内容,设定一下所计算的各元的逼近范围以及分段的细致程度,还有就是对结果的判定要求。
计算消耗CPU,需要的内存也不多。返回的结果也很少

该项目是解方程,具体要解的方程就是其子项目
子项目提供者只要按照固定的格式给出方程内容,分段逼近的细致程度,和对结果判定的条件。
在一个项目中可以安排多个方程的计算任务,只有平台才对计算具体的方程和计算任务进行管理。用户端不再区分具体算的是哪个方程。
当需要求解的方程不断的增多,这个项目就可以不断的延续下去。

这个项目对工程、科学计算都有很通用的价值。(不好意思,做工程的人就是老想着工程的事
应用广泛、实现简单、对数学、工程学也有很大的意义!(有点煽动的嫌疑哈
回复

使用道具 举报

发表于 2008-8-8 19:15:19 | 显示全部楼层
现在解方程不用这种的~~~都是直接牛顿法~~~再加上根的分布的估计~~~或许还有随机算法~~~尤其是维数高的时候~~~
我看过一本应用数学方法的电子书有讲过一点这些内容~~~但是现在不知道被我扔哪儿了~~~
回复

使用道具 举报

 楼主| 发表于 2008-8-9 04:22:36 | 显示全部楼层
没错,牛顿法比n分法逼近的速度快很多。但那是在已经知道解所在的区间的时候。

在干脆不知道解所在区间的时候,这两种方法的判断速度是一样的。

其实应用数学的课我也学了,只不过细节有点忘了,而且书也不在手头上。

主要是提一个解方程的项目,看看是不是简易可行,并且有意义。

目前不就是没有适合我们自己开发的项目嘛,寥胜于无嘛

比如先做一个专用的1000个1000元3次方程的阵。方程系数随机定义一下(检验一下各个方程都不相关)。看看能出来多少个解 精度也不用太高,32bit浮点数计算就够了,系数绝对值在0.1~10之间。解的精度0.001。
1000元3次方程解的最大范围应该要求在正负10000以内。任何数值超出10000的解都没有实际意义。为了保证任务足够多,以及避免露掉解,每个未知数用6分法进行计算。1000个未知数每个6分就是至少6千个段。
每个段分给每个用户进行计算,在每个段中,在按照6分法进行逼近。
其他的未知数都不变,一个未知数在段内,从小到大不断增长,导致计算结果与方程的等式偏差单向的增大或者单向的减少,则说明这个未知数的解不在这个段内。当所未知数在各自的段内都有这样的情况,那么这些未知数的段里肯定都没有解。
当一个未知数不断增长(其他未知数不变),计算结果与方程的等式偏差先增大后减少,或者先减少后增大,那么说明拐点就在这个由大变小或者由小变大的小段里。
可以把这个小段的结果回传给平台,让平台在这个区间内重新划分更细的小段来分给众多用户进行计算。
直到每个未知数的小段得出的计算结果与方程的偏差都小于0.001。那我们就认为我们已经得到精度不少于0.001的解了。


很笨的方法,很简陋的方法

[ 本帖最后由 (Y) 于 2008-8-9 04:25 编辑 ]
回复

使用道具 举报

发表于 2008-8-9 08:37:10 | 显示全部楼层

回复 #3 (Y) 的帖子

其实远不需要那么麻烦~~~先消元~~~能只剩下一个未知数~~~最多是3000次的~~~可能会剩下多个方程~~~不过没关系~~~平方加起来等于0就拼成一个了~~~这样的话最多6000次~~~然后有可能是有理幂的~~~这样的话作换元最多变成36000次的方程~~~
然后这是一个多项式~~~解多项式方程的技术已经很成熟了~~~可以先求导求极值点然后牛顿~~~求导这个过程可以使方程降一次~~~这样不断做下去的话就归结到解一元一次方程~~~然后慢慢变回来求出所有根~~~
然后根据换元和消元的约束继续解方程把每一个根对应的方程组解的每一个元还原出来~~~这个是毫不困难的~~~
这样的话这个方法数值稳定性和精确度都不低~~~

其实关键是在于方程以及方程组的解法无论在工程上还是数学上都已经研究得比较透彻了~~~没有多少发挥的空间~~~再说如果从数学的角度看的话解这样的方程组并没有什么有趣或是重要的地方~~~数学上重大的而又可以用计算机方法进行计算的问题还是很多的~~~比如说黎曼Zeta函数的零点分布~~~或者是组合数学中的Ramsey数~~~
回复

使用道具 举报

 楼主| 发表于 2008-8-9 09:11:17 | 显示全部楼层
没错,其实对于3次方程来说远没有那么麻烦。
我上边的描述也是为了增加算法的通用性,简化开发过程。

的确,方程以及方程组的解法无论在工程上还是数学上都已经研究得比较透彻了。
但我们不是在研究解方程的方法,那些东西也不是我们研究的范围。
我们研究的是在已经成熟的方法上,如何将求解的过程变为分布式的计算。如何发挥分布式计算的价值。

我总是提出一些有关工程方面的,很粗浅(或者说很肤浅)的东西。这和深奥的数学理论以及那些更有爱心和兴趣的公益性的东西远不在一个层次上。
既然分布式计算能给我们翅膀飞跃遥远的高山,那么我们是否也可以用分布式计算来驱除一些眼前道路上的荆棘呢?

解方程永远不是一个一次性的项目,是工程和数学上长期的课题。我们使用分布式计算的方法,开发一个通用的解多元方程的项目,不也是为工程和数学提供一个便利的工具么?多少科研机构、大学专业、甚至中小企业都要进行研究而不具备编程的能力,以及大量的计算资源。我们如果能减少它们的重复开发的劳动,为研发工作提供便利,不也能使他们能更快的研究出更多成果么?不也是为我们国家甚至世界的发展做出一定的贡献么?

又上来煽动性了,不好意思
回复

使用道具 举报

发表于 2008-8-9 09:53:59 | 显示全部楼层

回复 #5 (Y) 的帖子

但是分布式计算不是锤子,不能看见什么都用它来敲一敲~~~
如果要搞一个项目的话,项目要解决的问题就不能是那些在个人计算机上用合适的算法跑一个月就可以解决的问题,这样的话无论是任务的分发还是计算的原始数据都会收到很大的限制,更别说要为此特别架设一个项目的花费了~~~这可不是几千块钱可以解决的问题~~~
还有很多别的问题,比如说项目如何维持?如果从科研机构和企业收服务费的话我觉得会有很多人不愿意算~~~因为我们一向主张公益和非营利~~~如果自己拉赞助的话我觉得很困难~~~还有就是实际上会有机构使用这种服务吗?现在matlab已经可以集群计算了~~~我相信我们无论怎么写算法都很难超越matlab这类专门的软件的水平~~~还有很多很多别的问题就不一一说了~~~

想要搞一个项目的想法是很好的~~~但是也要看到搞一个项目的实际困难~~~很多东西不是说想有就有的~~~有时候也要看到现实的状况还有想像和现实的差距~~~
回复

使用道具 举报

 楼主| 发表于 2008-8-9 15:24:10 | 显示全部楼层
谢谢指教
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-5-5 03:46

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表