例題 非主值解答 更新 99,10,24
本卷是實數計算器及複數計算器,使用爪哇簡稿語言
為計算器指令語言,請看
例題
本卷編程環境是 微軟 MSIE 6.0   說明   比較
複數的參考資料        
本卷是個人的閑暇作業,輸出結果不能
保證正確,請先核對結果是否合理。

本卷提供複變函數之源碼,但是不能保證正確,下面有一
系列的測試按鈕,左端的按鈕是執行按鈕,「第一複數」
、「第二複數」方格是輸入方格,「一二複數輸出」是輸
出方格。「一至多函數」輸出於方格一,缺乏核對資料,
請使用者先行驗證輸出是否合理。 9803220737
證明正一等於負一 能找到數學規則的漏洞才可能「證明」



下面是複數函數(不是數學函數),執行複數加減乘除。
簡述 第一複數第二複數 一二複數輸出     函數名稱
caddf(c1,c2)
csubf(c1,c2)
cmulf(c1,c2)
cdivf(c1,c2)
conjf(c1)
cnewf(r1,r2)
cabsf(c1)
csqrt(c1)
cmulr(c1,r2)
cargf(c1)
cpolr(c1)
cxryi(c1)
cnegf(c1)
cgetr(c1)
cgeti(c1)

 ; 
1 0 = 刪除函數名稱,為輸出方格騰出空間。9804130942
上面是複數函數,執行複數加減乘除等轉換作業,不是數學函數,
下面是複變函數,多至一函數,不必使用 +2*n*PI 於輸出答案。 9803161014
第一複數就是函數名稱中的 c1 , 第二複數就是函數名稱中的 c2 。
簡述 第一複數第二複數 一二複數輸出     函數名稱
cexpi(c1)
cexpf(c1)
csinf(c1)
ccosf(c1)
ctanf(c1)
csinh(c1)
ccosh(c1)
ctanh(c1)
cdotf(c1,c2)
點積,複數分隔符號是﹕ 逗點或者 分號';' 或者 空格
點積使用 〈u, v_conj〉, 不用 〈u_conj, v〉 兩種答案互為共軛複數
cexpf('3i') 等於 cexpi(3) 不必加入 "i",不必用括號。 9805181224
cexpf('1+3i')=cexpi('1+3i') ; cexpf(2)=cexpi('2+0i')

上面函數都不輸出於下面的方格一。下面的函數都輸出於方格一。
下面是一至多函數,使用 +2*n*PI ,其中 n 是任意整數 9803151835
簡述 第一複數第二複數 主值輸出 n=0    函數名稱
clogf(c1,nBgn,nEnd)
cpowf(c1,c2,nB,nE)
casin(c1,rtsq01,nB,nE)
cacos(c1,rtsq01,nB,nE)
catan(c1,rtsq01,nB,nE)
asinh(c1,rtsq01,nB,nE)
acosh(c1,rtsq01,nB,nE)
atanh(c1,rtsq01,nB,nE)

參數說明如下﹕ c1 及 c2 是待計值的複數。
rtsq01 決定開平方之後取正值(非 1)或者負值 (1)
如果略除 rtsq01 內定開平方之後取正值(root01=0)。
nBgn,nEnd 是 2*n*PI 中 n 值的範圍, 9803242228
如果略除 nBgn,nEnd ,內定 n=0 至 0 一個主值解答
如果只有 nBgn 及略除 nEnd ,只送反一個解答 n=nBgn
如果使用 nBgn,nEnd ,送反 n=[nBgn,nEnd] 解答。當送
反解答超過一個複數時,編程者需要用經理函數處理,
否則十個複數解答的二十個實數.虛數全部串在一起。
本卷經理函數例題 clogfMan(clArg1) 及所有的 ...Man()

一至多函數 +2*n*PI 中整數 n 的範圍

方格一。答案輸出

方格二。公式說明  


下面有「測試方格三指令」按鈕,實際上是一個小型計算器。
測試注意事項﹕複數的加減乘除都以函數執行,所以,
錯誤 (1+2*i)+(3+4*i) ,正確 caddf('1+2*i','3+4*i')
錯誤 (1+2*i)-(3+4*i) ,正確 csubf('1+2*i','3+4*i')
錯誤 (1+2*i)*(3+4*i) ,正確 cmulf('1+2*i','3+4*i')
錯誤 (1+2*i)/(3+4*i) ,正確 cdivf('1+2*i','3+4*i')
(1+2*i) 是錯誤的, '1+2*i' 是正確的 9803161923

