Board logo

标题: [其他] 复变函数表达式计算器zi [打印本页]

作者: slimay    时间: 2021-5-12 17:35     标题: 复变函数表达式计算器zi

本帖最后由 slimay 于 2021-5-12 20:35 编辑
复变函数表达式计算器,支持多重复变函数混合嵌套计算。是实数表达式计算器的升级版, 打通了冥数的计算,所有函数均推广至复域.
第三方进化路线,后者均是前者在多维空间, 多维数域,多维度矩阵 上 的升级.后者在输入降维数据后运行的结果与前者一致.保证了多维度向下兼容性.
REVPOLISH -> ZI  //多维表达式计算
FPLOT -> FP3       //多维绘图
I -> MAT               //多维综合工具
示例:
> zi sin(5+7i)*cos(6-3i)+sin(5+7i)*i
/***
  = -28817/6 + 4899/2(i)   //渐进分数表示
  = -4802.848508148568 + 2449.503431876684(i)   //浮点表示
  =  5391.421042267110 * exp[(i)2.669968709666] //极坐标表示
***/
支持实数同名的复变函数:
  +, -, *, /, , ^, pi=3.1415926536, e=2.71828182846
  rand, round, int, ceil, floor, sqrt, lg, ln, exp, abs, arg
  torad, sin, cos, tan, arcsin, arccos, arctan
  sinh, cosh, tanh, arcsinh, arccosh, arctanh


