1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
|
####
# Command translation table from GeoGebra to MPReduce
# e.g. Expand[ 2(x+3) ] is translated to ExpandBrackets( 2*(x+3) )
###
Binomial.2=<< begin scalar n!!, k!!, result1!!, result2!!; n!!:=%0; k!!:=%1; result1!!:= if numberp(n!!) and numberp(k!!) and k!!>n!! then 0 else factorial(n!!)/(factorial(k!!)*factorial(n!!-k!!)); let list(gamma(~w+1) => factorial(w)); result2!!:=result1!!; clear {gamma(~w+1) => factorial}; return result2!! end >>
BinomialDist.4=<< begin scalar n!!, p!!, k!!; n!!:=%0; p!!:=%1; k!!:=%2;return if %3='true then for i:=1:floor(k!!) sum binomial(n!!,i)*p!!^i*(1-p!!)^(n!!-i) else binomial(n!!,k!!)*p!!^k!!*(1-p!!)^(n!!-k!!) end >>
Cauchy.3=1/2+1/pi*atan(((%2)-(%1))/(%0))
CFactor.1=<<on complex$ off combinelogs$ begin scalar factorlist!!; factorlist!!:=factorize(%0); return part(!*hold((for each x in factorlist!! collect (if arglength(x)<0 or part(x,0) neq 'list then x else if part(x,2)=1 then part(x,1) else part(x,0):=**))),0):=* end >>
CFactor.2=<<on complex$ off combinelogs$ begin scalar factorlist!!; korder %1; factorlist!!:=factorize(%0); korder nil;return part(!*hold(for each x in factorlist!! collect (if arglength(x)<0 or part(x,0) neq 'list then x else if part(x,2)=1 then part(x,1) else part(x,0):=**)),0):=* end >>
ChiSquared.2=igamma((%0)/2,(%1)/2)/gamma((%0)/2)
Coefficients.1=reverse(coeff(%0,ggbcasvarx))
Coefficients.2=reverse(coeff(%0,%1))
CommonDenominator.2=lcm(den(%0),den(%1))
Covariance.2=<<begin scalar ret, tmpmean1, tmpmean2, tmplength; ret:=0$ tmpmean1:=0$ tmpmean2:=0$ tmplength:=length(%0)$ tmpmean1:=1/tmplength*for i:=1:tmplength sum part(%0,i) $ tmpmean2:=1/tmplength*for i:=1:tmplength sum part(%1,i)$ return 1/tmplength*for i:=1:tmplength sum (part(%0,i)-tmpmean1)*(part(%1,i)-tmpmean2) end>>
Covariance.1=<<begin scalar ret, tmpmean1, tmpmean2, tmplength; ret:=0$ tmpmean1:=0$ tmpmean2:=0$ tmplength:=length(%0)$ tmpmean1:=1/tmplength*for i:=1:tmplength sum part(part(%0,i),1) $ tmpmean2:=1/tmplength*for i:=1:tmplength sum part(part(%0,i),2)$ return 1/tmplength*for i:=1:tmplength sum (part(part(%0,i),1)-tmpmean1)*(part(part(%0,i),2)-tmpmean2) end>>
Cross.2=cross(%0,%1)
CSolutions.1=<<on complex$ flattenlist(for each element!! in mycsolve(%0,ggbcasvarx) collect map(rhs,element!!))>>
CSolutions.2=<<on complex$ flattenlist(for each element!! in mycsolve(%0,%1) collect map(rhs,element!!))>>
CSolve.1=<<on complex$ flattenlist(mycsolve(%0,ggbcasvarx))>>
CSolve.2=<<on complex$ flattenlist(mycsolve(%0,%1))>>
Decimal.1=<<on rounded$ (%0)>>
Degree.1=deg(%0,ggbcasvarx)
Degree.2=deg(%0,%1)
Delete.1= << clear %0; 'true>>
Denominator.1=den(%0)
Derivative.1=df(%0,ggbcasvarx)
Derivative.2=df(%0,%1)
Derivative.3=df(%0,%1,%2)
Determinant.1=<<tmpmat!!:=%0; det(tmpmat!!)>>
Dimension.1=length(%0)
Div.2=div(%0,%1)
Division.2=list(div(%0,%1),mod!!(%0,%1))
Divisors.1=<<off combinelogs$ if numberp(%0) then if (%0)=1 then 1 else for each i in map(part(~w,2)+1,factorize(%0)) product i else '?>>
DivisorsList.1=<<off combinelogs$ if numberp(%0) then if %0=1 then list(1) else <<begin scalar divlist!!, return!!; divlist!!:=for each x in factorize(%0) collect for i:=0:part(x,2) collect part(x,1)^i; return!!:=part(divlist!!,1); for i:=2:length(divlist!!) do return!!:=for each x in part(divlist!!,i) join for each y in return!! collect x*y; return mysort(return!!) end>> else '? >>
DivisorsSum.1=<<off combinelogs$ if numberp(%0) then if %0=1 then 1 else for each x in factorize(%0) product (part(x,1)^(part(x,2)+1)-1)/(part(x,1)-1) else '? >>
Dot.2=dot(%0,%1)
Element.2=part(%0,%1)
Element.3=<<clear input!!; input!!:=%0; if arglength(input!!)>-1 and part(input!!,0)='mat then input!!(%1,%2) else for i:=%1:%2 collect part(input!!,i)>>
Expand.1=<<clear tmp!!; off factor, pri, combinelogs$ on div, expandlogs$ tmp!!:=%0; off factor, pri, combinelogs$ on div, expandlogs$ tmp!!>>
ExpandComplex.1=<<clear tmp!!; off factor, pri, combinelogs$ on div, complex, expandlogs$ tmp!!:=%0; off factor, pri, combinelogs$ on div, expandlogs$ tmp!!>>
Exponential.2=1-exp(-(%0)*(%1))
Factor.1=<<off combinelogs$ begin scalar factorlist!!, tmpexp!!; if numberp(den(%0)) then <<factorlist!!:=factorize(%0); return part(!*hold((for each x in factorlist!! collect (if arglength(x)<0 or part(x,0) neq \\'list then x else if part(x,2)=1 then part(x,1) else part(x,0):=**))),0):=*>> else <<on factor; tmpexp!!:=(%0); on factor; return tmpexp!! >> end >>
Factor.2=<<off combinelogs$ begin scalar factorlist!!; korder append(list(%1),varorder!!); factorlist!!:=factorize(%0); korder varorder!!;return part(!*hold(for each x in factorlist!! collect (if arglength(x)<0 or part(x,0) neq \\'list then x else if part(x,2)=1 then part(x,1) else part(x,0):=**)),0):=* end >>
Factors.1=<<off combinelogs$ off complex, rounded; for each x in factorize(%0) collect if arglength(x)<0 or part(x,0) neq \\'list then x:=list(x,1) else x >>
FDistribution.3=betaRegularized((%0)/2,(%1)/2,(%0)*(%2)/((%0)*(%2)+%1))
First.1=list(first(%0))
First.2=<<begin scalar list!!; list!!:=%0; return if length(list!!)<=%1 then list!! else for i:=1:%1 collect part(list!!,i) end>>
FractionalPart.1=if (%0)>0 then %0-floor(%0) else %0-ceiling(%0)
#These implementations follow the one in GeoGebra
FitExp.1=<<on rounded, roundall, numval; begin scalar p1!!, p2!!, input!!, sigmax!!, sigmay!!, sigmaxy!!, sigmax2!!, length!!, denominator!!, xlist!!, ylist!!; input!!:=mattolistoflists(%0); xlist!!:=map(part(~w!!,1), input!!); ylist!!:=map(log,map(part(~w!!,2), input!!)); length!!:=length(ylist!!); sigmax!!:=for each i in xlist!! sum i; sigmay!!:= for each i in ylist!! sum i; sigmax2!!:= for each i in xlist!! sum i^2; sigmaxy!!:=for i:=1:length!! sum part(xlist!!,i)*part(ylist!!,i);denominator!!:= length!!*sigmax2!!-sigmax!!**2; p2!!:=(length!!*sigmaxy!!-sigmax!!*sigmay!!)/denominator!!; p1!!:= exp((sigmay!!*sigmax2!!-sigmax!!*sigmaxy!!)/denominator!!); return p1!!*exp(x*p2!!) end>>
FitLog.1=<<on rounded, roundall, numval; begin scalar p1!!, p2!!, input!!, sigmax!!, sigmay!!, sigmaxy!!, sigmax2!!, length!!, denominator!!, xlist!!, ylist!!; input!!:=mattolistoflists(%0); xlist!!:=map(log,map(part(~w!!,1), input!!)); ylist!!:=map(part(~w!!,2), input!!); length!!:=length(ylist!!); sigmax!!:=for each i in xlist!! sum i; sigmay!!:= for each i in ylist!! sum i; sigmax2!!:= for each i in xlist!! sum i^2; sigmaxy!!:=for i:=1:length!! sum part(xlist!!,i)*part(ylist!!,i);denominator!!:= length!!*sigmax2!!-sigmax!!**2; p2!!:=(length!!*sigmaxy!!-sigmax!!*sigmay!!)/denominator!!; p1!!:= (sigmay!!*sigmax2!!-sigmax!!*sigmaxy!!)/denominator!!; return p1!!+log(x)*p2!! end >>
FitPoly.2=<< clear tmpx!!, tmpy!!; on rounded, roundall, numval; begin scalar xvec!!, yvec!!, input!!; input!!:= mattolistoflists(%0); xvec!!:=map(part(~w!!,1), input!!); yvec!!:= map(part(~w!!,2), input!!); tmpx!!:=vandermonde(xvec!!); tmpx!!:=sub\\_matrix(tmpx!!,for i:=1:length(input!!) collect i, for i:=1:(%1+1) collect i); tmpy!!:=listtocolumnvector(yvec!!);tmpx!!:=(1/(tp(tmpx!!)*tmpx!!))*tp(tmpx!!); tmpy!!:=tmpx!!*tmpy!!; return for i:=1:part(length(tmpy!!),1) sum tmpy!!(i,1)*x^(i-1) end>>
FitPow.1=<<on rounded, roundall, numval; begin scalar p1!!, p2!!, input!!, sigmax!!, sigmay!!, sigmaxy!!, sigmax2!!, length!!, denominator!!, xlist!!, ylist!!; input!!:=mattolistoflists(%0); xlist!!:=map(log,map(part(~w!!,1), input!!)); ylist!!:=map(log,map(part(~w!!,2), input!!)); length!!:=length(ylist!!); sigmax!!:=for each i in xlist!! sum i; sigmay!!:= for each i in ylist!! sum i; sigmax2!!:= for each i in xlist!! sum i^2; sigmaxy!!:=for i:=1:length!! sum part(xlist!!,i)*part(ylist!!,i);denominator!!:= length!!*sigmax2!!-sigmax!!**2; p2!!:=(length!!*sigmaxy!!-sigmax!!*sigmay!!)/denominator!!; p1!!:= exp((sigmay!!*sigmax2!!-sigmax!!*sigmaxy!!)/denominator!!); return p1!!*x^p2!! end >>
#FitSin
Gamma.3=(((%1)*(%2))^(%0))/(%0)*kummerm(%0,%0+1,-(%1)*(%2))/beta(%0)
GCD.2=<<begin scalar gcd!!; off rounded, roundall, numval; gcd!!:=gcd(%0,%1); if numeric!!=0 then off rounded, roundall, numval; return gcd!! end>>
GCD.1=<<begin scalar gcd!!; off rounded, roundall, numval; gcd!!:=0; for each term in (%0) do gcd!!:=gcd(gcd!!,term); if numeric!!=0 then off rounded, roundall, numval; return gcd!! end >>
#GetPrecision.1
HyperGeometric.5=<<begin scalar m,kk,ng,n; m:=%1$ ng:=%0$ n:=%2$ kk:=%3$ return if %4=true then sum(binomial(m,k)*binomial((ng-m),(n-k))/binomial(ng,n),k,0,kk) else binomial(m,kk)*binomial((ng-m),(n-kk))/binomial(ng,n) end>>
Identity.1=<<make\\_identity(%0)>>
Imaginary.1=impart(%0)
ImplicitDerivative.3=-df(%0,%1)/df(%0,%2)
Integral.1=<<begin scalar integral!!; let intrules!!; integral!!:=int(%0,ggbcasvarx); clearrules intrules!!; return if freeof(integral!!,\\'int) then part(list(integral!!,newarbconst()),0):=+ else \\'? end>>
Integral.2=<<begin scalar integral!!; let intrules!!; integral!!:=int(%0,%1); clearrules intrules!!; return if freeof(integral!!,\\'int) then part(list(integral!!,newarbconst()),0):=+ else \\'? end>>
Integral.3=<<begin scalar integral!!; let intrules!!; integral!!:=int(%0,ggbcasvarx,%1,%2); clearrules intrules!!; return if freeof(integral!!,\\'int) then integral!! else \\'? end>>
Integral.4=<<begin scalar integral!!; let intrules!!; integral!!:=int(%0,%1,%2,%3); clearrules intrules!!; return if freeof(integral!!,\\'int) then integral!! else \\'? end>>
IntegralBetween.4=<< begin scalar integral!!; let intrules!!; integral!!:=int(%0-(%1),ggbcasvarx,%2,%3); clearrules intrules!!; return if freeof(integral!!,\\'int) then integral!! else \\'? end >>
IntegralBetween.5=<< begin scalar integral!!; let intrules!!; integral!!:=int(%0-(%1),%2,%3,%4); clearrules intrules!!; return if freeof(integral!!,\\'int) then integral!! else \\'? end >>
Intersect.2=<<begin scalar eqn1!!, eqn2!!; eqn1!!:=%0; eqn2!!:=%1; if freeof(eqn1!!,=) then eqn1!!:= eqn1!!=ggbcasvary; if freeof(eqn2!!,=) then eqn2!!:= eqn2!!=ggbcasvary; return flattenlist(for each element!! in mysolve(list(eqn1!!,eqn2!!),list(ggbcasvarx, ggbcasvary)) collect map(rhs,element!!)) end>>
Invert.1=1/(%0)
IntegerPart.1=if %0>0 then floor(%0) else ceiling(%0)
IsPrime.1=if primep(%0) and (%0)>1 then true else false
#IsBound.1=if << symbolic; p!!:=isbound!!('%0); algebraic; p!!>>=1 then 'true else 'false
Last.1=<<begin scalar list!!; list!!:=%0; return list(part(list!!,length(list!!))) end >>
Last.2=<<begin scalar list!!; list!!:=%0; return if length(list!!)<=%1 then list!! else for i:=1:%1 collect part(list!!,length(list!!)-%1+i) end >>
LCM.1=<<begin scalar lcm!!; off rounded, roundall, numval; lcm!!:=1; for each term in (%0) do lcm!!:=lcm(lcm!!,term); if numeric!!=0 then off rounded, roundall, numval; return lcm!! end >>
LCM.2=<<begin scalar lcm!!; off rounded, roundall, numval; lcm!!:=lcm(%0,%1); if numeric!!=0 then off rounded, roundall, numval; return lcm!! end>>
LeftSide.1=<<begin scalar input!!; input!!:=%0; return if arglength(input!!) and part(%0,0)='list then map(lhs,input!!) else lhs(input!!) end>>
Length.3=int(sqrt(1+df(%0,ggbcasvarx)^2),ggbcasvarx,%1,%2)
Length.4=int(sqrt(1+df(%0,%1)^2),%1,%2,%3)
Limit.2=<<begin scalar input!!,limitabove!!, limitbelow!!; input!!:=(%0); return if (%1)=infinity or (%1)=-infinity then limit(input!!, ggbcasvarx, %1) else <<limitabove!!:=limit!+(input!!,ggbcasvarx,%1); limitbelow!!:=limit!-(input!!,ggbcasvarx,%1); if limitabove!!=limitbelow!! then limitabove!! else \\'?>> end>>
Limit.3=<<begin scalar input!!,limitabove!!, limitbelow!!; input!!:=(%0); return if (%2)=infinity or (%2)=-infinity then limit(input!!, %1, %2) else <<limitabove!!:=limit!+(input!!,%1,%2); limitbelow!!:=limit!-(input!!,%1,%2); if limitabove!!=limitbelow!! then limitabove!! else \\'?>> end>>
LimitAbove.2=limit!+(%0,ggbcasvarx,%1)
LimitAbove.3=limit!+(%0,%1,%2)
LimitBelow.2=limit!-(%0,ggbcasvarx,%1)
LimitBelow.3=limit!-(%0,%1,%2)
Max.N=max(%)
MatrixRank.1=rank(%0)
Mean.1=<<begin scalar list!!; list!!:=%0$ return 1/length(list!!)*for i:=1:length(list!!) sum part(list!!,i) end>>
Median.1=<<begin scalar list!!; list!!:=%0$ list!!:= mysort list!!$ return if remainder(length(list!!),2)=0 then (part(list!!,length(list!!)/2)+part(list!!,1+length(list!!)/2))/2 else part(list!!,(length(list!!)+1)/2) end>>
Min.N=min(%)
Mod.2=mod!!(%0,%1)
NextPrime.1=if %0<2 then 2 else nextprime(%0)
NIntegral.3=<<on numval, roundall$ num\\_int(%0,ggbcasvarx=((%1) .. (%2))) >>
NIntegral.4=<<on numval, roundall$ num\\_int(%0,%1=((%2) .. (%3))) >>
Normal.3=1/2*(1+erf((%2-(%0))/sqrt(2*(%1)^2)))
nPr.2=factorial(%0)/factorial(%0-%1)
NRoot.2=(%0)^(1/(%1))
NSolve.1=<<on rounded, numval, roundall$ num\\_solve(%0,ggbcasvarx, iterations=10000) >>
NSolve.2=<<on rounded, numval, roundall$ num\\_solve(%0,%1, iterations=10000) >>
NSolutions.1=<<on rounded, numval, roundall$ map(rhs,num\\_solve(%0,ggbcasvarx, iterations=10000)) >>
NSolutions.2=<<on rounded, numval, roundall$ map(rhs,num\\_solve(%0,%1, iterations=10000)) >>
Numerator.1=num(%0)
Numeric.1=<<numeric!!:=1; on rounded, roundall, numval$ if printprecision!!<=16 then <<print\\_precision(printprecision!!)$ %0>> else <<precision(printprecision!!)$ print\\_precision(printprecision!!)$ %0 >> >>
Numeric.2=<<numeric!!:=1; on rounded, roundall, numval$ if %1<=16 then <<print\\_precision(%1)$ %0>> else <<precision(%1)$ print\\_precision(%1)$ %0 >> >>
OrthogonalVector.1=if arglength(%0)>-1 and part(%0,0)='list then list(-part(%0,2),part(%0,1)) else if arglength(%0)>-1 and part(%0,0)='mat then part mat((0,-1),(1,0))*(%0)
PartialFractions.1=part(pf(%0,ggbcasvarx),0):=+
PartialFractions.2=part(pf(%0,%1),0):=+
Pascal.4=if %3=true then betaRegularized(%0,1+floor(%2),%1) else (1-(%1))^(%2)*(%1)^(%0)*binomial(%0+%2-1,%0-1)
Poisson.3=if %2=true then exp(-(%0))*for i:=0:(%1) sum (%0)^i/factorial(floor(i)) else (%0)^(%1)/factorial(floor(%1))*exp(-%0)
PreviousPrime.1=<<begin scalar tmp!!;return if (%0)>2 then <<tmp!!:=%0-1; while not(primep(tmp!!)) do tmp!!:=tmp!!-1; tmp!!>> else '? end>>
PrimeFactors.1=<<off combinelogs, rounded; if (%0)=1 then {} else begin scalar factorlist!!; factorlist!!:=factorize(%0); factorlist!!:= for each x!! in factorlist!! collect for i:=1:part(x!!,2) collect part(x!!,1); return mkdepthone(factorlist!!) end>>
Product.1=<< begin scalar input!!; input!!:=%0; return for i:=1:length(input!!) product part(input!!,i) end >>
Product.4=prod(%0,%1,%2,%3)
#Prog.1=<<%0>>
#Prog.2=<<begin scalar %0; return %1 end>>
MixedNumber.1=<<begin scalar result!!, input!!; off pri; input!!:=%0; if part(input!!,0) neq quotient then result!!:=list(input!!,0) else <<arguments!!:=(part(abs(input!!),0):=list); result!!:=list(sign(input!!)*div(first(arguments!!), second(arguments!!)), mod!!(first(arguments!!), second(arguments!!))/second(arguments!!))>>; return if part(result!!,2)=0 then part(result!!,1) else if part(result!!,1)=0 then sign(input!!)*part(result!!,2) else if input!!<0 then part(result!!,0):=- else part(result!!,0):=+ end>>
Random.2=random(%1-%0+1)+%0
RandomBinomial.2=<<on rounded, roundall, numval; for each x in for i:=1:%0 collect random(10000000)/10000000 sum if (x<%1) then 1 else 0 >>
RandomElement.1=part(%0,random(length(%0))+1)
RandomPoisson.1=<<on rounded, roundall, numval; begin scalar L!!, k!!, p!!; L!!:=exp(-%0); k!!:=0; p!!:=1; repeat <<k!!:=k!!+1; p!!:=p!!*(random(10000000)/10000000)>> until p!!<=L!!; return k!!-1 end>>
RandomNormal.2=<<on rounded, roundall, numval; %0+(%1)*cos(2*pi*random(10000000)/10000000)*sqrt(-2*log(random(10000000)/10000000)) >>
RandomPolynomial.3=<<begin scalar a, b, min!!, max!!; min!!:=myround(%1); max!!:=myround(%2); a:=for i:=0:%0-1 sum (random(max!!-(min!!)+1)+(min!!))*ggbcasvarx^i; return a+ggbcasvarx^(%0)*if min!!<=0 and max!!>0 then <<b:=random(max!!-(min!!))+(min!!); if b>=0 then b+1 else b>> else random(max!!-(min!!)+1)+min!! end>>
RandomPolynomial.4=<<begin scalar a, b, min!!, max!!; min!!:=myround(%2); max!!:=myround(%3); a:=for i:=0:%1-1 sum (random(max!!-min!!+1)+min!!)*(%0)^i; return a+(%0)^(%1)*if min!!<=0 and max!!>0 then <<b:=random(max!!-min!!)+min!!; if b>=0 then b+1 else b>> else random(max!!-min!!+1)+min!! end>>
Rationalize.1=<<off rounded; %0 >>
Real.1=repart(%0)
RightSide.1=<<begin scalar input!!; input!!:=%0; return if arglength(input!!) and part(%0,0)='list then map(rhs,input!!) else rhs(input!!) end>>
Root.1=flattenlist(mysolve(%0,ggbcasvarx))
ReducedRowEchelonForm.1=<<begin scalar tmpcolumn!!; clear tmpmatrix!!; tmpmatrix!!:=%0$ tmpcolumn!!:=1$ for i:=1:row\\_dim(tmpmatrix!!) do <<if tmpcolumn!!<column\\_dim(tmpmatrix!!) and tmpmatrix!!(i,tmpcolumn!!)=0 then while (tmpcolumn!!<=column\\_dim(tmpmatrix!!) and tmpmatrix!!(i,tmpcolumn!!)=0 and i<=row\\_dim(tmpmatrix!!)) do << for j:=i+1:row\\_dim(tmpmatrix!!) do if (j<=column\\_dim(tmpmatrix!!) and tmpmatrix!!(i,j) neq 0) then tmpmatrix!!:=swap\\_rows(tmpmatrix!!,tmpcolumn!!, j)$ if (tmpmatrix!!(i,tmpcolumn!!)=0) then tmpcolumn!!:=tmpcolumn!!+1 >>$ if tmpcolumn!!<=column\\_dim(tmpmatrix!!) then if tmpmatrix!!(i, tmpcolumn!!) neq 0 then << tmpmatrix!!:=pivot(tmpmatrix!!,i,tmpcolumn!!); tmpmatrix!!:=mult\\_rows(tmpmatrix!!,i,1/tmpmatrix!!(i,tmpcolumn!!))$ tmpcolumn!!:=tmpcolumn!!+1 >>; >>$ return tmpmatrix!! end>>
Sample.2=<< begin scalar list!!; list!!:=%0; return for i:=1:%1 collect part(list!!,1+random(length(list!!))) end >>
Sample.3=<< begin scalar list!!; list!!:=%0; return if %2=true then for i:=1:%1 collect part(list!!,1+random(length(list!!))) else <<list!!:=shuffle(list!!); for i:=1:%1 collect part(list!!,i)>> end >>
SampleVariance.1=<< begin scalar n!!, list!!; list!!:=%0; n!!:=length(list!!); return 1/(n!!-1)*(for each i in list!! sum i^2)-1/(n!!^2-n!!)*(for each i in list!! sum i)^2 end >>
SampleSD.1=<< begin scalar n!!, list!!; list!!:=%0; n!!:=length(list!!); return sqrt(1/(n!!-1)*(for each i in list!! sum i^2)-1/(n!!^2-n!!)*(for each i in list!! sum i)^2) end >>
Sequence.1=<<listofliststomat(for i:=1:(%0) collect i)>>
Sequence.4=<<listofliststomat(<<begin scalar %1; return for %1:=(%2):(%3) collect (%0) end>>)>>
Sequence.5=<<listofliststomat(<<begin scalar %1; return for %1:=(%2) step (%4) until (%3) collect (%0) end>>)>>
SetSignificantNumbersNumeric.1=printprecision!!:=%0
SD.1=<<begin scalar tmpmean, tmplist; tmplist:=%0$ tmpmean:=0$ tmpmean:= (1/length(tmplist))*for i:=1:length(tmplist) sum part(tmplist,i)$ return sqrt((1/length(tmplist))*for i:=1:length(tmplist) sum (part(tmplist,i)^2-tmpmean^2)) end>>
Shuffle.1=shuffle(%0)
Simplify.1=<<on combinelogs; trigsimp(%0, combine)>>
#SimplifyFull.1=trigsimp(%0, combine)
Solutions.1=flattenlist(for each element!! in mysolve(%0,ggbcasvarx) collect map(rhs,element!!))
Solutions.2=flattenlist(for each element!! in mysolve(%0,%1) collect map(rhs,element!!))
Solve.1=flattenlist(mysolve(aeval(%0),ggbcasvarx))
Solve.2=<< begin scalar equations!!; equations!!:=%0; if arglength(equations!!)>-1 and part(equations!!,0)='list then equations!!:=mkdepthone(equations!!); return flattenlist(mysolve(aeval(equations!!),%1)) end >>
SolveODE.1=<<begin scalar tmpret, tmpeqn; tmpeqn:=%0$ if freeof(tmpeqn,=) then tmpret:=odesolve(df(ggbcasvary,ggbcasvarx)=tmpeqn,ggbcasvary,ggbcasvarx) else tmpret:=odesolve(tmpeqn,ggbcasvary,ggbcasvarx)$ return if length(tmpret)=1 then first(tmpret) else tmpret end>>
SolveODE.3=<<begin scalar tmpret, tmpeqn; tmpeqn:=%0$ if freeof(tmpeqn,=) then tmpret:=odesolve(df(%1,%2)=tmpeqn,%1,%2) else tmpret:=odesolve(tmpeqn,%1,%2)$ return if length(tmpret)=1 then first(tmpret) else tmpret end>>
Substitute.2=<<if keepinput!!=1 then <<keepinput!!:=2; sub(%1, !*hold(%0)) >> else begin scalar rulelist!!, replacements!!; replacements!!:=%1; if arglength(replacements!!)>-1 and part(replacements!!,0)='list then 0 else replacements!!:=list(replacements!!); rulelist!!:= for each element in replacements!! collect part(element,0):=replaceby; return %0 where rulelist!! end>>
#Substitute.3=if hold!!=0 then sub(%1=%2,%0) else sub(%1=%2,!*hold(%0))
Substitute.3=<<if keepinput!!=1 then <<keepinput!!:=2; sub(%1=%2, !*hold(%0)) >> else begin scalar rulelist!!; rulelist!!:=list(%1,%2); rulelist!!:=list(part(rulelist!!,0):=replaceby); return %0 where rulelist!! end>>
#SubstituteParallel.2=if hold!!=0 then sub(%1,%0) else sub(%1,!*hold(%0))
Sum.1=<<begin scalar input!!; input!!:=%0;return for i:=1:length(input!!) sum part(input!!,i) end>>
Sum.4=<<begin scalar sm!!; sm!!:=if %2=-infinity and %3=infinity then limit(limit(sum(%0,%1,k!!,m!!),k!!,-infinity),m!!,infinity) else if %2=-infinity then limit(sum(%0,%1,k!!,%3),k!!,-infinity) else if %3=infinity then limit(sum(%0,%1,%2,k!!),k!!,infinity) else sum(%0,%1,%2,%3); return if freeof(sm!!,'sum) then sm!! else '? end>>
Take.3=<<begin scalar tmpret, list!!; list!!:=%0; tmpret:=list()$ for i:=%1:%2 do tmpret:=part(list!!,i).tmpret$ return reverse(tmpret) end>>
TaylorSeries.3=<<on div$ off pri$ taylortostandard(taylor(%0,ggbcasvarx,%1,%2))>>
TaylorSeries.4=<<on div$ off pri$ taylortostandard(taylor(%0,%1,%2,%3))>>
TDistribution.2=<<begin scalar t!!,n!!; n!!:=%0; t!!:=%1 ;beta!Regularized(((t!!+sqrt(t!!^2+n!!)/(2*sqrt(t!!^2+n!!)),n!!/2,n!!/2)
ToComplex.1=<<begin scalar list!!; list!!:=%0; return part(list!!,1)+i*part(list!!,2) end >>
ToExponential.1=<< begin scalar real!!, imag!!, input!!, mag!!, phi!!; input!!:=%0; if arglength(input!!)>-1 and part(input!!,0)='list then <<real!!:= part(input!!,1); imag!!:=part(input!!,2)>> else <<real!!:= repart(input!!); imag!!:=impart(input!!)>>;mag!!:=sqrt(real!!^2+imag!!^2); phi!!:=myatan2(imag!!,real!!); return if mag!!=0 then 0 else if phi!!=0 then mag!! else if mag!!=1 then part(list(i*phi!!),0):=exp else part(list(mag!!,part(list(i*phi!!),0):=exp),0):=* end>>
ToPolar.1=<< begin scalar input!!; input!!:=%0; return if arglength(input!!)>-1 and part(input!!,0)='list then if length(input!!)=2 then part(list(sqrt(part(input!!,1)^2+part(input!!,2)^2),myatan2(part(input!!,2),part(input!!,1))),0):=polartopoint!\u00a7 else '? else part(list(sqrt(repart(input!!)^2+impart(input!!)^2),myatan2(impart(input!!),repart(input!!))),0):=polartopoint!\u00a7 end >>
ToPoint.1=<< begin scalar input!!; input!!:=%0; return part(if arglength(input!!)>-1 and part(input!!,0)='list then input!! else list(repart(input!!),impart(input!!)),0):=point!\u00a7 end >>
Transpose.1=tp(<<listofliststomat(%0)>>)
#http://reduce-algebra.com/docs/trigsimp.pdf
TrigExpand.1=sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0)))
TrigExpand.2=sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0), part(%1,0)))
TrigExpand.3=<< begin scalar input1!!; input1!!:=sub(list(ggbcasvarx=x),%2); return sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0), input1!!, part(%1,0))) end >>
TrigExpand.4=<< begin scalar input1!!, input2!!; input1!!:=sub(list(ggbcasvarx=x),%2); input2!!:=sub(list(ggbcasvarx=x),%3); return sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0), input1!!, input2!!, part(%1,0))) end >>
TrigSimplify.1=sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0),compact))
TrigCombine.1=sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0),combine))
TrigCombine.2=sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0),part(%1,0),combine))
Unique.1=mkset(%0)
UnitOrthogonalVector.1=<<begin; clear mat!!,norm!!; input!!:=%0;return if arglength(input!!)>-1 and part(input!!,0)='list then if length(input!!) neq 2 then '? else <<norm!!:=sqrt(<<for each i in input!! sum i^2>>); list(-part(input!!,2)/norm!!,part(input!!,1)/norm!!) >> else if length(input!!)=list(2,1) then <<norm!!:=sqrt(<<for i:=1:row\\_dim(input!!) sum input!!(i,1)^2>>); norm!!*mat((0,-1),(1,0))*input!! >> else if length(input!!)=list(1,2) then <<norm!!:=sqrt(<<for i:=1:column\\_dim(input!!) sum input!!(1,i)^2>>); norm!!*input!!*mat((0,-1),(1,0)) >> else '? end >>
UnitVector.1=<<begin; clear input!!; input!!:=%0; return if arglength(input!!)>-1 and part(input!!,0)='list then map(~w/sqrt(<<for each i in input!! sum i^2>>),input!!) else input!!/sqrt(<<for i:=1:row\\_dim(input!!) sum input!!(i,1)^2>>) end>>
Variance.1=<<begin scalar x!!,n!!,xd!!; x!!:=%0$ n!!:=length(x!!)$ xd!!:=1/n!!*for each i in x!! sum i; return 1/n!!* for each i in x!! sum (i-xd!!)**2 end>>
Weibull.3=1-exp(-(%0)*(%2)^(%1))
Zipf.4=<<begin scalar s; s:= %1; return if %3=true then harmonic(%2,s)/harmonic(%0,s) else 1/((%2)^s*harmonic(%0,s)) end>>
|