标题: [其他] 复变函数表达式计算器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- >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 编辑
实现的复变函数库, 可推广至四元数域- /*
- COMPLEX MATHLIB ©RIGHT@2021~2023 BY SLIMAY
- 复变函数库
- */
-
- #include <math.h>
-
- //定义复数类型
- typedef double Complex;
-
- #define _REZ 0
- #define _IMZ 1
-
- #define MATH_PI 3.1415926535897932
- #define MATH_E 2.7182818284590452
-
- ////////////////////////////////// 定义复恒量
- static const Complex Z_0 [2] = {0, 0};
- static const Complex Z_1 [2] = {1, 0};
- static const Complex Z_i [2] = {0, 1};
- static const Complex Z__i[2] = {0, -1};
- static const Complex Z_pi[2] = {0, MATH_PI};
- static const Complex Z_e [2] = {0, MATH_E };
-
- ////////////////////////////////// 定义复数 模 加、减、乘、除
- //实例化一个复数
- Complex* Z_init(double x, double y)
- {
- Complex* Z_RET = (Complex*) malloc (2 * sizeof(double));
- *(Z_RET + _REZ) = x;
- *(Z_RET + _IMZ) = y;
- return Z_RET;
- }
- //复数的模长, (一维函数)
- Complex* Z_abs(Complex* x)
- {
- double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
- Complex* Z_RET = Z_init(r, 0);
- return Z_RET;
- }
- //角度转弧度, (一维函数,只对实部运算, 虚部归零)
- Complex* Z_torad(Complex* x)
- {
- Complex* Z_RET = Z_init((*(x+_REZ)) / 180.0 * MATH_PI, 0);
- return Z_RET;
- }
- //复数的辐角 (一维函数, 只返回0到2*PI范围内的辐角弧度, 虚部归零)
- Complex* Z_arg(Complex* x)
- {
- double arg = 0;
-
- if((*(x+_REZ)) == 0)
- {
- if((*(x+_IMZ)) != 0)
- {
- arg = ((*(x+_IMZ)) > 0) ?(MATH_PI/2.0) :(-MATH_PI/2.0);
- }
- }
- else
- {
- arg = atan( (*(x+_IMZ)) / (*(x+_REZ)) );
- if((*(x+_REZ)) < 0)
- {
- arg += ((*(x+_IMZ)) > 0) ?(MATH_PI) :(-MATH_PI);
- }
- }
- Complex* Z_RET = Z_init(arg, 0);
- return Z_RET;
- }
- //随机一个复数, 辐角不超过 x的辐角,模长为x的模长.
- Complex* Z_rand(Complex* x)
- {
- double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
- double s = (r < 2) ?(rand() % 8192/8192.0) :(rand() % ((int)r));
- Complex* Z_RET = Z_init(s, 0);
- return Z_RET;
- }
- //复数加
- Complex* Z_add(Complex* x, Complex* y)
- {
- Complex* Z_RET = (Complex*) malloc (2 * sizeof(double));
- *(Z_RET + _REZ) = (*(x+_REZ)) + (*(y+_REZ));
- *(Z_RET + _IMZ) = (*(x+_IMZ)) + (*(y+_IMZ));
- return Z_RET;
- }
- //复数减
- Complex* Z_sub(Complex* x, Complex* y)
- {
- Complex* Z_RET = (Complex*) malloc (2 * sizeof(double));
- *(Z_RET + _REZ) = (*(x+_REZ)) - (*(y+_REZ));
- *(Z_RET + _IMZ) = (*(x+_IMZ)) - (*(y+_IMZ));
- return Z_RET;
- }
- //复数乘
- Complex* Z_mul(Complex* x, Complex* y)
- {
- Complex* Z_RET = (Complex*) malloc (2 * sizeof(double));
- *(Z_RET + _REZ) = (*(x+_REZ))*(*(y+_REZ)) - (*(x+_IMZ))*(*(y+_IMZ));
- *(Z_RET + _IMZ) = (*(x+_REZ))*(*(y+_IMZ)) + (*(x+_IMZ))*(*(y+_REZ));
- return Z_RET;
- }
- //复数除
- Complex* Z_div(Complex* x, Complex* y)
- {
- double r2 = (*(y+_REZ))*(*(y+_REZ)) + (*(y+_IMZ))*(*(y+_IMZ));
- if(r2 == 0)
- {
- printf("Cannot div 0.\n");
- exit(1);
- }
- Complex* Z_RET = (Complex*) malloc (2 * sizeof(double));
- *(Z_RET + _REZ) = ((*(x+_REZ))*(*(y+_REZ)) + (*(x+_IMZ))*(*(y+_IMZ))) / r2;
- *(Z_RET + _IMZ) = ((*(x+_IMZ))*(*(y+_REZ)) - (*(x+_REZ))*(*(y+_IMZ))) / r2;
- return Z_RET;
- }
- //复取余
- Complex* Z_rest(Complex* x, Complex* y)
- {
- if((*(y+_REZ)) == 0)
- {
- printf("Can't % 0.\n");
- exit(1);
- }
- Complex* Z_RET = Z_init((double)(((int)(*(x+_REZ))) % ((int)(*(y+_REZ)))), 0);
- return Z_RET;
- }
-
- ////////////////////////////////// 定义复变函数 (即实变函数在复域上的推广)
- //EXP函数
- Complex* Z_exp(Complex* x)
- {
- Complex* Z_RET = (Complex*) malloc (2 * sizeof(double));
- *(Z_RET + _REZ) = exp(*(x+_REZ)) * cos(*(x+_IMZ));
- *(Z_RET + _IMZ) = exp(*(x+_REZ)) * sin(*(x+_IMZ));
- return Z_RET;
- }
-
- //自然对数 (旧版),0无辐角
- Complex* Z_log2(Complex* x)
- {
- if( (*(x+_REZ)) == 0 )
- {
- printf("Can't ln(0+bi).\n");
- exit(1);
- }
- double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
- Complex* Z_RET = Z_init(log(r), atan((*(x+_IMZ))/(*(x+_REZ))));
- return Z_RET;
- }
- //自然对数
- Complex* Z_ln(Complex* x)
- {
- double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
- if(r ==0)
- {
- printf("Can't ln(0).\n");
- exit(1);
- }
- double arg = (*(Z_arg(x)+_REZ));
- Complex* Z_RET = Z_init(log(r), arg);
- return Z_RET;
- }
-
- //常用对数
- Complex* Z_log10(Complex* x)
- {
- Complex* lnx = Z_ln(x);
- Complex* Z_RET = Z_init((*(lnx+_REZ))/log(10), (*(lnx+_IMZ))/log(10));
- return Z_RET;
- }
-
- //次方函数
- Complex* Z_pow(Complex* x, Complex* y)
- {
- Complex* lnx = Z_ln(x);
- Complex* Z_RET = Z_exp(Z_mul(y, lnx));
- return Z_RET;
- }
-
- //开方函数
- Complex* Z_sqrt(Complex* x)
- {
- Complex* Z_RET = Z_pow(x, Z_init(0.5, 0));
- return Z_RET;
- }
-
- //四舍五入
- Complex* Z_round(Complex* x)
- {
- double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
- Complex* Z_RET = Z_init((*(x+_REZ))/r * (double)((int)r), (*(x+_IMZ))/r * (double)((int)r));
- return Z_RET;
- }
-
- //向下取整
- Complex* Z_floor(Complex* x)
- {
- double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
- Complex* Z_RET = Z_init((*(x+_REZ))/r * (double)(floor(r)), (*(x+_IMZ))/r * (double)((int)r));
- return Z_RET;
- }
-
- //向上取整
- Complex* Z_ceil(Complex* x)
- {
- double r = sqrt((*(x+_REZ))*(*(x+_REZ))+(*(x+_IMZ))*(*(x+_IMZ)));
- Complex* Z_RET = Z_init((*(x+_REZ))/r * (double)(ceil(r)), (*(x+_IMZ))/r * (double)((int)r));
- return Z_RET;
- }
-
- ////////////////////////////////// 定义复变三角函数
- //正弦函数
- Complex* Z_sin(Complex* x)
- {
- Complex* ix = Z_mul( Z_i, x);
- Complex* _ix = Z_mul(Z__i, x);
-
- Complex* Z_RET = Z_mul(Z_init(0, -0.5), Z_sub(Z_exp(ix),Z_exp(_ix)));
- return Z_RET;
- }
- //余弦函数
- Complex* Z_cos(Complex* x)
- {
- Complex* ix = Z_mul( Z_i, x);
- Complex* _ix = Z_mul(Z__i, x);
-
- Complex* Z_RET = Z_mul(Z_init(0.5, 0), Z_add(Z_exp(ix),Z_exp(_ix)));
- return Z_RET;
- }
- //正切函数
- Complex* Z_tan(Complex* x)
- {
- Complex* Z_RET = Z_div(Z_sin(x), Z_cos(x));
- return Z_RET;
- }
-
- //反正弦函数
- Complex* Z_asin(Complex* x)
- {
- Complex* sqrt1subz2 = Z_sqrt(Z_sub(Z_1, Z_mul(x, x)));
- Complex* Z_RET = Z_mul(Z_i, Z_ln(Z_sub(Z_mul(Z_i, x), sqrt1subz2)));
- return Z_RET;
- }
- //反余弦函数
- Complex* Z_acos(Complex* x)
- {
- Complex* sqrt1subz2 = Z_sqrt(Z_sub(Z_1, Z_mul(x, x)));
- Complex* Z_RET = Z_mul(Z__i, Z_ln(Z_sub(x, Z_mul(Z_i, sqrt1subz2))));
- }
- //反正切函数
- Complex* Z_atan(Complex* x)
- {
- Complex* s = Z_init(0,-0.5);
- Complex* Z_RET = Z_mul(s, Z_ln(Z_div(Z_sub(Z_i, x), Z_add(Z_i, x))));
- return Z_RET;
- }
-
- ////////////////////////////////// 定义复变双曲函数
- //双曲正弦函数
- Complex* Z_sinh(Complex* x)
- {
- Complex* _x = Z_init(-(*(x+_REZ)), -(*(x+_IMZ)));
- Complex* Z_RET = Z_mul(Z_init(0.5, 0), Z_sub(Z_exp(x), Z_exp(_x)));
- return Z_RET;
- }
- //双曲余弦函数
- Complex* Z_cosh(Complex* x)
- {
- Complex* _x = Z_init(-(*(x+_REZ)), -(*(x+_IMZ)));
- Complex* Z_RET = Z_mul(Z_init(0.5, 0), Z_add(Z_exp(x), Z_exp(_x)));
- return Z_RET;
- }
- //双曲正切函数
- Complex* Z_tanh(Complex* x)
- {
- Complex* Z_RET = Z_div(Z_sinh(x), Z_cosh(x));
- return Z_RET;
- }
-
- //反双曲正弦函数
- Complex* Z_asinh(Complex* x)
- {
- Complex* sqrtz2add1 = Z_sqrt(Z_add(Z_init(1,0), Z_mul(x, x)));
- Complex* Z_RET = Z_ln(Z_sub(x, sqrtz2add1));
- return Z_RET;
- }
- //反双曲余弦函数
- Complex* Z_acosh(Complex* x)
- {
- Complex* sqrtz2sub1 = Z_sqrt(Z_sub(Z_init(1,0), Z_mul(x, x)));
- Complex* Z_RET = Z_ln(Z_sub(x, sqrtz2sub1));
- return Z_RET;
- }
- //反双曲正切函数
- Complex* Z_atanh(Complex* x)
- {
- Complex* s1 = Z_init(1, 0);
- Complex* halfs1 = Z_init(0.5, 0);
- Complex* Z_RET = Z_mul(halfs1, Z_ln(Z_div(Z_add(s1, x), Z_sub(s1, x))));
- return Z_RET;
- }
复制代码
新第三方预告,升级版的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 |