使用網路查詢服務找下面的字串
Operator Overloading In Javascript
「爪哇簡稿的運算子重定義」
http://blog.thejit.org/2009/01/27/why-not-operator-overloading-in-javascript/
上面的網頁解釋為什麼爪哇簡稿的運算子不能重定義?
方格三內定值是 sin(1+2i)^2+cos(1+2i)^2 方格四應該得 1+0i

請點擊=> MSIE 6.0
例題
看19 ; 51+ 大型例題
方格三。輸入指令   /*=*/ 不印輸出; //^ 加印空行

編程環境是微軟MSIE 6.0
方格四。輸出答案  

方格五。偵錯輸出 ;  

 

<a name="online01">
複數的網路資源
92,07,02,21,21 下載的 qccalc.exe
http://freeman2.us/qccalc.zip
98,03,12,20,53 取閱
http://mathforum.org/library/drmath/sets/college_complex.html
98,03,17,11,12 目錄
http://personal.maths.surrey.ac.uk/st/C.Wulff/Modules/MS224/
98,03,17,11,15
http://personal.maths.surrey.ac.uk/st/C.Wulff/Modules/MS224/cvch1.pdf
98,03,21,19,19 自由人保留的複數計算器
http://www.greuer.de/JavaScriptComplexCalc.html
98,03,21,19,39 自由人保留的複數計算器
http://www.twopaths.com/Calculator/CALCZ.EXE
<a name=JSMathFunc>
<a name="doc78">
99,09,21 更新說明
99,09,21,19,50 英文開始
99,09,27,19,10 中文開始
本卷 complex1.htm 原本目的是展示
複數函數的使用情況,請看頁面結構
複數函數指令組 , , <a name="doc79">
當時寫了方格三、四、五便利貼入測試指令(
方格三),閱讀輸出結果(方格四)及偵錯輸
出(方格五),後來發覺我可以貼入任何有效
的爪哇簡稿指令,並且得到輸出答案,這就是
計算器嘛。本卷的特點是如果想知道一個變數
,例如 abc,的值,只需要在一行存放 abc
即可
<a name="doc80">
complex1.htm 把方格三的指令
[[
var abc=sin(PI/3)
abc
]]
改為
[[
var abc=sin(PI/3)
boxd14.value+="abc"  +"\n";
boxd14.value+=abc
boxd14.value+="\n";
]]
<a name="doc81"> 例題
再執行改後指令,把變數值存入方格四,結果
為
[[
abc
0.8660254037844386
]]
complex1.htm  數次更改的版本,都維持這個
性質。
<a name="doc82">
早期版本判別一行是否印值的方法是看此行有
沒有等號,
如果有等號, complex1.htm  不印值,
如果無等號, complex1.htm  要印值,
也就是加入 [boxd14.value+=]
這個簡單的判別方法對本卷作者劉鑫漢自己適
用,其他人會感到麻煩與困惑。
<a name="doc83">
例如,指令
[[
i=12
if(i<5)
  {
 i++
  }
else
  {
 i--;
  }
i
]]
<a name="doc84">
必須寫為
[[
i=12
if(i<5) { dummy=0
 i++;  dummy=0 }
else { /*=*/  //9909271936
 i--;  dummy=0 }
i
]]
才能引入 '='.

<a name="doc85">
更新 99,09,21 有大幅度的改變,主要是修改
函數 function evalAll() 
不再依賴有沒有等號作為唯一判別,重點為
將爪哇簡稿保留字串列入考慮。
var keyword=... //9908190809
complex1.htm 檢查變數名稱是否為保留字串?
現在一行一個 'else' 不會產生錯誤。使用者
不必加入 dummy=0 。

<a name="doc86"> 例題
但是 complex1.htm 仍然不能完全與爪哇簡稿
同步,例如指令
var aa=sin(PI/5); 
complex1.htm 及爪哇簡稿 javascript 都執行,
但是,相同的指令切割為三行之後
 aa 
 =  
 sin(PI/5);
爪哇簡稿 javascript 沒問題,然而
 complex1.htm 產生錯誤!

<a name="doc87">
更新版的 complex1.htm 不能印出
 !true
的答案,理由為
 !true //為何不印值: 本行無變數
老版本 (以有沒有等號 '=' 為判別) 印出答案
[[
 !true
false
]]

<a name="doc88">
complex1.htm 像一個翹翹板,當我修改及
抬起一端時,另外一端卻落下去,請不要責怪
劉鑫漢,因為這個翹翹板現象服從海生堡測不
準原理,哎! //如何繞過翹翹板?