存为a.txt,  解码base92格式  : bse -d92 a.txt a.zip
  1. >7Ct'f!!!!'[!.:F?//?_!cs'[!_!2!!%r!!!_4QyyjApeJMHLV;<D\m4<-HI#>,g_Ago)/+%\<Q9*+8X_$-M/LHFZjY>x:vV)iq7kC!3@Gy@9di+*nkz,yi:QM7Sv)9//vN==A0.HM.EN>^)'dbt|lc!:JPxYr@)ycONmF)YK:tu*jpZ<@mL9@8?\QG$0YK)5[$O\_@xdMilvKj{6|S8GxI/Vb;Eh()J{eXX*V*,P<k13GQ%wxS0|{OWXYM#K2%S1m=ZeKy+eMP6Qdy03xyqHUipf]sLj57W:fG$Izl5E&Dc?$GCi^*[5O8@>qHbOv:$.;<+d|U.FV(nR#Xo?&LAYLE,e=J.F928WnJZP3hGDee]-8RIJQ}N8;,<wN]p,!,8h789RGLajgJTN>xt>OluV,^2jHB|u4I&r]41^V8?9Lk=#0-FUhy:ufajKvm#u+&=I>O%*>7y1Jk+|)d+A8L?QrR^#AL:v5+{2|XAX'iG:F1@id7wi;/EEf1)EVgfrZ:!!!B#'9Oh@b@!6hA*J!!!B!!!.!!!%m=2>_TWA2!yy\YF+{#(d;i2d!&w@Vq1:ZB\0_7a9GrQ_Ey-g]ldo;AIP1x#[c=#e;[|UUNXaSR5Mk!:LdxR/*ttt+&O0DTW]@Ilsf!>zcx_)fn5hE<]L@>>V@5YuL1w;sIbE0Cq^,-ruqD,r|{q#|w{Hz2u+w=W{Sj)x;O.FZRV.'v;oEdTjz1GKhez-iO'$\{Y:4sFyz)gHaon$M7CQz#XGC4^G@'0]57E}jJ\[AZLf@RayCUB/@2d]mah5Vyx:-lRR]1AQ{$;&kVoKU]86.y5Jb=e<*e3|6y7i,};)(nUb*2vOD{&mxiLJnH*B<LCWRuE}-*Si$r6>/msP;>{L^}_)@}+kr!XgO/F,|h]:eBB41FHSVFdi''H^UiXRIGj4Y|n?1O#Gg&[)&(dkh7hM@gjD'IVFK$<l@M;DXlIZ(i{h=-KiaWC2mNCfN][bf:LGj,Nv=)5>Oh5^CA$hbN{c.:]'%d,P+@D7K7uNgv&@ug,+RI3k{91g6W/xu,W.$zHTGI_a\xer6Qlm!u{=b>*WG^atTILWPO;E(wMrFL*Igc<'aO\6(=J<rmL6<Cm.-Z,aaW0C;B,eT&Hggk73W:RaO:|Pz8IE,CaU_)[-73%r+_7hJD+RwRSI#PEt!pCj&!+y:n<J1cIy=w57o5]<[&dG=hiK4dWgV=!Ig2fQyX>}>\n.o$9.w4gY%4qPbPi}VnNkjf/Gg$:I-qCbKI?bi/[n^O<'QxF&98'nEO:lC|'0Vb6GZO2+O#VZ3ngQ/r^g=:*fK?'\$t*)%v&,=<B>*0{Bmq-++xI>HR:>#7'In]aTlQsYbcUkhr3SV|W.aPZ]EtS=&k*([wyV;#4W:,C:(*]0#%;k-[q#$|<*,uU>ez9VZW2J*m(Up7D/<4pw/'IFVV];Uk9A&XG119!'DgtgjLO%&7IVj$0iQGf93QpSv\$etouW\3m2w5<)D&LqI&[RngcN(nS2R+|/C*CG'='Rd60j|\J^aS:H34Or+-g2%?-&IXCW$qijqC0O#4Aa;>9(8mYV<Y\]ZVzT$!5\^k477j)X/CWr7DTYPi(Xh|PBG_pMwd641#x/kU8/^8a5cw#16R108|O#2Bi=.ky^M@;73Ux2z!:Ou,I$1J>ml%sCf<!zr%lQL{vG&'8/_^9gAQ^QD[Z!*nN.8d%RxAiA@=2^jsF5Yrc$)+\N3tlhX\9?|U5U-ReKmWs'8=vOB.Z6J!3[{^hW[e%5@c-fZJB/!2)u0x\5S$gE/obQYxu&v/k5e?i2(k(VE7CVMC&*yht@l1|NI|)Ss]jSRpUw7yF38/Q*l\K!|d%>D#zVy(8<=P9$X/Wshfw[8;(r,=^6]0^!jL^)=h]{zFd{ntmPu=0R((Kk5oi|lB9YGwxxqgW5)$FEHPj[sy1aF\0XXsXQ>h\Buq,;[8[a,2uC&rOb3*Q)OU>o%*%1SI3,3#.o!mBJ+BkJRcQxdi:&DhAuSh)pB'm&VS4G=S=;,hg'W?9-bRl|9T(*A,3k?<Y{[.3#d)g3JJC2JgyV%ruM7$UF]@&8oT\:4k:+$K[W5V=SZn])1y?#y]PB%;&T0y.Y]rL+A]ky]m_M8TWSSI)gZr!e1@#-BIW!aEDjfN]w6U<qb6FYmU.gqNrd;m3Iro^UA,ZgW:QE$SF\tjP]V3<C&PRXZI>:5ch,6AVQM&r}]#KMZ#x.Iu@o3y%3gl-%X1?oa<x[X.:,|C&r!kU^$w'NV:5Em!bFF/Uf4t]s16xr>j@!p>1#D[e5ks!$sjQD-4f[G<zZutk:\7%W8)ww$Iz9m&-$loHa/EO-s$N@Xy'heoqMNJ@heNuC%5(X:C.1dB)2lab*ec;A1]zq&wUBM+&q5)/*'3v\y.CCBom%5$]OU=>[7'<GN@Uk*^HTuBK-D#.LP|i.9G>Kvx|Rpl1U%iU7LihjGp7xkZ9IM\O[I.8y<PLm/6I&9:_nzXP|&=qp{)s@t1<V|m@*DZEIc)/sw>ZXBt@9&]*3P:UV&S7WE!0cn_sw5=uY)m$Y|bQG-uE1F.{<Du[x6{Yj/8{XPO2x05Y|3bS$|#-?>K+bIGPTzQq1Z][yHHSc?|m$]pBK7no{ZJ5ZOrlf]-2pu8X2.+tN11@XLO|gi[E\'yaBv()jhN8!R$N^1I,q311hf2c*?MML$*-E-3xwttI<5%RE6N.f5a[3.s8jzBi%z6Dgz-:b^)cvW9U|Zu_E|RDEF,7*,u?[\*4xOX3LX50$ym_gjDhLHch>gnU\WC?mTU?X+6/nyr\ElnPn6J).={Yo=pWHk?z_8<r9YFn3sH=4<#d}SY_Pl|qvQm<DqF,>!e|\M$J=|<CjmEI0)<r|n|19uP1;h_)Wy8?&i:\4Y%v{l<8:y&Q_u$P0]4;Hyq]2=x7n=0e*]:5Bhd\H&t-D?$\Yg]@r7G']cCUC=q]T7MhWk2Uttw;(t*cQ,?U:Gox=vtwTEy91W|snsV9']F4Gtr/4eO.:>|+Lp>5I[3&$/ywoS29?IC'!H|L>#DmD<:;$L,cC#CA9&3+|nYXGf6u8(h:_I?';7*6zZ4fI:m336a%s$2t/Ivo-(0t*AW,uyJ,A{]MicU&]kfd!%H5@zSMtfe<i;+@aokQ5{s-=TF?8@34vqFZD=@CC?\1<U^&p0J[xKuNTc_D8$WLpJ3Zi\?wZ.u(0]cFk['HLV/fRSZ!^=?vNUE]qC)73SV(m9XB?#Jh(pufa-9-fuu,(n[L7vxwS|i_6UpIaiZ]J?d5ropGN$d3xJ'c75gl=:x*Dy>HoM-F24LJBq;:_wty5i-KT[apuDFBy3oW\%!fDJsPwC^42,aQ*9!'|'3T$.s3U3rAgEIG2EJ1<bk3%,Ln[YPqLkpd,.(-RFI!dqn3/r}>8e\uE#?=S9;T=1IC?N\tIlAq%618OkU<iw\D>d<134>H;F&Wy5'3qr[20gV7@XgdOuLC&1CCsA^J$Dzj'5<8NjzJ!Y[.m#Y.g1gs}V|7PVS@]5Iyixq{d'cQ%_0/-sLk@0^@]Jv@b4#oX<xiPs@%hFp+*(C8*#ss]B(AUWgcCUZ/Hc|}!\}l3bkU)|xS[h3^lkOmEs02&?%'4XaTDZ|G6=t)<E#(:2V;ur{cU.eBV8&KOH,Eyj{k'/R3ew,d?z<2?SAM<!X-0.TYr?8x4MyC|5Bo*r7U{Lw:CvlJS4324]De1hF0G=y,F9yE$d:mE/<fo_Q(YQIh85]yz>_[-5&Yx\ei)W}Vt^TcY*3RUYr#?jJ:Y27)hUd[6?otiULb/VLJGr_;gJV0,Ml#\$<)/ivQicgHTeq6T=m?=.w{'Y:]!9^[@aRtpl|//<]GAsJ4N-|dnWM2G;1n=!TkSu<z4\mPZZqND#:9h-\NQ5+4Pme(NN&.lb)9Nq]kT%@h4_/gr6%q&,%/Oi<h9<(e^^m/kHx9LTKp_H|<qJnI#k@vmp|P^s}C%Tx::hJ'xF88<ro9-qL[@[4{z^nZG3HT$M#.r+b6mu\;ZT,qX[(%ahC3d<EV\-{C^aX8n+_tLXUgC'>s&(<UDNc>m*AE1hv+/vV716cJm\EPZ(Whd0$4N9BrI'8;t4chd/pz\PKov*+AN7I_+Hf8taBOz,:eO<&Fb.OlSwrSt1Ny}o6X28py&*j<+;U6HP*tl/g[Uh-K<*kyaUD-*>;LKrb'ctOgzuN9A6d(PT,931M|Bv\ty^_UcL(<ZN:2<a=&Ey[2#<si>4GGhi,@oQ3Rf?nC(=T,vaE@9ZY21eB@B3zEZH,?zja\iqC.wht\L,.9|;<?Q]vXUZ2tw&,_T\>vc@YNDu=AWqjN%C-lE\:RDRolZMwg&Q8,HJnf)M0X6,'q[j?>6q@CfFuP&zpl+tj3>W=pEC:^1+$pOGSC&[,z'mGvHl#-wOSg.tlL=f!{Yz+GN4dZg?AS(q6{9O\B,ZHE>r#Np\NhInq%pC'EmC{Wd&9fa&h(IbLJSj;!X6Ywe,?M_u8L*{Aqyqdln6/ca|wTFG1AT{UFteT:btH5|m38dZKNzbptSYLr7(qfx/B9mCz<ny})NqHZ7ig$Polh.p3Q92|J8N.9}q2{j<y[]T>|WAh-eG[Uth5&POmVh1I(zd=e*(.XZvS,Uq6zKgsmb'N]8*!_^v<-/>&^,!l{epo{(y/uz_(](?iM)ou{=]2r4:f?e5Zxgg*j{qca3M:/s]1CfW2F{n57jj4yl-nyz<y&Tb$|($$J_1:{(sWs6A(*tLUc6g7w^UBijNyb*wHL=-bG807Yk>?skJm-f-3F/y;RkTC0{t]@IeGPAwP#]x*dVr;a=eHyH'du3]!KB<o@+w#AeOuf:Rk.jE77n(KY7p1cN4e:Ne}rRB9;9*i=G^cA]R]L3'nAm0Fpt+5ZSd+3%:wn,p;Sw:nj7l|o<<3's'$rc5Prm(xR:9VpxpF4Q=5NE2[O/HnD=qb+kZ#+k'I!)up$mpo(0']?F%@Wv<:8r#!1rO-%aCuXDF\C_KGYCAe.JQ-OX{^o0K[>9g:ec@'8,{ZRBbYpAc\KWct)L|i/yj#,ec,CLqPi=tMg{k{4XLw(2;w*h!lv%4N6L@\?C(:IM)4-di=ISvYj<%3df.:o[njGST@7UbpH=!M1#.\H#i{%N9kNXb,)<Yv2j.^+>TnsZ^llsDtCy9a<fwN^4zGQwIq]][Z48Wa^0quJw0vUnNeIAY/G6XumdM;HB\L0uDr$g8Gw!Jzr<l67Z,(0dnl-Z*2mx&.<Dn#SI{nh$&ixNrpdeG#r?\I;*T[mfjdcgjTJjb0b:,2I9JWM1Mg>YS3j(=}$U6,#gu.qp#$R0@j-6GMHrb}T3eN>=9]muK!|8M\n?fy(N.A,[Sl*2O2+O^l2-!,+)C_+k-5:t_1P:r+P^{4&#*djK{Og)el9N'uj^ris$N\7<UoJ2oL7)bwW(,mQbezx(lJ/AMtl3XMtJEz2vgX&$89)aHT=l-Pw2=UXyMOpqE-'}guLvqWUH/kqv*EBk^N$&;f*]T9t_X;EgTLOa)u=i/Lg^FAYd_\eIbm_I0sCVB|&jF^-&Moe-$c$PyYQDN5?0+WxX$f/6o3_P:fne8&5;pWb!inq_f6$ENA?M%'wA8GOsNLwDQ#c)EV;3>b8@WfPOsa;w+cP5vO4#&5*eothKz0B#c:Tztzh\$)bPRN%6$Inf(A^@m<(nH}4B_j3JP6AjxW&!@,&Mj|oqX5(4,YcyrD+Bsb(vA.XJ4se?#wo8oq/FYOUZ*%BRnxria4yw8@O|/n9>E7?^$';c:j{T|SF'HEYfF(zaGp/>il&ygqs?q;mR0V6\e=qe1%UN24C^FT{e$G[aV7;ph31jWqV!-2dIMNM6d.#i/bJe+hhudTqWxHy@KPzyu{!P7h(OKZE'o>tFHPz\MW!!j^&)\e*U#d>X:H.v9E.DG9b}8g51AiRUhr^v(!>*AS8p|;bR4:{*V:=@6JF4%o6<-+Px^[b4%(C%'@Fw#.dnpw]2e!-[Fp171qn/8yr*gTI|vqcktM5+7d$N,a^Df$<|34E*g<JbbFF=Zw;}GIL?1uL&vU8%\v@7\>P8B/?.Y6kQ;_=OTuuOu{Qf]9w/Es,}RGFx5k>_5Hy&OyXKw,aZ>(lUp)9+;?O4h$L),Ta.sCs?'Z0&#v^TC5mePs+ITblxdolPZh).Yf=npz4W\[[h%5?AyEb\w_y-Xv<=^W=Wm=941[m3i&LW=XAh%}UOGC)>f/m<!2e\!Dn>\T4z-JOA_U^A3*_=hO;\U{jN%.Ekl!=,AWK=vVe|CH#TdC|A{CjneIG/FiR(Y$+19814AzTH\HU8.l/9IK.l/fK\iF8sp<#RGQ.5B9b_)y>-&<jsIgSTJnz,NMLpq^pA5DKMv)b/qm3wR)\X1Domq,Wr%HIio5^pcNxWAR=,$0Tj!UMAaGo)rGzK:x4EZ+L?_2L6ke=*,\skkeOw$Y*SH9Q|Q;<L!nNT0|2BLcRW{Z(?USOcuT*H$VI0vXU}$bgQh8j!Grx!Ie@me9{_mXn[cSM<yBL'{!1GfAdY6f5?2^=_6v2)S1(vzcr+gtKfxZE7e0no52X#PWx$(}&z'9EJjtN1;AE0g(gWf=&;%w9H-sTo<'x;r5#r,-&Jfy-X0gtaqiEX3iiT4w%k$XQb>Kj-h<Hqc*840M-57]+i@GpV|mwN;7Q%6d30x4fx7{qWny{*@ULcfD9BWu?Ot'J4dZhdh9_i8iXM05|,F3d!:%qA|.0dLSSSaW@Wqe(.;,K4RQPc<)n%MtxY%Q1hl}Y1bGC1x9KJyL^#5h!Wc6@\m3Z-{IelzZYJ\2.|K<.\lg?@ELP2j<9s@%^2@%\yh%uv'@KDN(_'9Fj6-SGXG&_W,(_i[uozMBZODk@dGi,?1!GU;$9eB3{f9Gf\(ZkT:OY%jPd9)|UX'#E]P$gag'G{C:[tb(4\_HnT7j.SFP^]1p@N@l<CC1@_]s\YXa5_bqSZXjBw[ESb]^VX!{oS0L*UGe=4p]\qXCK=5+%pH/VaV6go?qX{]gA4*dIq{uS2?Ve1_^1JL]c<zW$PGI^AUMS@{(iJglGV@dE.miLARj4zC#oW.3FQ&e]puYRQnd/(0jgOH?=_-zabWqVI\|v]D2uv4a0gPh\2iL5Uzh*hu8EBcv{C.bvX{K$KUCH,_&Ciq[@Pk'gUFv&ujc.SX@T1&2$ub95\W-SN9u##[wZyQs/kA6&iZf)*a[znN}oUXR*.0<;!{55LN>O((!2=hU,x\|jtX-3*Ir;X5S?J)_iMl:Om+8o[4cD#y2dvt#H25L0--]tV$-9^mLU=Fo5Q0eLVSt*JQ*uvwJV+r$yzZ&h,wRY=Vv^}e)M/^zuPpp|FfbGkP'@'t%!B{J!rf_{]{0+G6!OoL6cPYOIE+9[JQA<XFU<qf40&T>MrxZFaW=%g0<_A__onjH=8b.+ii,1V@?&KRfVybFy0Zk/05Oh;8JVwMm+M<KLv>YL60jv2JN0t#UkJ>h/{B=e#p-+-4.o3vfkVjK/ya3@V:C7FI$:hi;*0Slq!V$-moH<@W:+p]+7xBT_LLOhI(PH{x&/(%p/.pI2'F*T)T%?}n,<<pqy=E(LEc@5}k1?jArgTrz0w(ICrTZzAeMQ7\aXIg,K:d\vOx=Lmd},nJdbX2.qTrxy-aS6HtN1lGjhOdXGW+0<)kaL9nYr8Tz1=.5tN83]WK*Mwzx98_i;MO]$O)>Vgr8c%PZtpI<ZH#rl$Ll)69iNN[Vd,@p79mOT&vY=Kz0=Kzk=0v2.uJY^[/^3:7f).Si\S8'ntj_o4aK#/o6|^ExAINvJ!EiT?X)T2FFd4S$6#9EFth&&@K3TgB=_+d_pOjd&{,5b$e]e2\j?|X$ud,,LGjlH6oXnMuGgL6y?%v|pm[Rj,'uiE$U]O7WS,b2+Plq]?NIL;-AwJf$)3bhMZ7%{i{VID2rs)j\2}SuIo'+-/e8W7)RU>IVed<xv&B$M8[6sgqP{;'K+N!pxDxk^a\CS68_C+T<J^IED?!-e,;WO&+&!!pd20'VqmqH9d!Kz:Z*:Y#2wKcB4|!fz;f<uW{IQtYXP8q^dA@n$iHu'8[,y09.Y-e>R!M[<h{'[ltBe)Kii8Z7fhiUo==M-f{&:qDH(%I9y&|Sg?t\'#Y&hI;P7ulj]+@Hob%[l#9jvi#VKW/$HgY77Ujcc7tOZu=NF%,ZaJN5,m.,<Tlz[_w5V!D2a_JmKti].-:}RTI[tK{+?>A?74P;2Zen|IBT\;=:pDHg_);0/V%67]t}:Ha2?>2@+zb\;%oE!d]Xx_D3*?Hgh<PHb}d*ts.2Ab!)39daBM[yC3Hg%ag),65,)!=s=;oG/x3@ul3)cX{;u7Y*KZ?RZ!7=gPfFIAs/r=o)?FaD%}Yz{SBVQY8x='W7a*U?zAu]M:w8Xo!w(X$o,u!s!!!!O##)1/W,2WGygwO#'C#G!!@y.^!!!!!!!!8P!!!!!!!#u0_k:et4&)+\E28PO#!!!!!!8PfQSd_lg}[\IH+6#6Tl;9qo4J$K-WTQf[Oo!B9r!,!!!!'[2w1z?.9%%]?4O#!!'[!!$,#W!!!!!!!!$m!!!58T!!7QU]jC*s>.-9!!!!!!'[2s$cJW7,FvBBbzr&s5lncdGug)iG[\IGZLfz2s!!!!$m!B%|!!!%-S!!!!!
复制代码

作者: slimay    时间: 2021-5-12 17:52

本帖最后由 slimay 于 2021-5-12 18:04 编辑

实现的复变函数库, 可推广至四元数域
  1. /*
  2. COMPLEX MATHLIB &COPYRIGHT@2021~2023 BY SLIMAY
  3. 复变函数库
  4. */
  5. #include <math.h>
  6. //定义复数类型
  7. typedef double Complex;
  8. #define _REZ 0
  9. #define _IMZ 1
  10. #define MATH_PI 3.1415926535897932
  11. #define MATH_E  2.7182818284590452
  12. ////////////////////////////////// 定义复恒量
  13. static const Complex Z_0 [2] = {0,       0};
  14. static const Complex Z_1 [2] = {1,       0};
  15. static const Complex Z_i [2] = {0,       1};
  16. static const Complex Z__i[2] = {0,      -1};
  17. static const Complex Z_pi[2] = {0, MATH_PI};
  18. static const Complex Z_e [2] = {0, MATH_E };
  19. ////////////////////////////////// 定义复数 模 加、减、乘、除
  20. //实例化一个复数
  21. Complex* Z_init(double x, double y)
  22. {
  23. Complex* Z_RET  = (Complex*) malloc (2 * sizeof(double));
  24. *(Z_RET + _REZ) = x;
  25. *(Z_RET + _IMZ) = y;
  26. return Z_RET;
  27. }
  28. //复数的模长, (一维函数)
  29. Complex* Z_abs(Complex* x)
  30. {
  31. double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
  32. Complex* Z_RET = Z_init(r, 0);
  33. return Z_RET;
  34. }
  35. //角度转弧度, (一维函数,只对实部运算, 虚部归零)
  36. Complex* Z_torad(Complex* x)
  37. {
  38. Complex* Z_RET = Z_init((*(x+_REZ)) / 180.0 * MATH_PI, 0);
  39. return Z_RET;
  40. }
  41. //复数的辐角 (一维函数, 只返回0到2*PI范围内的辐角弧度, 虚部归零)
  42. Complex* Z_arg(Complex* x)
  43. {
  44. double arg = 0;
  45. if((*(x+_REZ)) == 0)
  46. {
  47. if((*(x+_IMZ)) != 0)
  48. {
  49. arg = ((*(x+_IMZ)) > 0) ?(MATH_PI/2.0) :(-MATH_PI/2.0);
  50. }
  51. }
  52. else
  53. {
  54. arg = atan( (*(x+_IMZ)) / (*(x+_REZ)) );
  55. if((*(x+_REZ)) < 0)
  56. {
  57. arg += ((*(x+_IMZ)) > 0) ?(MATH_PI) :(-MATH_PI);
  58. }
  59. }
  60. Complex* Z_RET = Z_init(arg, 0);
  61. return Z_RET;
  62. }
  63. //随机一个复数, 辐角不超过 x的辐角,模长为x的模长.
  64. Complex* Z_rand(Complex* x)
  65. {
  66. double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
  67. double s = (r < 2) ?(rand() % 8192/8192.0) :(rand() % ((int)r));
  68. Complex* Z_RET = Z_init(s, 0);
  69. return Z_RET;
  70. }
  71. //复数加
  72. Complex* Z_add(Complex* x, Complex* y)
  73. {
  74. Complex* Z_RET  = (Complex*) malloc (2 * sizeof(double));
  75. *(Z_RET + _REZ) = (*(x+_REZ)) + (*(y+_REZ));
  76. *(Z_RET + _IMZ) = (*(x+_IMZ)) + (*(y+_IMZ));
  77. return Z_RET;
  78. }
  79. //复数减
  80. Complex* Z_sub(Complex* x, Complex* y)
  81. {
  82. Complex* Z_RET  = (Complex*) malloc (2 * sizeof(double));
  83. *(Z_RET + _REZ) = (*(x+_REZ)) - (*(y+_REZ));
  84. *(Z_RET + _IMZ) = (*(x+_IMZ)) - (*(y+_IMZ));
  85. return Z_RET;
  86. }
  87. //复数乘
  88. Complex* Z_mul(Complex* x, Complex* y)
  89. {
  90. Complex* Z_RET  = (Complex*) malloc (2 * sizeof(double));
  91. *(Z_RET + _REZ) = (*(x+_REZ))*(*(y+_REZ)) - (*(x+_IMZ))*(*(y+_IMZ));
  92. *(Z_RET + _IMZ) = (*(x+_REZ))*(*(y+_IMZ)) + (*(x+_IMZ))*(*(y+_REZ));
  93. return Z_RET;
  94. }
  95. //复数除
  96. Complex* Z_div(Complex* x, Complex* y)
  97. {
  98. double r2 = (*(y+_REZ))*(*(y+_REZ)) + (*(y+_IMZ))*(*(y+_IMZ));
  99. if(r2 == 0)
  100. {
  101. printf("Cannot div 0.\n");
  102. exit(1);
  103. }
  104. Complex* Z_RET  = (Complex*) malloc (2 * sizeof(double));
  105. *(Z_RET + _REZ) = ((*(x+_REZ))*(*(y+_REZ)) + (*(x+_IMZ))*(*(y+_IMZ))) / r2;
  106. *(Z_RET + _IMZ) = ((*(x+_IMZ))*(*(y+_REZ)) - (*(x+_REZ))*(*(y+_IMZ))) / r2;
  107. return Z_RET;
  108. }
  109. //复取余
  110. Complex* Z_rest(Complex* x, Complex* y)
  111. {
  112. if((*(y+_REZ)) == 0)
  113. {
  114. printf("Can't % 0.\n");
  115. exit(1);
  116. }
  117. Complex* Z_RET  = Z_init((double)(((int)(*(x+_REZ))) % ((int)(*(y+_REZ)))), 0);
  118. return Z_RET;
  119. }
  120. ////////////////////////////////// 定义复变函数 (即实变函数在复域上的推广)
  121. //EXP函数
  122. Complex* Z_exp(Complex* x)
  123. {
  124. Complex* Z_RET  = (Complex*) malloc (2 * sizeof(double));
  125. *(Z_RET + _REZ) = exp(*(x+_REZ)) * cos(*(x+_IMZ));
  126. *(Z_RET + _IMZ) = exp(*(x+_REZ)) * sin(*(x+_IMZ));
  127. return Z_RET;
  128. }
  129. //自然对数 (旧版),0无辐角
  130. Complex* Z_log2(Complex* x)
  131. {                    
  132. if( (*(x+_REZ)) == 0 )
  133. {
  134. printf("Can't ln(0+bi).\n");
  135. exit(1);
  136. }
  137. double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));                  
  138. Complex* Z_RET = Z_init(log(r), atan((*(x+_IMZ))/(*(x+_REZ))));
  139. return Z_RET;
  140. }
  141. //自然对数
  142. Complex* Z_ln(Complex* x)
  143. {
  144. double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
  145. if(r ==0)
  146. {
  147. printf("Can't ln(0).\n");
  148. exit(1);
  149. }
  150. double arg = (*(Z_arg(x)+_REZ));                 
  151. Complex* Z_RET = Z_init(log(r), arg);
  152. return Z_RET;
  153. }
  154. //常用对数
  155. Complex* Z_log10(Complex* x)
  156. {
  157. Complex* lnx = Z_ln(x);                  
  158. Complex* Z_RET = Z_init((*(lnx+_REZ))/log(10), (*(lnx+_IMZ))/log(10));
  159. return Z_RET;
  160. }
  161. //次方函数
  162. Complex* Z_pow(Complex* x, Complex* y)
  163. {
  164. Complex* lnx = Z_ln(x);
  165. Complex* Z_RET = Z_exp(Z_mul(y, lnx));
  166. return Z_RET;
  167. }
  168. //开方函数
  169. Complex* Z_sqrt(Complex* x)
  170. {                     
  171. Complex* Z_RET = Z_pow(x, Z_init(0.5, 0));
  172. return Z_RET;
  173. }
  174. //四舍五入
  175. Complex* Z_round(Complex* x)
  176. {
  177. double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
  178. Complex* Z_RET = Z_init((*(x+_REZ))/r * (double)((int)r),  (*(x+_IMZ))/r * (double)((int)r));
  179. return Z_RET;
  180. }
  181. //向下取整
  182. Complex* Z_floor(Complex* x)
  183. {
  184. double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
  185. Complex* Z_RET = Z_init((*(x+_REZ))/r * (double)(floor(r)),  (*(x+_IMZ))/r * (double)((int)r));
  186. return Z_RET;
  187. }
  188. //向上取整
  189. Complex* Z_ceil(Complex* x)
  190. {
  191. double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
  192. Complex* Z_RET = Z_init((*(x+_REZ))/r * (double)(ceil(r)),  (*(x+_IMZ))/r * (double)((int)r));
  193. return Z_RET;
  194. }
  195. ////////////////////////////////// 定义复变三角函数
  196. //正弦函数
  197. Complex* Z_sin(Complex* x)
  198. {
  199. Complex*  ix = Z_mul( Z_i, x);
  200. Complex* _ix = Z_mul(Z__i, x);
  201. Complex* Z_RET = Z_mul(Z_init(0, -0.5), Z_sub(Z_exp(ix),Z_exp(_ix)));
  202. return Z_RET;
  203. }
  204. //余弦函数
  205. Complex* Z_cos(Complex* x)
  206. {   
  207. Complex*  ix = Z_mul( Z_i, x);
  208. Complex* _ix = Z_mul(Z__i, x);
  209. Complex* Z_RET = Z_mul(Z_init(0.5, 0), Z_add(Z_exp(ix),Z_exp(_ix)));
  210. return Z_RET;
  211. }
  212. //正切函数
  213. Complex* Z_tan(Complex* x)
  214. {                     
  215. Complex* Z_RET = Z_div(Z_sin(x), Z_cos(x));
  216. return Z_RET;
  217. }
  218. //反正弦函数
  219. Complex* Z_asin(Complex* x)
  220. {
  221. Complex*  sqrt1subz2 = Z_sqrt(Z_sub(Z_1, Z_mul(x, x)));
  222. Complex* Z_RET = Z_mul(Z_i, Z_ln(Z_sub(Z_mul(Z_i, x), sqrt1subz2)));
  223. return Z_RET;
  224. }
  225. //反余弦函数
  226. Complex* Z_acos(Complex* x)
  227. {                    
  228. Complex*  sqrt1subz2 = Z_sqrt(Z_sub(Z_1, Z_mul(x, x)));
  229. Complex* Z_RET = Z_mul(Z__i, Z_ln(Z_sub(x, Z_mul(Z_i, sqrt1subz2))));
  230. }
  231. //反正切函数
  232. Complex* Z_atan(Complex* x)
  233. {      
  234. Complex*  s = Z_init(0,-0.5);                              
  235. Complex* Z_RET = Z_mul(s, Z_ln(Z_div(Z_sub(Z_i, x), Z_add(Z_i, x))));
  236. return Z_RET;
  237. }
  238. ////////////////////////////////// 定义复变双曲函数
  239. //双曲正弦函数
  240. Complex* Z_sinh(Complex* x)
  241. {
  242. Complex* _x = Z_init(-(*(x+_REZ)), -(*(x+_IMZ)));
  243. Complex* Z_RET = Z_mul(Z_init(0.5, 0), Z_sub(Z_exp(x), Z_exp(_x)));
  244. return Z_RET;
  245. }
  246. //双曲余弦函数
  247. Complex* Z_cosh(Complex* x)
  248. {                    
  249. Complex* _x = Z_init(-(*(x+_REZ)), -(*(x+_IMZ)));
  250. Complex* Z_RET = Z_mul(Z_init(0.5, 0), Z_add(Z_exp(x), Z_exp(_x)));
  251. return Z_RET;
  252. }
  253. //双曲正切函数
  254. Complex* Z_tanh(Complex* x)
  255. {                     
  256. Complex* Z_RET = Z_div(Z_sinh(x), Z_cosh(x));
  257. return Z_RET;
  258. }
  259. //反双曲正弦函数
  260. Complex* Z_asinh(Complex* x)
  261. {
  262. Complex*  sqrtz2add1 = Z_sqrt(Z_add(Z_init(1,0), Z_mul(x, x)));
  263. Complex* Z_RET = Z_ln(Z_sub(x, sqrtz2add1));
  264. return Z_RET;
  265. }
  266. //反双曲余弦函数
  267. Complex* Z_acosh(Complex* x)
  268. {
  269. Complex*  sqrtz2sub1 = Z_sqrt(Z_sub(Z_init(1,0), Z_mul(x, x)));
  270. Complex* Z_RET = Z_ln(Z_sub(x, sqrtz2sub1));
  271. return Z_RET;
  272. }
  273. //反双曲正切函数
  274. Complex* Z_atanh(Complex* x)
  275. {
  276. Complex*  s1 = Z_init(1, 0);
  277. Complex*  halfs1 = Z_init(0.5, 0);              
  278. Complex* Z_RET = Z_mul(halfs1, Z_ln(Z_div(Z_add(s1, x), Z_sub(s1, x))));
  279. return Z_RET;
  280. }
