提供非主值解答   更新 99,07,27
本卷編程環境是微軟 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

例題
方格三。輸入指令

方格四。輸出答案  

方格五。偵錯輸出  


<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="doc01">  本卷是個人的閑暇作業,輸出結果不能 保證正確,請先核對結果是否合理。 98,03,20,13,30 始 本卷是複變函數,起因於寫複數實數係數多項式求根 http://freeman2.com/polyroo1.htm 時,取用「數值配方 Numerical-Recipes」的 laguer.c 開始時,把複數定義卷 header file complex.h 中的函數轉換為爪哇簡稿語言,轉換過程中,想到可以多 <a name="doc02"> 增加複變函數,例如 cpowf(c1,c2) 任次方(任意複數甲的任意複數乙次方) csinf(c1) 複正弦,複數取正弦值,等等。 在寫複變函數的過程中,同時學習這些函數的定義與導證 ,複變函數有一組輸入得到無限多組輸出的函數,例如 clogf(c1) 複對數 cpowf(c1,c2) 任次方 casin(c1,c2) 反正弦 cacos(c1,c2) 反餘弦,等等。 複變函數有無限多組輸入得到一組輸出的函數,例如 cexpf(c1) 複指數。 <a name="doc03"> 主要差別在於複變函數使用正弦函數、餘弦函數,而 正弦餘弦的值是周期性的,例如 sin(PI/4) sin(PI/4+2*PI) sin(PI/4+8*PI) 三者的輸入值不同,但是答案一樣,因為正弦是周期函數 ,周期是 2*PI ,所以對於任何整數 n 輸入值增減 2*n*PI 不改變正弦函數值。 <a name="doc04"> 當虛數 i*t 取指數時,歐拉公式告訴我們 exp(i*t)=cos(t)+i*sin(t) 所以輸入值 t 與無限多的 t+2*n*PI (任意 n) 得到相同的答案。 指數函數特徵是﹕無限多的輸入,得到一組答案, 對數函數特徵是﹕一組輸入,得到無限多的答案。 因為,對數函數是指數函數的反函數。 <a name="doc05"> 如果 2*n*PI 的 n=0 答案稱為主值解, 如果 2*n*PI 的 n不=0 答案稱為副值解, 在寫本卷複變函數時,希望輸出主值,同時輸出副值解。 主值解答到處都可以找到,但是, 副值解答,不容易找到。 <a name="doc06"> 本卷的特點是﹕提供複變函數的主值及副值解,(如果答案正確) 本卷的缺點是﹕提供複變函數的主值及副值解,(如果答案錯誤) <a name="doc07"> 自由人手邊,主值解答的參考依據是 [[ Steve Moshier's command interpreter V1.3 Functions: h help hex cmplx re im arg abs conj acos asin atan cos cot exp floor fac gamma lgamma confhyp erf erfw log pow sin sqrt tan polylog bits digits dm tm em take save system exit Variables: a b c d e f g h j k l m n o p q r s t u v w x y z pi i Operators: - , = + - * / ( ) * acos(2.1+1.2*i) acos(2.1+1.2*i) 5.5833948713443407144728712072799464209407513017838366981793494799469577E-1 -1.5562723927676192854254478768311785590221010493518827169491682385186516E0i ]] <a name="doc08"> 到目前為止,無法找到複變函數的副值解。 本卷是個人的閑暇作業,輸出結果不能 保證正確,請先核對結果是否合理。 到首次上載時為止,本卷並沒有完成,仍然要增加新的複 數函數,自由人一面編程一面學習,同時更正錯誤指令。 謝謝來訪自由人網站。 自由人  中華民國九十八年三月二十日 98,03,20,14,05 <a name="doc09"> Steve Moshier's command interpreter V1.3 複數版﹕qccalc.exe ,實數版﹕qcalc.exe 92,07,02,21,21 開始下載 ftp://ftp.simtel.net/pub/simtelnet/msdos/c/cephes28.zip You are user #30 of 500 simultaneous users allowed. 92,07,02,21,37 完成下載 07/02/2003 09:38 PM 1,906,887 cephes28.zip 06/04/2000 07:20 PM 159,264 QCALC.EXE 06/04/2000 07:20 PM 120,950 QCCALC.EXE 98,03,21,15,58 記錄 <a name="doc10"> 98,03,21,16,02 自由人網頁 http://freeman2.com/complex1.htm 計算複變函數的輸出值,主值答案根據 qccalc.exe 驗證,讀者可以到自由人網站取用 複數版﹕qccalc.exe ,實數版﹕qcalc.exe 網址為 http://freeman2.us/qccalc.zip 139,391 qccalc.zip <a name="doc11"> qccalc.zip 內容為 07/04/1996 01:32 PM 1,117 QHEAD.H 07/03/1999 03:53 PM 34,399 QCCALC.C 12/31/1999 02:04 PM 38,489 QCALC.C 06/04/2000 07:20 PM 159,264 QCALC.EXE 06/04/2000 07:20 PM 120,950 QCCALC.EXE 03/21/2009 05:25 PM 2,116 readme_980321.txt 03/21/2009 05:25 PM 1,367 readme_20090321.txt 7 File(s) 357,702 bytes 98,03,21,16,12 <a name="doc12"> 98,03,22,13,18 始 98,03,22 把單行的輸入方格改為多行,便利測試複 數指令。點擊「測試方格三指令」按鈕,程式呼叫 evalAll(boxd13.value,'boxd14.value') 第一個參數 boxd13.value 是待計值的字串,必須 是爪哇簡稿指令。第二個參數 'boxd14.value' 是 輸出點證號。其中的單點括號「'」是參數字串的一部分, boxd13.value 無單點括號,取用方格三存放的值 'boxd14.value' 有單點括號,就是把字串 「boxd14.value」 交給計值函數,不是方格四存放的值 <a name="doc13"> boxd14 是方格四的證號,「.value」是文字輸出的記 號。另外也可以用(舉例) 'spanID02.innerHTML' 「.innerHTML」是網頁指令輸出的記號, evalAll() 無法判別應該使用文字或者網頁指令,所 以,「.value」及「.innerHTML」應該是編程者做 的正確記號。其他編程者可以改變「boxd14」,可以改變 「spanID02」,但是「.value」及「.innerHTML」必須 正確指定。 evalAll() 是全文解讀器(不是以前寫的逐行解讀器) evalAll() 容許使用全行無 '=' 的 var ww0; (老版禁止使用) 編程改進是逐漸累積的經驗。自由人 98,03,22,13,32 本卷是個人的閑暇作業,輸出結果不能 保證正確,請先核對結果是否合理。 <a name="doc14"> 98,03,22,21,41 始 寫本卷「複變函數」 complex1.htm 的初衷是為編程 者提供複變函數的編程指令,頁面安排是測試性的布置。 可不可以改變為一般大眾使用的複數計算器呢?我一直 在思考這個問題,寫複變函數指令比較容易,寫人腦公式 轉換為電腦公式,比較困難。例如二次方程式的通解, <a name="doc15"> 人腦公式為 [-b+√(b*b-4*a*c)]/(2*a) [-b-√(b*b-4*a*c)]/(2*a) 電腦公式為 a='1+i' b='2-i' c='1.2-0.5i' cdivf(caddf(cnegf(b),csqrt(csubf(cmulf(b,b),cmulf(4,cmulf(a,c))))),cmulf(2,a)) cdivf(csubf(cnegf(b),csqrt(csubf(cmulf(b,b),cmulf(4,cmulf(a,c))))),cmulf(2,a)) 請複製上面五行,貼入方格三,點擊「測試方格三指令」, 輸出於方格四或者輸出於頁面。如果更改 a,b,c 至 a=1; b=5; c=6; 可以得到實數答案 -2, -3 〔題目是 1*x*x+5*x+6=0 ; (x+2)*(x+3)=0 〕 <a name="doc16"> 當定義 a,b,c 含有虛數 i 時,必須使用「'」,例如 a='1+i' 此時, '1+i' 是字串, 電腦不接受複數,但是電腦接受字串。 <a name="doc17"> 如何把人腦公式轉換為電腦公式? 在今天(民國九十八年三月二十二日)還不知道, 如果沒有轉換程式,那就不能聲稱本卷是供大眾使用的複 數計算器。昨天進入國際網路找別人的轉換程式,留存了 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="doc18"> 指令視窗,沒有源碼。在完成轉換指令之前,自由人只能 聲稱本卷是供編程者測試,如果,一般大眾要使用本卷計 算複數函數值,必須使用繁雜的電腦公式。就目前版本而 <a name="doc19"> 言,複數加減乘除的用法,錯誤與正確對比如下 定義 a='1+2*i' 定義 b='3+4*i' 錯誤 a+b ,正確 caddf(a,b) 錯誤 a-b ,正確 csubf(a,b) 錯誤 a*b ,正確 cmulf(a,b) 錯誤 a/b ,正確 cdivf(a,b) (1+2*i) 是錯誤的, '1+2*i' 是正確的 <a name="doc20"> 今天,把「測試方格三指令」單行輸入方格,改為多行大方 格(方格三),同時把「測試方格三指令」改為小型計算器 。點對直線之垂足(眼足網頁) eyefoot1.htm http://freeman2.com/eyefoot1.htm 有老版本的小型計算器,本卷新版小型計算器,有與老版 相同的功能之外, <a name="doc21"> 新版小型計算器是全文解讀器(不是老版的逐行解讀器) 新版小型計算器容許使用全行無 '=' 的 var ww0; (老版禁止使用) 本卷有複數函數,所以,本卷的小型計算器可以處理複數 問題。希望將來能夠繼續改進。 自由人  中華民國九十八年三月二十二日 98,03,22,22,28 止 本卷是個人的閑暇作業,輸出結果不能 保證正確,請先核對結果是否合理。 <a name="doc22"> 註﹕小型計算器使用 eval() 函數,「爪哇簡稿經典」 Javascript Bible 作者,批評 eval() 函數, 建議不要使用 eval() 函數,所以,小型計算器可能是 低效率的工具,但是,對我而言,全部是小型計算,再低 的效率也比眨眼快,所以,我還是喜歡使用小型計算器。 98,03,22,22,35 <a name="doc23"> 98,03,23,14,01 本卷「複變函數」 complex1.htm 是全文處理器,不是 http://freeman2.com/eyefoot1.htm 的逐行處理器,本卷容許環路指令,擴展至數行 (逐行處理器要求環路指令必須全部存在一行) 但是全文處理器仍然有缺點,簡言之, for() 環路的主體起點符號「{」及主體終點符號「}」 不能單獨使用一行, <a name="doc24"> 下面是錯誤例題 for(z0=0;z0<end0;z0++) { //此行錯誤因為此行沒有 '=',同時「{」不是變數,不能讀值 z0=z0+2; //此行有 '=' 程式不讀值 } //此行錯誤,因為此行沒有 '=',「}」不是變數 z0 //此行正確,因為此行有變數 z0 ,可以讀值 <a name="doc25"> 下面是正確例題 for(z0=0;z0<end0;z0++) { z0=z0+2; } // 只要一行有 '=' 就不讀值 z0 本卷看見一行在註解 "//" 左側沒有 '=' 時, 將左端的符號當做變數,讀取數值,印在輸出欄。 如果左端只是 '{' 或者 '}', 無法讀值,產生 錯誤。 98,03,23,14,14 止 <a name="doc26"> 98,03,23,15,27 始 在方格三用變數定義複數,例如 w1="1.2+3.4i" 或者 w1='1.2+3.4i' 都可以通行。 應用方法,例如 cexpf(clogf(w1,-1)) 但是,在函數內直接引用複數時(不用變數定義複數) 本卷的結構,複數字串必須使用單點括號['],例如 clogf(clogf('2-i')) 可以通行 clogf(clogf("2-i")) 產生錯誤 雙點括號["],捺號加雙點括號[\"]都與本卷內部結構 衝突。若是編程,捺號、單點括號、雙點括號都要前置 一個捺號,請參考本卷源碼。 98,03,23,15,35 止 <a name="doc27"> 98,03,23,17,39 始 點對直線之垂足(眼足網頁) http://freeman2.com/eyefoot1.htm 小型計算器的例題二,不能在本卷測試,因為例題二需要 方格五的輸入值,及輸出用的方格六,但是,本卷 complex1.htm 無此設備。 98,03,23,17,42 止 本卷是個人的閑暇作業,輸出結果不能 保證正確,請先核對結果是否合理。 <a name="doc28"> 98,03,24,23,33 始 九十八年三月二十四日,增加雙曲正切函數 ctanh(c1) 在 function toCplx(c1) 增加 [[ //9803241937用parseFloat(),否則產生意外的錯誤 c1[0]=parseFloat(c1[0]); c1[1]=parseFloat(c1[1]); ]] 確定送反數字,而不是送反字串。 增加 9803241957 偵錯資料輸出 增加 9803242228 註解,說明參數功能。 98,03,24,23,37 止 增加 9803250038 例題 06 (9803250854 記錄) <a name="doc29"> 98,04,05,16,13 始 由 98,03,25 至 98,04,05 輸入《中國的光明大道~三民主義》 http://freeman2.com/choos3pp.htm ===== 本卷是個人的閑暇作業,輸出結果不能 保證正確,請先核對結果是否合理。 <a name="doc30"> 本卷的初始版本,使用 如果略除 nBgn,nEnd ,內定 n=-9 至 +9 十九個解答 目的是展示本卷有計算副值解答的能力。 初始版本必須用 asinh('1+2i',0,0) 才能得到主值解 答,要多加入「,0,0」不是很麻煩嗎? 在修改過程中,更改程式功能至 如果略除 nBgn,nEnd ,內定 n=0 至 0 一個主值解答 百分之九十五的計算機會,要求主值解答, 更新版本可以用 asinh('1+2i') 得到主值解答, 不必多加入「,0,0」,簡化手續。雖然程式功能變更,但 是註解忘記更新 [[ 如果略除 nBgn,nEnd ,內定 n=-9 至 +9 十九個解答 98,04,05,16,10 上面錯誤,下面正確 如果略除 nBgn,nEnd ,內定 n=0 至 0 一個主值解答 ]] 現在更新註解,使內外一致。 98,04,05,16,20 <a name="doc31"> 98,04,05,16,46 下面演示三種計算器的輸入與輸出 calcz.exe a=(1,2) sin(1,2) 或者 sin(a) 都可以 3.165778513216168146740734617191905538379110767891468932289327464304888083804952588449006805651288124E+0 1.959601041421605897070352049989358278436320160184559658801901499163094256502495572330007661333090133E+0 complex1.htm csinf('1+2i') 3.165778513216168,1.9596010414216063 qccalc.exe sin(1+2*i) 3.1657785132161681467407346171919055383791107678914689322893274643048881E0 +1.9596010414216058970703520499893582784363201601845596588019014991630943E0i 98,04,05,16,50 止 <a name="doc32"> 98,04,05,18,39 始 calcz.exe complex1.htm qccalc.exe 提供什麼樣的函數?下面是列表 <a name="doc33"> calcz.exe 提供下面的函數 ABS, ACOS, ASIN, ATAN, CONJG, COS, COSH, EXP, IMAG, INT, LOG, LOG10, NINT, REAL, SIN, SINH, SQRT, TAN, TANH, =, +, -, *, /, ** 其中「**」是福傳 (Fortran) 語言的指數 例如 2*2*2 手寫為 23 福傳指令為 2**3 「基本語言」指令為 2^3 「C 語言」指令為 pow(2,3) 爪哇簡稿語言為 pow(2,3) 本卷指令為 cpowf(2,3) calcz.exe 使用福傳語言指令。 ===== <a name="doc34"> 本卷 complex1.htm 提供下面的函數 複數函數(不是數學函數,只是複數加減乘除) caddf(c1,c2) //不能使用 c1+c2 csubf(c1,c2) //不能使用 c1-c2 cmulf(c1,c2) //不能使用 c1*c2 cdivf(c1,c2) //不能使用 c1/c2 conjf(c1) //輸入 1+2i 輸出共軛複數 1-2i cnewf(r1,r2) //以 (r1,r2) 新建複數 cabsf(c1) //輸入 1+2i 輸出絕對值 √(1*1+2*2)=2.23606797749979 csqrt(c1) //輸入 1+2i 輸出開平方 √(1+2i) cmulr(c1,r2) //複數 c1 乘實數 r2 cargf(c1) //輸入 1+2i 輸出輻角 atan2(2,1)=1.1071487177940904 cpolr(c1) //輸入 1+2i 輸出極坐標 2.23606797749979*exp(1.1071487177940904*i) cxryi(c1) //輸入極坐標,輸出正坐標 cnegf(c1) //輸入 1+2i 輸出負值 -1-2i cgetr(c1) //輸入 1+2i 輸出實數部份 1 cgeti(c1) //輸入 1+2i 輸出虛數部份 2 <a name="doc35"> 複變函數(多至一函數) cexpf(c1) //exp(c2)=cpowf(2.718281828459045,c2) csinf(c1) //sin(複數) ccosf(c1) //cos(複數) ctanf(c1) //tan(複數) csinh(c1) //sinh(複數) ccosh(c1) //cosh(複數) ctanh(c1) //tanh(複數) <a name="doc36"> 複變函數(一至多函數) 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) //複數的反雙曲正切 參數 rtsq01,nB,nE 使用法請點擊這裏 本卷 complex1.htm 使用爪哇簡稿語言指令。 ===== <a name="doc37"> qccalc.exe 提供下面的函數 Steve Moshier's command interpreter V1.3 函數 h help hex cmplx re im arg abs conj acos asin atan cos cot exp floor fac gamma lgamma confhyp erf erfw log pow sin sqrt tan polylog bits digits dm tm em take save system exit 變數 a b c d e f g h j k l m n o p q r s t u v w x y z pi i 運算子 - , = + - * / ( ) qccalc.exe 使用 C 語言指令。 98,04,05,18,52 止 <a name="doc38"> 98,04,06,12,43 下面測試復合運算公式 [-b+√(b*b-4*a*c)]/(2*a) [-b-√(b*b-4*a*c)]/(2*a) complex1.htm 不能使用 a+b, a-b, a*b, a/b a='1+i' b='2-i' c='1.2-0.5i' cdivf(caddf(cnegf(b),csqrt(csubf(cmulf(b,b),cmulf(4,cmulf(a,c))))),cmulf(2,a)) -0.49871379606640475,-0.2049128506590332 cdivf(csubf(cnegf(b),csqrt(csubf(cmulf(b,b),cmulf(4,cmulf(a,c))))),cmulf(2,a)) -0.0012862039335952424,1.7049128506590332 <a name="doc39"> 98,04,06,12,47 qccalc.exe a=1+i b=2-i c=1.2-0.5*i (-b+sqrt(b*b-4*a*c))/(2*a) -4.9871379606640473563866570556370684738722387763883059254327549755186368E-1 -2.0491285065903326325340726687903612040517774044027596304795823691430737E-1i (-b-sqrt(b*b-4*a*c))/(2*a) -1.2862039335952643613342944362931526127761223611694074567245024481363180E-3 +1.7049128506590332632534072668790361204051777404402759630479582369143074E0i <a name="doc40"> 98,04,06,12,50 calcz.exe a=(1,1) b=(2,-1) c=(1.2,-0.5) (-b+sqrt(b*b-4*a*c))/(2*a) -4.987137960664047356386657055637068473872238776388305925432754975518636820186780956831424960377189052E-1 -2.049128506590332632534072668790361204051777404402759630479582369143073745090780190279191497584299845E-1 (-b-sqrt(b*b-4*a*c))/(2*a) -1.286203933595264361334294436293152612776122361169407456724502448136317981321904316857503962281094768E-3 1.704912850659033263253407266879036120405177740440275963047958236914307374509078019027919149758429985E+0 <a name="doc41"> 98,04,06,12,54 qccalc.exe 及 calcz.exe 都接受復合運算公式 [-b+√(b*b-4*a*c)]/(2*a) [-b-√(b*b-4*a*c)]/(2*a) 本卷 complex1.htm 無此功能。 三者答案一致,但是, complex1.htm 精確度只有十五位數字 qccalc.exe 精確度有七十位數字 calcz.exe 精確度有一百位數字 complex1.htm 提供主值解答及副值解答 qccalc.exe 提供主值解答 calcz.exe 提供主值解答 2*n*PI 中 n=0 為主值解答,n不=0 為副值解答。 n 必須為整數(正整數或者負整數都可以)。 98,04,06,13,25 <a name="doc42"> qccalc.zip http://freeman2.us/qccalc.zip CALCZ.EXE http://www.twopaths.com/Calculator/CALCZ.EXE 本卷是個人的閑暇作業,輸出結果不能 保證正確,請先核對結果是否合理。 <a name="doc43"> 98,04,08,10,11 始 複變函數(一至多函數)有 clogf(), clogfMan() cpowf(), cpowfMan() casin(), casinMan() cacos(), cacosMan() catan(), catanMan() asinh(), asinhMan() acosh(), acoshMan() atanh(), atanhMan() 左列都是主力函數,計算複變函數數值, 右列都是經理函數,處理輸入輸出數據。 主力函數其他編程者可以再使用, 經理函數其他編程者不必再使用, 因為其他編程者可以使用不同的輸入輸出界面。 當呼叫指令缺失 nBgn,nEnd 時, 主力函數內定送返主值 nBgn=nEnd=0 經理函數內定送返十九個答案 nBgn=-9;nEnd=9 <a name="doc44"> 主力函數內定送返主值 nBgn=nEnd=0 是自由人編程的要點。指令為 if((nBgn+'')=='undefined' || isNaN(nBgn) ) var nBgn=0; <a name="doc45"> 經理函數內定送返十九個答案,指令為 var nBgn=-9; var nEnd=+9; 經理函數對其他編程者沒有影響。 98,04,08,10,24 止 98,04,08,10,40 始 更新 98,04,08 包括增加編程註解 9804071617 及 9804080941 增加三個「簡述」連接。 98,04,08,10,42 止 <a name="doc46"> 98,04,08,14,57 始 「複變函數」的通常定義是﹕以複數為變數的任意數學函數, 「複變函數」的本卷定義是﹕以複數為變數的基本數學函數。 本卷的「複變函數」限於三角函數、對數、指數的複數值。 而非一般性的 w(z)=u(z)+i*v(z) ,例如 z=x+i*y; i=[0,1]=√(-1) u(z)=x*x*x-3*x*y*y v(z)=3*x*x*y-y*y*y 於是 w(z)=(x*x*x-3*x*y*y)+i*(3*x*x*y-y*y*y) 是一般課堂裏教授的複變函數,但是,上面公式的 w(z) 不是基本數學函數,本卷無處理功能。 本卷使用的「複變函數」有特別限定,基本數學函數。 本卷使用的「複變函數」是相對於 非數學的加減乘除「複數函數」。 98,04,08,15,09 止 <a name="doc47"> 98,04,08,15,23 始 虛數 i 的定義 第一定義﹕ i=[0,1] 比較好(以雙數組定義複數) 第二定義﹕ i=√(-1) 比較差(這是大多數人知道的定義) 因為 i=[0,1] 指定第二值為正一,不容許為負一 但是 i=√(-1) 與 -i=√(-1) 混同, i 平方得負一, -i 平方也得負一 有人根據比較差的 i=√(-1) 「證明」 1=-1 98,04,08,15,28 止 <a name="doc48"> 98,04,08,22,49 √(+1)/√(-1) = √(+1)/√(-1) 右側分子分母通根,得 √(+1)/√(-1) = √[(+1)/(-1)] 此步錯誤 所以 1/i = √[-1] = i 1 = i*i = -1 錯誤 請取用第一定義﹕ i=[0,1] 請拋棄第二定義﹕ i=√(-1) 98,03,12,22,47 取閱上面錯誤之討論 http://mathforum.org/library/drmath/view/64564.html 98,04,08,22,52 止 <a name="doc49"> 98,04,12,12,10 始 「更新 98,04,12」的主要工作是增加編程註解, 98,04,11,10,14 始 98,04,11,10,47 止 說明 function evalAll(inpStr0,outputBoxID) 的結構。 98,04,11,11,42 始 98,04,11,11,48 止 說明 function read2Npi(arg01) //9803151844 的功能。 98,04,12,12,14 止 <a name="doc50"> 98,04,12,14,45 始 有些題目需要分兩步執行,例如 98,03,17,11,05 取閱的 http://math.asu.edu/~kuiper/462files/Complex.pdf 卷底習題 (b) 求 (1 + i)^(i^0.5) 複數的任意次方函數都有多組解答,題目執行兩次任次方函數, 所以,有兩次多組。 第一次,先執行 (i^0.5) 開平方得到兩個解答 (i^0.5)= 0.7071067811865476+0.7071067811865475i 或者 -0.7071067811865475-0.7071067811865476i 上面是第一步 下面是第二步 再執行 (1 + i)^(i^0.5) 得到無限多組解答 開平方取正值的解答 (1+i)^(0.7071067811865476+0.7071067811865475i)= 下面是 n=0 的答案, n=0 是主值答案。 0.5106227289869875+0.5262040275982908i 開平方取負值的解答 (1+i)^(-0.7071067811865475-0.7071067811865476i)= 下面是 n=0 的答案, n=0 是主值答案。 0.949772688683169-0.9787543438957987i 98,04,12,14,52 止 <a name="doc51"> 98,04,13,11,26 始 「更新 98,04,13」的工作是增加頁面控制按鈕 原來已經有的「輸入方格尺寸」及「輸出方格尺寸」可以 改變方格長度,但是,右側的函數名稱佔用空間, 現在增加 1 0 = 刪除函數名稱,為輸出方格騰出空間。9804130942 容許使用者刪除函數名稱,指定更長的方格尺寸。 在編程時,總是考慮使用者的便利,例如「整數 n 的範圍」 方格,可以建立兩個方格,一個是起點 n 值,一個是終點 n 值,兩個方格的布置對編程者便利,但是,對使用者不 便利,劉鑫漢寧可多花一點時間,自己勞累,寫函數 function read2Npi(arg01) 讀取字串,轉換為兩個 n 值,讓使用者便利。 「更新 98,04,13」增加 <meta name="author" content="劉鑫漢 Liu, HsinHan"> 98,04,13,11,36 止 <a name="doc52"> 9804131833 在 complex1.htm 納入伽瑪函數 Gamma function 及開關函數 step function 讓小型計算器(方格三)強化功能。 98,04,13,18,40 ISBN 978-0-521-54677-5 165 頁,倒數第一行說
        Γ(2λ)*Γ(1-2λ) =
