# G'&G'' from J.mw converts compliance measurements J(t) into storage (G') and loss (G'') moduli, using the method described by RML Evans et al. (http://arxiv.org/abs/0812.2391).
#
# Manlio Tassieri, January 2009.
#
# The ImportData command launches a dialog for reading data from an external file into Maple. File formats include files of type Excel, Matlab, Image, Audio, Matrix Market, and Delimited. The file must contain two columns in the specific order: t, J(t).
# In order to proceed, two parameters need to be defined: J0; and eta.
#
> J := ImportData();
> J0:=Insert data!!;
> eta:=Insert data!!;
> with(ArrayTools);
> m := Size(J, 1);
> A := array(1 .. m-1);
> for i from 2 to m do A[i-1] := J[i, 2]-J[i-1, 2] end do;
> B := array(1 .. m-1);
> for i from 2 to m do B[i-1] := J[i, 1]-J[i-1, 1] end do;
> C := array(1 .. m-1);
> for i to m-1 do C[i] := A[i]/B[i] end do;
> Q := array(1 .. m);
> for i to m do Q[i] := exp(-I*omega*J[i, 1]) end do;
> T := array(1 .. m-1);
> for j from 2 to m do T[j-1] := Q[j-1]-Q[j] end do;
> Gp := Re(I*omega/(I*omega*J0+(1-exp(-I*omega*J[1, 1]))*(J[1, 2]-J0)/J[1, 1]+exp(-I*omega*J[m, 1])/eta+add(C[k]*T[k], k = 1 .. m-1)));
> Gpp := Im(I*omega/(I*omega*J0+(1-exp(-I*omega*J[1, 1]))*(J[1, 2]-J0)/J[1, 1]+exp(-I*omega*J[m, 1])/eta+add(C[k]*T[k], k = 1 .. m-1)));
> fmin := 1/J[m, 2];
> fmax := (m-1)/add(B[k], k = 1 .. m-1);
> with(plots); loglogplot([Gp, Gpp], omega = fmin .. fmax);