<a name="doc89">
使用爪哇簡稿語言為計算器指令語言,作者需
要為讀者提供一些例題,例題按鈕零至十八都
是小型例題。例題按鈕五十一及更高(目前只
有五十一)為中型、大型例題。
例題五十一來自
freeman2.com/tute0050.htm#ch14b054
<a name="doc90">
民國九十九年九月二十日,劉鑫漢發覺上述例
題的解答指令是錯誤的,二十日及二十一日兩
日修改,這個「更改」之後的例題指令是對的
嗎?劉鑫漢仍然沒有把握,理由很簡單,無人
校對我的網頁,沒有類似程式計算結果,無法
對比。
99,09,21,20,56 英文此
99,09,27,20,03 中文此

<a name="doc91"> 例題
更新 99,09,21 增加函數 copyf(arg1)
協助使用者建立第二組數列,特點是第二組及
第一組各自佔用不同的記憶位置,不是相同的
位置而只是別名的差別。使用  copyf(arg1) 
時請小心,因為如果複製大數列  copyf(arg1) 
很快就掃光電腦記憶。

<a name="doc92">
更新 99,09,21 修改函數 cnewf()
老版本必須呼叫如下
 v1=cnewf(1,2) //可以
v1=cnewf(3)   //錯誤
v1=cnewf('4') //錯誤
修改之後,三種呼叫法都可以執行。
希望讀者喜歡我寫的計算器程式。
謝謝來訪。
劉鑫漢 中華民國九十九年九月二十一日21:09
99,09,27,20,12 [==][][]

<a name="doc93"> 
下面是本卷使用的八個不印值的理由
如果您執行一次例題,下面的
理由出現於 方格五。
whyNotPrint=
' 有保留字串';  //9909201039
' 在 if() 之內';  //9909231748
' if \\n ()';    //9909240936
' 本行有等號 [=]''; //9909201040
' 本行無變數';  //9909201041
' 本行有 [++],[--]';//9909221122
'#manyLine1cmd=';//9909291154
' 後隨等號 [=]'; //9909291539
99,09,27,20,22

<a name="doc94"> 例題
99,09,28,14,35 始
新增例題 52 ,這是一個實數、實用的例題。
實數相對於複數,例題 52  不是複數例題。
實用相對於簡短說明例題。

<a name="doc95"> 
參考書﹕ Quaternions and Rotation
Sequences. ISBN 0-691-05872-5, 1998
作者 Jack B. Kuipers. (書名簡稱為  QRS)

<a name="doc96"> 
例題 52 要求使用者輸入一個轉動坐標系對
地坐標的三個歐拉轉角,程式輸出三乘三轉動
矩陣、輸出四元數向量,最後回到歐拉轉角。
最後的答案應該與使用者起初輸入的歐拉轉角
一致。
地坐標的 x,y,z 三軸為三個向量,分別為
x 軸﹕ [1,0,0]
y 軸﹕ [0,1,0]
z 軸﹕ [0,0,1]
<a name="doc97"> 
地坐標的「轉動」矩陣由三個 x,y,z 向量
組成如下
 [1,0,0]
 [0,1,0]
 [0,0,1]
其中
x 軸是矩陣的第一縱列 [1,0,0]_transpose
y 軸是矩陣的第二縱列 [0,1,0]_transpose
z 軸是矩陣的第三縱列 [0,0,1]_transpose
假設地坐標不轉動,所以,地坐標的「轉動」
矩陣是簡單的單位方陣(對角線為一的矩陣)

飛行器的體坐標時刻轉動,在任何一瞬間,體
坐標對地坐標有一個相對的轉動,例如
ax=12 角度
ay= 8 角度
az=-6.5 角度
<a name="doc98"> 例題
這三個角度稱為歐拉轉角。對應的航空器轉動
序列矩陣如下
 [0.983902,-0.112101,-0.139173]
 [0.139479, 0.968584, 0.205888]
 [0.111720,-0.221985, 0.968628]
//9909281515 此 //9909301900 此
這是根據參考書的公式由歐拉轉角求得航空器
轉動序列矩陣。這個矩陣有什麼含義?很簡單
<a name="doc99"> 
,轉動之前的坐標軸 x 軸是單位方陣
 [1,0,0]
 [0,1,0]
 [0,0,1]
的第一列,
,轉動之後的機體坐標軸 x 軸是序列矩陣
 [0.983902,-0.112101,-0.139173]
 [0.139479, 0.968584, 0.205888]
 [0.111720,-0.221985, 0.968628]