_Π__
sin(2Πλ)
公式右側追溯至 158 頁 10.8式
       
t=∞
t=0
_1_
 (1+y)
*
_dy_
 (y)
=
_Π__
sin(2Πλ)
------- (158 頁 10.8式)

限制條件 0<λ<0.5 公式才有效。 (下面寬度內定值﹕520, 280)
當改變字體大小時,需要改變公式空間的寬度﹕
看外框 0 1 ; 看內框 0 1
讀至 165 頁時,想到,應該在 complex1.htm 加入
伽瑪函數的定義,我才能夠驗證 165 頁,倒數第一行公式。
98,04,13,19,00 記錄止

<a name="doc53">
98,04,13,19,14 始
把下面三行貼入方格三,點擊「測試方格三指令」
輸出於方格四
[[
lambda=0.2; // 限制條件 0<lambda<0.5 公式才有效。
gamma(2*lambda)*gamma(1-2*lambda) //兩個不同的公式,得到相同的答案。
PI/sin(2*PI*lambda) //都是實數,不是複數,可以用乘號。9805181618註
]]
98,04,13,19,17 止

<a name="doc54">
98,05,18,13,46 始
「更新 98,05,18」增加
「二項階乘係數」函數 binomial coefficient
value0=bicof(6,2)
「奇偶階乘係數」函數 double factorial coefficient
value0=facdb(5)
請點擊爪哇簡稿支持的數學函數

