I would like to know if there is a way to export differential equation
solution obtained through Mathematica to microsoft excel. There are several
data processing things that I want to know, that simply plotting the
solution in Mathematica won't suffice.
I have a system of differential equations like so:
sol3=NDSolve[{p'[t]=-0.0491*p[t]-0.0089*p[t],n'[t]=0.0491*p[t]+(0.0491-0.0089)*n[t],p[0]=25000,n[0]=0},{p,n},{t,0,100}]
When I plotted it in Mathematica using this code:
Plot[Evaluate[{n[t]+p[t]}/.First[sol3]],{t,0,100}]
I get a exponential increasing function plotting number vs. time.
What I want is the values of both the time vector and number vector, and I
want to copy and paste them into two columns in microsoft excel.
I tried using:
Export["newdata.dat", Evaluate[{n[t]+p[t]}/.First[sol3]]
But this gives me a .dat file with the time and number vectors all scrambled
up.
My question is:
(1) is there a better way to tell Mathematica what I want to export, because
I don't think Evaluate[{n[t]+p[t]}/.First[sol3] is the correct term to
convey what I want
(2) How do I properly export differential equation solutions that I can
graph but not display in Mathematica, to spreadsheets software like
Microsoft Excel?
Thank you all very much.
Hi,
obviously the output of NDSolve is a numerical function not an
anayltical one. Therefore, the best you can do is to create a table with
p and t values. This data you may the export e.g. to a CSV (or other
formated), file that can be read by EXCEL.
Here is an example:
sol = f /. NDSolve[{f' [t] == f[t], f[0] == 1}, f, {t, 0, 1}][[1]]
dat = Table[{t, sol[t]}, {t, 0, 1, .1}]
Export["d:/tmp/t.dat", dat, "CSV"]
Daniel
NDSolve returns InterpolatingFunctions, a concept I think is not known
to Excel, so when exporting to Excel, you need to extract an array of
numeric values, which are very straightforward to export to excel.
> (2) How do I properly export differential equation solutions that I can
> graph but not display in Mathematica, to spreadsheets software like
> Microsoft Excel?
A very simple approach is this:
Export[
ToFileName[{$HomeDirectory, "Desktop"}, "nplusp.xls"],
Table[{t, n[t] + p[t]} /. First[sol3], {t, 0, 100}]
]
of course you might want to adopt the sampling to your needs.
If you want to reflect the sampling points the values NDSolve was
actually using, you can use the function
InterpolatingFunctionCoordinates in the package
"DifferentialEquations`InterpolatingFunctionAnatomy`" to get a list of
the values NDSolve used:
Needs["DifferentialEquations`InterpolatingFunctionAnatomy`"]
Export[
ToFileName[{$HomeDirectory, "Desktop"}, "nplusp.xls"],
Map[
{#, p[#] + n[#] /. sol3[[1]]} &,
InterpolatingFunctionCoordinates[p /. sol3[[1]]][[1]]
]
]
hth,
albert