的第一列,也就是
轉動之後的機體坐標軸 x 軸為
 [ 0.983902,
   0.139479,
   0.111720]
<a name="doc100"> 
這一組數字是機體坐標 x 軸對地坐標的三
個分量。同理,
航空器轉動序列矩陣第二列是機體坐標 y 
軸對地坐標的三個分量
 [-0.112101,
   0.968584,
  -0.221985]
<a name="doc101"> 
航空器轉動序列矩陣第三列是機體坐標 z 
軸對地坐標的三個分量
 [-0.139173,
   0.205888,
   0.968628]
//9909281527 此

如果您給予不同的初始歐拉轉角,應該得到不
同的轉動矩陣;
//9909281543 此
參考書也有從轉動矩陣開始,求四元數向量分
量,參考書 QRS 第 169頁,四個求 q 的公式
求歐拉轉角,
參考書 QRS 第 168頁, tan(psi) 的公式
sin(theta)  的公式及 tan(phi)  的公式
。例題 52  使用參考書公式繞場一周,返回至
歐拉轉角。
99,09,28,16,20 止
99,09,30,19,19 電腦過熱警告
99,09,30,19,21 關閉電腦

<a name="doc102"> 
下面的步驟是返向計算,也就是給予轉動矩陣
(如同上面的三階矩陣),求歐拉轉角及四元
數。由轉動矩陣至四元數,使用參考書  QRS 
第 169頁四個求 q 的公式。走筆至此時,轉
往編程工作 9909281548。
//9909281555 開始
接著是由四元數求歐拉轉角,這一步使用參考
書第 168頁 tan(psi), sin(theta), 
tan(phi) 的公式。 9909281558此

<a name="doc103"> 例題
至此,例題五十二編碼工作已經完成。請到例
題區,點擊「52」按鈕,在程式頂端,您可以
輸入 x:roll, y:pitch, z:yaw 三個轉角
,單位使用角度(不能用弧度)。在程式中間
,得到轉動矩陣及四元數的數值答案。在程式
最後面,再度計算得到您輸入的三個角度,這
是確認全程計算工作的正確性。
99,09,28,16,20 止

99,09,30,20,27 開始中文註解
地坐標的三個歐拉轉角,程式輸出三乘三轉動
<a name="doc104"> 
99,09,28,19,08 始
四元數也稱為歐拉參數 Euler's Parameter
例如參考書 Classical Mechanics 
second edition, by Herbert Goldstein,
第 153頁,最後一行。
第 153頁及第 165頁有相關的公式。
劉鑫漢第一次學得的名稱是歐拉參數,
民國七十年代在美國愛荷華大學機械系
郝格教授 Professor Edward Haug 的
課堂上學到的知識。
<a name="doc105"> 
第一次看見四元數 Quaternion 是在民國
九十五年八月至九十六年間閱讀
Rotations, Quaternions,and Double 
Groups. by Simon L.Altmann 
ISBN 0-486-44518-6 時學到的名詞及導
證內容。仔細對比之後,發覺四元數就是
歐拉參數。
99,09,28,19,19 止

<a name="doc106"> 
更新 99,10,03 說明 //更新 99,10,04
99,09,29,20,35 始
99,09,26 更新本卷 complex1.htm 發覺有
幾處需要修改。說明如下
第一﹕
當程式找字串 '//' 時,如果發覺是 '://'
不能把 '://' 當做註解處理,因為 '://'
是網址的特徵字串,更正時標為 9909271146.
<a name="doc107"> 
第二﹕
自指令
 if(keyIndex<keyword.length-1)
刪除 '-1' 改為
 if(keyIndex<keyword.length)
如此才可能找到保留字串 'with' 
更正時標為  9909281142
第三﹕
如果輸入指令有一行如下(含有數字)
 +'freeman2.com/complex1.htm'
老版本產生錯誤,更正時標為 9909280550
<a name="doc108"> 例題
第四﹕
如果輸入下面三行
[[
 aa 
 =  
 sin(PI/5); 
]]
老版本產生錯誤,現在更正。方法是當讀到
 'aa' 時,窺視下面一行,看是不是以等號
 '=' 起頭,如果是,那麼本行的 'aa' 不印
值。此功能的主要變數是 manyLine1cmd
變數 manyLine1cmd 廣泛散置於函數多處
<a name="doc109"> 
第五﹕
如果輸入
[[
  aa=6.5+  
2-sin(PI/8)
]]
當讀到 '2-sin(PI/8)' 時,程式回頭看前
面一行的尾端有沒有加號 '+' ?如果有,
不印 '2-sin(PI/8)' 的值。指令位置在
   "if(i0>0) //9909291947"