<a name="doc55">
「更新 98,05,18」增加 cexpi(c1)
便利 exp(aa*i) 寫為 cexpi(aa) , 不必寫為 cexpf(aa+'i') 

「更新 98,05,18」增加例題 7, 8, 9,10,11
假設 k 是整數自變數,及 i = -1的開平方。
假設 j, m 是整數常數。

<a name="doc56">
例題 7, 8 驗證 exp(2*PI*i*j*k/m) 
 k=0, k=1 ... k=m-1 一共 m 項的和為零。
例題 7 以複數計算,例題 8 以實數計算。

例如 j=7, m=5, (j/m=7/5=1.4 不是整數)
 k=0,1,2,3,4
 exp(0*7*(2*PI/5)*i)
+exp(1*7*(2*PI/5)*i)
+exp(2*7*(2*PI/5)*i)
+exp(3*7*(2*PI/5)*i)
+exp(4*7*(2*PI/5)*i)
=0

上面 j/m=7/5=1.4 不是整數時,
一周 360 度,五(m)等分, k 由零到四,繞場一周,
五個複數向量構成正五邊形,五個向量頭尾相接,構成
封閉折線,返回原點,淨值為零。

<a name="doc57">
例如 j=10, m=5, (j/m=10/5=2 是整數)
 k=0,1,2,3,4
 exp(0*10*(2*PI/5)*i)
