From: dh on


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



Yun Zhao wrote:

> Hi everyone,

>

> 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.

>

>



From: Albert Retey on
Am 08.01.2010 10:17, schrieb Yun Zhao:
> Hi everyone,
>
> 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

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