复制代码
新第三方预告,升级版的mat加入了矩阵表达式计算器,类似matlab
mat
格式:
mat "[expression1] [expression2] [expression3] [.] ..."

示例:
mat "[A=1,0;1,1]  [B=A^(2)]  [C=A^(-1)+B]  [(A^(-1))-C]  [det(A)]  [tr(A)]  [A^(50)]"

输入格式:
    {E = en(2)}      <==>   [1   0]
                            [0   1]
    {A = 1,,2;3,8,7} <==>   [1   0   2]
                            [3   8   7]

矩阵函数:
    +, -, *, ^, A^(-1), A^(n), cp(A), rot(A), en(A)
    gs(A), diag(A), lad(A), tri(A)
    tr(A), r(A), det(A)
    lf(n): 控制精度

example:
    mat "[A=1,0;1,1] [B=A^(2)] [C=A^(-1)+B] [(A^(-1))-C] [det(A
    You can use the letters A to O to name the matrix
    {E = en(2)}      <==>   [1   0]
                            [0   1]
    {A = 1,,2;3,8,7} <==>   [1   0   2]
                            [3   8   7]
matrix functions:
    +, -, *, ^, A^(-1), A^(n), cp(A), rot(A), en(A)
    gs(A), diag(A), lad(A), tri(A)
    tr(A), r(A), det(A)
    lf(n): control print precision

作者: Byaidu    时间: 2021-5-24 00:32

大佬太厉害了




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2