+exp(1*10*(2*PI/5)*i)
+exp(2*10*(2*PI/5)*i)
+exp(3*10*(2*PI/5)*i)
+exp(4*10*(2*PI/5)*i)
=5 (= m)

上面 j/m=10/5=2 是整數時,
一周 360 度,五(m)等分, k 由零到四,繞場一周,
五個複數向量,每個複數向量都躺在橫軸 x 軸上,
起點都是原點 (0,0) 終點都是 (1,0) 因為 
k*10*(2*PI/5) = k*(10/5)*(2*PI)
 = k*2*(2*PI) = k*4*PI
exp(k*4*PI*i)=cos(0)+i*sin(0)=1+i*0=1

不論整數 k 如何變化 k*4*PI 都是 720 度的整數倍數
結果向量都躺在橫軸 x 軸上,都是正一(虛數部份為零)
 k 繞場一周五(m)次,五個一加起來就是五(m)。
這是小學生的題目!
98,05,18,14,21 此

<a name="doc58">
例題 9 「奇偶階乘係數」函數 double factorial coefficient
value0=facdb(5)
ISBN 0-12-059820-5 545頁 10.33c式
奇數 7!!=1*3*5*7=105
偶數 6!!=2*4*6=48

例題 10 「二項階乘係數」函數 binomial coefficient
value0=bicof(6,2) //不要用 binof(6,2)
ISBN 0-12-059820-5 307頁,倒數第四行 
(m)      m!
( )= ──────
(n)  n!*(m-n)!

