看板Programming
标 题教您如何设计解方程式的程式!
发信站HiNetNews (Mon Dec 7 04:49:46 2009)
转信站ptt!news.ntu!ctu-gate!news.nctu!newsfeed.berkeley.edu!ucberkeley!newsg
曾经有人问我(有人想徵求我同意拿去科展,
或在网页上提供给他的学生用)
如何设计出解方程式的程式,
而这方程式是由使用者自己任意撰写,
而非该程式作者内定的,
即使用者可自己指定为二元一次方程式、
三角函数式、分式.....
原始码因程式语言的关系不便张贴,
是我 20 年前设计的, 在此提供点子指引各位:
1.首先要选对撰写用的程式语言:
我的建议是选用解译式语言,
因为既然方程式要能让使用者撰写, 一定是外叫,
即您的程式将使用者写的程式当做副程式
叫进来执行,
而想运算叫进来的副程式就得利用解译功能,
如早期的 BASIC 语言,
以及我念大学时教授推荐的 derive,
後者就是内建了阳春式的解译器及文书编辑器.
2.熟读微积分, 尤其是数值分析部份:
解方程式对大学生而言最万能的方法
就是 Honer 及 Newton,
但是初出茅芦的大一生不知它们
各自的强处及弱点.
对绝大多数的大一生会很讨厌数值分析,
因为会算个半死,
但我却非常佩服 Honer 及 Newton 的眼光,
因为他俩的发明非常适合用电脑去算,
尤其是写成程式.
Honer 的强处是越算越精确、越接近标准答案,
缺点是计算者眼光要很敏锐, 要选对种子,
若搜索范围太宽, 可能有个峡谷, 内藏个根,
会被跳过去.
Newton 的强处是懒人喜欢用,
因为它会自己找答案,
缺点是只能用於曲线, 或遇到不可微分处
(如尖角)也算不出,
此外它常常在根附近打转, 就是不接近精确值.
我的建议是要截长补短, 同时搭配两法.
3.善用你的资料精度:
其实在电脑时代还有一招万用解法,
是我自创的, 特别适合超级电脑,
那就是以您的资料精度为单位逐一搜索.
举个例子, 您写了个会画出函数图的程式,
想由图中解根,
假设您萤幕的解析度是 1024 x 768,
那麽就设个双重回圈,
for(x=0; x<1024; x++) 及 for(y=0; y<768; y++)
然後一点一点去试, 一定找得到解,
差在精度不同而已.
为何说它适合超级电脑呢?
因为您可能是为了算气象或宇宙现象,
资料庞大又有时间限制,
且有很多方程式目前数学家还不会算.
4.程式设计原理:
很简单, 把自变量(x)代进副程式求因变量(y),
差异越小表示越接近根了.
--
还在用文字模式勉强表达数学式吗?
欢迎参观第四代绘图模式BBS!
微积分、相对论都难不倒它喔!
下列是提供连线用程式(client)软体的抓取网址
(2010/01/31後消失):
http://rapidshare.com/files/316447854/BraveClient_1_1_0.rar.html
1F:推 wa120:写得好像有多伟大似的... 140.133.9.148 12/06 23:15
2F:→ MasterChang:广告而已,不用想太多.... 59.104.123.176 12/06 23:39
3F:嘘 dryman:直接去弄个octave就好 114.45.174.238 12/06 23:57
4F:嘘 xam:囧... 还你自创的方法勒.. 114.32.92.137 12/07 00:03
5F:嘘 sunneo:他xx的 = = 这种垃圾玩意也敢拿来吹牛 118.171.82.213 12/07 06:15
6F:→ sunneo:超级电脑一定是他长辈嘘他的 暗指`无效率` 118.171.82.213 12/07 06:19
7F:嘘 MOONRAKER:敝帚自珍…我好像看到朱邦复了 XD 59.120.168.228 12/07 10:53
8F:→ yoco315:至少算有热血啦 XD 不过见识少了点就是..118.160.113.173 12/07 20:28
9F:→ yoco315:跟我国高中的时候闭门造车一样..118.160.113.173 12/07 20:28
10F:→ yoco315:不过那时也没网路.. 只能猛跑图书馆118.160.113.173 12/07 20:28
11F:推 yauhh:Access violation at address ooxxooxx in 61.231.16.50 12/15 07:53
12F:→ yauhh:module 'BraveClient.exe'. Read of address 61.231.16.50 12/15 07:53
13F:→ yauhh:xxooxxoo. 可惜了. 61.231.16.50 12/15 07:53