<a name="doc110"> 
另外還有幾處小更正。現在的更新版本,並不
完全與爪哇簡稿匹配,例如例題十五,有幾行
必須加入  /*=*/

<a name="doc111"> 
劉鑫漢無法照顧所有可能的狀況,當您的指令
不應該印值的地方,卻插入了印值指令
「outString+=」,這一點於執行您的之後,
在方格五可以找到「outString+=」。
<a name="doc112">
禁止程式加入「outString+=」的方法是在
問題行增加五個位元「/*=*/」。因為
complex1.htm 只排除兩撇型註解「//」
complex1.htm 不管撇星星撇型註解「/*=*/」
complex1.htm 看的見「/*=*/」中的等號
,不執行印值操作,不加入「outString+=」
99,09,29,21,03 止

<a name="doc113"> 例題
99,09,29,21,11 始
更新 99,10,03  刪除由 [a name="doc01"] 
至 [a name="doc77"] 的說明,這一段說明
可以在老版本 
http://freeman2.com/complex1_990727.htm
找到。也請見 [a name="doc77"]

<a name="doc114">
更新 99,10,03  增加例題 52 及 53 。 
例題 51 是複數例題
例題 52 是實數例題
例題 53 是物理例題

例題 51 是 CSMC 第 14.14 式
例題 52 歐拉轉角、轉動矩陣及四元數
例題 53 凱普拉及牛頓定律。
99,09,29,21,16 止
99,09,30,21,20 中文註解止

<a name="doc115">
99,10,02,17,33 始
更新 99,10,03  容許「方格三。輸入指令」
使用一行
//^  在輸出方格四印一行空行
//^//^  在輸出方格四印兩行空行,餘類推
 //^ 不印空行,「//^」必須在最左端起始
劉鑫漢嘗試找出印空行的方法,這個「//^」
方法可以使用。
例題 53 使用「//^」。
99,10,02,17,41 止

<a name="doc116">
99,10,04,07,51 始
更新 99,10,04 有下述兩點變更
一﹕刪除 "else" 按鈕,老版本
   仍然有此按鈕。
   新版本(閱讀中)使用保留字串列表
   (請在源碼找 9908190809),可以
   避免印出 "else" 的值。
<a name="doc117">
二﹕增加了卷內站名
   99,10,03,22,33 閱讀
   JavaScript-Bible-5e.pdf 
   chapter 17: Location and 
   History Objects.
   99,10,03,22,59 成功的使用
   window.location.hash 讀取
   訪客希望的卷內站名。
   應用於 [a name="doc77"]
   的 complex1_990727.htm
99,10,04,08,00 止

<a name="doc118">
99,10,18,10,32 開始
更新 99,10,18 增加一個指數函數的例題
按鈕 "2^3=8" 展示 pow(a,b) 的用法。

更新 99,10,18 增加
由角度轉為弧度的方法,請點擊
 <a name=JSMathFunc>
並且找關鍵字串 "9910180956".

<a name="doc119"> 例題
更新 99,10,18 增加
//如何繞過翹翹板?方法非常簡單,
//不要用下面兩行指令
  !true
  (sin(PI/3)+cos(PI/3))/2
//改用下面四行指令
var a1=!true
var a2=(sin(PI/3)+cos(PI/3))/2
a1
a2
//前面兩行指令對老版本有效
//complex1_990727.htm
//後面四行指令對新版本及老版本有效
//complex1.htm
99,10,18,10,42 停止

<a name="doc120">
99,10,24,13,30 開始
更新 99,10,24 增加例題 19 按鈕
解 x^i=i 其中 i=sqrt(-1)
99,10,24,13,32 停止



爪哇簡稿卷目錄
http://freeman2.com/jsindex1.htm   本地
畫圖指令,建議保存。
http://freeman2.com/jsgraph1.js   本地


本卷複變函數建立於
中華民國九十八年二月二十四日。

本卷老版網址 本地
http://freeman2.com/complex1_990727.htm
本卷網址(新版,現在閱讀中)
http://freeman2.com/complex1.htm
英文老版網址
http://freeman2.com/complex2_20100726.htm
英文新版網址
http://freeman2.com/complex2.htm
首次上載  98,03,20
完成上載  98,04,06
英文上載  98,04,12

謝謝光臨自由人網站。
自由人  中華民國九十八年三月二十日。
98,03,20,13,24