<a name="doc59">
寫例題七的時候,促使我思考如何解決以變數表示複數輸入值?
例如, cexpf('2+3i') 沒有問題,但是,
假設 aa 是實數變數,bb 是虛數變數, aa+bb*i 是複數輸入值
不能用 cexpf('aa+bb*i') 因為 aa,bb 不會轉換為數字
不能用 cexpf(aa+bb+'i') 因為缺少 「+'+'」 
不能用 cexpf(aa+"+"+bb+"i") 因為["]與程式內部結構衝突。
必須用 cexpf(aa+'+'+bb+'i') 9805181306
例題 11 測試使用變數組合為複數輸入值。
98,05,18,14,27 止

<a name="doc60">
98,05,18,15,56 始
「更新 98,05,18」增加
台階函數(9804281122定名) stepf(t0,bgn0)
stepf(t,3) 如果 t<3  獲值 0
stepf(t,3) 如果 t>=3 獲值 1
(1-stepf(t,3)) 如果 t<3  獲值 1
(1-stepf(t,3)) 如果 t>=3 獲值 0

「更新 98,05,18」增加
門入函數(9804281120定名) gatef(t0,bgn0,end0)
gatef(t,3.2,5.6) 如果 t<3.2 獲值 0
gatef(t,3.2,5.6) 如果 t>5.6 獲值 0
gatef(t,3.2,5.6) 如果 3.2<=t<=5.6 獲值 1
98,05,18,15,59 止

<a name="doc61">
98,05,20,20,04 始
「更新 98,05,18乙」做了下面時標處的更正
9805201935
9805201940
及
span id=spanFname41
至
span id=spanFname48
重新排列
及
[[
var complex2=toCplx(complex1);
if(!isNaN(complex1)) //9805180954
complex2=cnewf(0,complex1)
]]
98,05,20,19,30 由上面指令調整至下面指令,改進效率。
[[
var complex2=[0,0];
if(!isNaN(complex1)) //9805180954
complex2=cnewf(0,complex1);
else
complex2=toCplx(complex1);
]]
98,05,20,20,10 止
<a name="doc62">
98,11,02,16,30 開始
更新 98,11,02 改進下面兩點
第一,增加複數點積函數
請看本卷源碼,找時標
由 9811021100 至 9811021230
<a name="doc63">
<a name="doc64">
更新 98,11,02 第二點為
在 方格三使用指令
[[
for(z0=bgn0;z0 < end0;z0+=step)
{
 x=18*cos(z0)-3*cos(18*(z0+0.34)/2);
 y=18*sin(z0)-3*sin(18*(z0+0.34)/2);
 oupStr+=x+", "+y+"\n";
}
]]
本卷老版本產生錯誤,因為有孤立的 '{'
及 '}' ,老版本是不許可的。
(請看本卷源碼,找時標,由  9811021025 
至 9811021046 )
現在增加指令,偵察孤立的 '{' 及 '}'.
程式避開沒有變數的一行。
<a name="doc65">
第二點的改進使(除筆者之外的)其他使用者
寫指令時比較方便。

〔以前必須寫指令如下
  " { dummy=0; " 或者
  " dummy=0; } " 
  筆者自己使用,沒有關係,但是,送入國際網路
請大家使用,最好增加指令,免除使用 dummy=0;
的麻煩。〕
98,11,02,17,03 停止

<a name="doc66">
98,11,04,12,51
更新 2009-11-04 增加指令,把方格三的
輸入字串統一碼改為 ANSI 碼。
使用者可能從網頁卷或者從  pdf  卷複製公式,
有可能取得的公式含有統一碼,但是本卷
 complex1.htm 不能讀統一碼運算符號,為了
避免意外的錯誤輸出,在兩處增加指令,
<a name="doc66a">
第一處為提示視窗,請看源碼時標 "9811031913"
第二處為增加
function uniToAnsi2(inp0)  // 9811041202
自動更改方格三的值,請看源碼,找字串
 "uniToAnsi2(" 及 "9811041142" 的說明
98,11,04,12,57 停止

<a name="doc67">
98,11,04,19,36 開始
在 doc64 的改進容許
[[
for(z0=bgn0;z0 < end0;z0+=step)
{
 x=18*cos(z0)-3*cos(18*(z0+0.34)/2);
 y=18*sin(z0)-3*sin(18*(z0+0.34)/2);
 oupStr+=x+", "+y+"\n";
} // 這一行沒有字母,以前的版本產生錯誤
]]
<a name="doc68">
不發生錯誤。方法是每一行都檢查有沒有字母?
如果某一行沒有字母,例如上面的
[[
} // 這一行沒有字母,以前的版本產生錯誤
]]
那麼程式不在這一行加入輸出指令,因為沒有
字母,就沒有變數,沒有變數就不需要輸出。

<a name="doc69">
今天 98,11,04 發覺程式停止執行
1+2
的計算工作,因為這一行沒有字母!解決方法
是把變數 hasAlpha 改為  alphaDigi ,同時
檢查有沒有字母及有沒有阿拉伯數字?更改之
後,程式可以正常工作。
98,11,04,19,44 停止

<a name="doc70">
99,07,27,10,58 開始
2010-07-26-20-02 start
99,07,27 更新,有如下的改變﹕

原有函數 conjf(c0) 變更輸入參數 c0 的值
由 實數+虛數 改為 實數-虛數
這種改變不是劉鑫漢所期望的功能,劉鑫漢希望
維持輸入參數值不變。
<a name="doc71">
如果您使用下面的替換法呼叫 conjf(c0)
  var originCplx=[1,2]
  var substCplx=[0,0]
  substCplx[0]=originCplx[0]
  substCplx[1]=originCplx[1]
  conjf(substCplx)
<a name="doc72">
呼叫之後,替身變數 substCplx 的值改變,
原始變數 originCplx=[1,2] 的值不變。
劉鑫漢猜想可能有人利用上面的替換法避免
 conjf(c0) 的毛病。為此考慮,劉鑫漢
不更改 function conjf(c0) 的功能。

<a name="doc73">
現在另外寫一個共軛複數的函數
function cconj(c0)
cconj(c0) 不會更改輸入參數的值。

<a name="doc74">
99,07,27 更新,第二項改變﹕
增加一個執行程式的點擊按鈕,放在方格三
及方格四之間,這種配置方便許多。同時
增加三個按鈕,"bye09" "conj" "else"

<a name="doc75">
99,07,27 更新,第三項改變﹕
增加函數「再見零九」 bye09()。 如果
不呼叫 bye09(), 輸出數字有長串 0、 9
sum0=-25.759999999998
如果呼叫 sum0=bye09(sum0), 輸出為
esum=-25.76
「再見零九」 bye09() 建立日期為
2009-06-12
<a name="doc76">
99,07,26 建立函數「再見零九群」 bye09a()
「再見零九」 bye09(aa) 的參數必須是數字。
數列是一群(一組)數字,如果一個變數代表
一組數列,把整群數字送給
「再見零九」, bye09() 不能接受。但是
「再見零九群」 bye09a() 接受一組數列,
「再見零九群」把數列中的數字,一個一個送
給「再見零九」 bye09() 。
<a name="doc77">
一直到全部數列處理完畢為止。編寫的指令只
能處理一個自由度的數列及兩個自由度的數列
,如果您有三個自由度的數列,請您按照本卷
指令,編寫高度數列「再見零九」的指令。
2010-07-26-20-25 stop
99,07,27,11,24 停止 




爪哇簡稿卷目錄
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