Items tagged with numeric numeric Tagged Items Feed

Is it possible to use an option similar to range when using lsode method for dsolve? The ODEs I am trying to solve is stiff and will not work with the flag stiff=true or with method=rosenbrock unless i set Digits:=20. I want to avoid doing that as much as possible, since I believe wit will be very taxing, computationally. I have a very large systeom to solve. I found that method=lsode works with the default Digits=15. 


However I need to have the solutions in a given range stored for future access and manipulations. Using range gives me an error: 

Error, (in dsolve/numeric/an_args/lsode) lsode keyword was range, optional keyword must be one of 'ctrl', 'initial', 'itask', 'output', 'procedure', 'procvars', 'start', 'number', 'abserr', 'relerr', 'maxfun', 'minstep', 'maxstep', 'initstep', 'startinit', 'implicit', 'optimize', 'complex'


I cannot figure out how to use range or something similar with lsode. Anyone knows? 

Hi! I have to solve a very large system of ODEs for a set of functions that can be indexed with two integers, n and l, call them f[n,l](x), where n ranges from 1 to an order 1000 number and l ranges from 1 to an order 10 number. 

What is the best strategy in dsolve, keeping in mind I will only need to have quick access to the values of the first few such functions, say f[0,0](x) and f[0,1](x) for any given x in a given range. I dont need to store the rest, and trying to store all of them actually will give me a warning about length of output exceeds limit of 1000000. So, having maple output the result of dsolve in a procedural form seems to be what I want. However in doing so, for evey value of x i call the solving procedure maple will solve the system each time, thus taking a long time. 


My dilema is: to save storage space and memory I want to use dsolve output as procedures. To save time, when accessing the functions I need (only the first few in the large set of unknown functions that obey the ODE) for a given value of x, I would like maple to have those already stored instead of computing them with each invocation. So, what I need is a somehow split behavior of output. For some of my unknown functions to act as if i use range in dsolve, so that I have access at the values without further computation, and for the rest of the solutions (most of the unknown functions) just keep them in procedural form. How do I achieve this? 


Below is a schematic of my probem:


ODEs:={Set of about 10000 coupled ODEs for functions labeled f[n,l] n ranging from 1..1000 and l from 1..10}


dsolve(ODEs,numeric, output=???)#What options to put in dsolve such that I have quick access to f[0,0](x) and f[0,1](x) in a given range (say xmin=0.1 and xmax=10 for example) but not store the rest. 




The idea: parameter "a" will have a new random value each 10 days.

The way I did it is working but it can get very long especially if I do it for a system of equations and for long time more than a year (365 days).

The code:

with(DEtools); with(plots);
n := 5;

for i to n do Ra[i] := RandomTools:-Generate(distribution(Uniform(0.1e-1, .5))); a[[i]] := Ra[i] end do;

b := 0.1e-2;

T := 10;

 eq := diff(L(t), t) = a*L(t)-b;

init[1] := L(0) = 100;
 sol[1] := dsolve({init[1], subs(a = a[[1]], eq)}, L(t), range = 0 .. T, numeric);

init[2] := L(T) = rhs(sol[1](T)[2]);

sol[2] := dsolve({init[2], subs(a = a[[2]], eq)}, L(t), range = T .. 2*T, numeric);


init[3] := L(2*T) = rhs(sol[2](2*T)[2]);
sol[3] := dsolve({init[3], subs(a = a[[3]], eq)}, L(t), range = 2*T .. 3*T, numeric);

p[1] := odeplot(sol[1], [t, L(t)], t = 0 .. T);

p[2] := odeplot(sol[2], [t, L(t)], t = T .. 2*T);

p[3] := odeplot(sol[3], [t, L(t)], t = 2*T .. 3*T);

p := display([p[1], p[2], p[3]]);


Thank you

hi friends

i have a problem in maple with an error

dx := diff(x(t), t, t) = -G*Mz*x(t)/(x(t)^2+y(t)^2)^(3/2):

dy := diff(y(t), t, t) = -G*Mz*y(t)/(x(t)^2+y(t)^2)^(3/2):

 G := 6.67*10^(-11); Mz := 6*10^24:
 IniC := x(0) = 7*10^6, (D(x))(0) = 0, y(0) = 0, (D(y))(0) = 9*10^3:
 Digits := 15:
 Ns := dsolve({dx, dy, IniC}, {x(t), y(t)}, numeric):
 dsnumsort(Ns(0), [x, y]);

>for i from 0 to 400 do T := 40*i; NsT := Ns(T); X[i] := rhs(NsT[C1]); Vx[i] := rhs(NsT[V1]); Y[i] := rhs(NsT[C2]); Vy[i] := rhs(NsT[V2]); MofI[i] := X[i]*Vy[i]-Y[i]*Vx[i] end do:

> with(plots);
> p1 := polarplot(6378*10^3, phi = 0 .. 2*Pi);
> p2 := plot([seq([X[i], Y[i]], i = 0 .. 327)], thickness = 2);

display({p1, p2}, labels = ['x', 'y'], scaling = constrained);

but i see and I I can't draw PLOT:

Error, invalid input: rhs received [t = HFloat(0.0), x(t) = HFloat(1.0), diff(x(t), t) = HFloat(0.0), y(t) = HFloat(0.0), diff(y(t), t) = HFloat(1.0), z(t) = HFloat(0.75), diff(z(t), t) = HFloat(0.0)][C1], which is not valid for its 1st argument, expr


can you helpe me?


I am solving a system of ODEs with dsolve(ODES, numeric, method = lsode[adamsfull]) and I noticed that some of the solutions are really small numbers, of the order of 10^-{10} and smaller. Certainly for all intents and purposes I will treat those as zero, but my question is: what flag do I set in dsolve to force Maple stop seeking for a solution when it is so close to zero and set it to 0.0? It seems like a great waste of computational time to try and find the significant digits of the order one number in front of 10^{-10} for any particular solution, at least in my case. So, is there a way to add some option in dsolve such that maple sets that to zero before trying to fully calculate it fully (i.e. all the significant digits) ?? I have looked at abserr and relerr but that does not do the trick. 


IF the question was asked before, forgive me. I have tryed to find an answer within the search here and on the maple help page but was unsuccessful. 

of the improper integral of exp((1-x)/((1-x)^2+y^2)) over the unit disk x^2+y^2 <= 1 with Maple? For purists the function is assumed to be undefined at (1,0). It is not so difficult to verify that statement  by hand. It is not easy to prove that with Maple.

My try was

f := evalc(exp(Re(1/(1-x-I*y))));

VectorCalculus:-int(f, [x, y] = Circle(`<,>`(0, 0), 1), numeric);


evalf(Int(f, [y = -sqrt(-x^2+1) .. sqrt(-x^2+1), x = -1 .. 1]));

Edit. The formula for f.                  





Could anyone please hepl me? I have the following system

e1 := exp(F(r)/phi_0)*L*A(r) = (1/2)*(2*(diff(A(r), r, r))*B(r)*A(r)*r*C(r)+2*B(r)*A(r)*(diff(A(r), r))*(diff(C(r), r))*r-(diff(A(r), r))^2*B(r)*r*C(r)-(diff(A(r), r))*(diff(B(r), r))*A(r)*r*C(r)+4*B(r)*A(r)*(diff(A(r), r))*C(r))/(B(r)^2*A(r)*r*C(r));
e2 := alpha*(diff(F(r), r, r))+(alpha^2+omega)*(diff(F(r), r))^2+(1/4)*(4*(diff(C(r), r, r))*B(r)*A(r)^2*C(r)*r+2*(diff(A(r), r, r))*A(r)*B(r)*r*C(r)^2-2*B(r)*A(r)^2*(diff(C(r), r))^2*r-(diff(A(r), r))^2*B(r)*r*C(r)^2-2*A(r)^2*C(r)*(diff(C(r), r))*(diff(B(r), r))*r-(diff(A(r), r))*(diff(B(r), r))*A(r)*r*C(r)^2+8*B(r)*A(r)^2*C(r)*(diff(C(r), r))-4*A(r)^2*C(r)^2*(diff(B(r), r)))/(r*A(r)^2*B(r)*C(r)^2)-(1/4)*(2*(diff(A(r), r, r))*B(r)*A(r)*r*C(r)+2*B(r)*A(r)*(diff(A(r), r))*(diff(C(r), r))*r-(diff(A(r), r))^2*B(r)*r*C(r)-(diff(A(r), r))*(diff(B(r), r))*A(r)*r*C(r)+4*B(r)*A(r)*(diff(A(r), r))*C(r))/(B(r)*A(r)^2*r*C(r)) = 0;
e3 := (1/4)*(-2*(diff(C(r), r, r))*B(r)*A(r)*r^2-B(r)*(diff(A(r), r))*(diff(C(r), r))*r^2+A(r)*(diff(C(r), r))*(diff(B(r), r))*r^2-8*B(r)*A(r)*(diff(C(r), r))*r-2*B(r)*(diff(A(r), r))*C(r)*r+2*A(r)*C(r)*(diff(B(r), r))*r+4*B(r)^2*A(r)-4*B(r)*A(r)*C(r))/(B(r)^2*A(r)) = -(1/4)*(2*(diff(A(r), r, r))*B(r)*A(r)*r*C(r)+2*B(r)*A(r)*(diff(A(r), r))*(diff(C(r), r))*r-(diff(A(r), r))^2*B(r)*r*C(r)-(diff(A(r), r))*(diff(B(r), r))*A(r)*r*C(r)+4*B(r)*A(r)*(diff(A(r), r))*C(r))*r/(B(r)^2*A(r)^2);
e4 := -(alpha^2+2*omega)*(diff(F(r), r))*(-(1/2)*(-(diff(A(r), r))*B(r)*r^4*C(r)^2-A(r)*(diff(B(r), r))*r^4*C(r)^2-4*A(r)*B(r)*r^3*C(r)^2-2*A(r)*B(r)*r^4*C(r)*(diff(C(r), r)))/(A(r)*B(r)*r^4*C(r)^2)-(diff(B(r), r))/B(r)+(diff(F(r), r, r))/(diff(F(r), r))+alpha*(diff(F(r), r)))/B(r) = -exp(F(r)/phi_0)*V_0*(alpha-1/phi_0);

phi_0 := -alpha/(2*alpha^2+2*omega); L := V_0*(1-(alpha-1/phi_0)*alpha/(3*alpha^2+2*omega)); V_0 := -lambda*exp(-fc/phi_0); fc := ln((4*alpha^2+2*omega)/(G_0*(3*alpha^2+2*omega)))/alpha; m := (2/(1+g))^(1/2); n := g*(2/(1+g))^(1/2); P := (G_0*(3*alpha^2+2*omega)/(4*alpha^2+2*omega))^(-2*alpha/(n-m)); eta := 1.4*G_0*Ms*(2/(1+g))^(-1/2)/c^2; g := 1-alpha^2/(2*alpha^2+omega);

omega := -10^5; alpha := 1; G_0 := 6.67*10^(-11); lambda := 10^(-52); c := 2.9*10^8; Ms := 1.9*10^30;
ri := evalf(1000*eta);

ics := A(2.109660445*10^6) = 1, (D(A))(2.109660445*10^6) = 2.370091128*10^(-15)*sqrt(2)*sqrt(99998)*sqrt(199997), B(2.109660445*10^6) = 1, C(2.109660445*10^6) = 1, (D(C))(2.109660445*10^6) = 4.740182256*10^(-15)*(1-(99999/19999300006)*sqrt(2)*sqrt(99998)*sqrt(199997))*(1-1.000017501*10^(-8)*sqrt(2)*sqrt(99998)*sqrt(199997))^(-(99999/19999300006)*sqrt(2)*sqrt(99998)*sqrt(199997))*sqrt(2)*sqrt(99998)*sqrt(199997), f(2.109660445*10^6) = 23.43081116, (D(f))(2.109660445*10^6) = 4.749681180*10^(-15):

eta:=2109.660445: sys:=e1,e2,e3,e4; vars:=[A(r),B(r),C(r),F(r)];

dsn3 := dsolve([sys, ics], numeric, vars, range = 3*eta .. 50*eta);

Results in

Warning, cannot evaluate the solution past the initial point, problem may be complex, initially singular or improperly set up

Setting f(r)=Const,V_0=0 which is a physically relevant case, results in

Error, (in simplify/normal) numeric exception: division by zero

I suugest the problem is that the equation contain sqared derivatives, hence there are several solution branches corresponding to different signs of square root. Maple chooses the singular branch. How can I force it to choose another branch or calculete all of them?

Thanks in advance..

This is the simplest method to explain numerically solving an ODE, more precisely, an IVP.

Using the method, to get a fell for numerics as well as for the nature of IVPs, solve the IVP numerically with a PC, 10steps.

Graph the computed values and the solution curve on the same coordinate axes.


y'=(y-x)^2, y(0)=0 , h=0.1

Sol. y=x-tanh(x)


I don't know well maple. 

I study Advanced Engineering Math and using maple, but i am stopped in this test.

I want to know how solve this problem.

please teach me~ 

IT IS EULER's method

Hi there. I'm Student

i want to know how solve this problem.

please teach me! 

y'=(y-x)^2, y(0)=0, h=0.1


how solve this problem for maple? 

please teach me~

Dear all,

I have a question regarding the dsolve procedure in Maple. I'm trying to construct a neutron star model using the Tolman-Oppenheimer-Volkoff equation using a polytropic equation of state (EOS) which requires me to solve the ode system:



where I have used the EOS P(r)=K*rho(r)^(5/3) and K is a known constant. rho is the density of the star, m it's mass and P the pressure inside the star.

For the initial conditions I have chosen: rho(10^(-10))=rho_0 and m(10^-10)=0. I have chosen r=10^-10 as the innermost point for the integration, since the differential equation for rho is singular at r=0. rho_0 is the central density of the star.

I solve these equations numerically using:


where ode is my system of differential equations and ics are my initial conditions. I need now the radius of the star (R_star), which is the maximum value of r, up until which Maple has carried out the integration.

My problem is, I don't know of any efficient way, to do this. What I'm doing currently is defining a procedure TOVr:=rhs(TOV[1]) and I evaluate it at a very high value of r, for which Maple returns me the error message: "Error, (in TOVr) cannot evaluate the solution further right of ..., probably a singularity". I then use the command TOVr('last') to call the maximum value of r and to store it.

I can use the above method, as long as I'm solving the ODEs only for a few different values of rho_0. But I would like to plot m(R_star) for values of rho_0 ranging from 10^(-14) to 10^(-12) in order to find the value of rho_0, for which I can obtain the maximum value for m(R_star). But this requires me to know the value of R_star for every rho_0 and using the above method is not feasible for say hundred different values of rho_0, since I can't write a loop, because it get's terminated as soon as Maple gives me the first error message.

I was thinking of using perhaps the 'events' command in dsolve, to stop the numeric integration once the value for the pressure drops very low, say below 10^(-46), since the radius at which P(r)=0 defines the stellar surface. I tried using:

TOV:=dsolve({ode,ics},numeric, events=[[K*rho(r)^(5/3)-10^(-46),halt]])

but if I try again to evaluate the solution at a large value of r, I get the above error message, and the integration doesn't get canceled, although the value 10^(-46) is bigger than the value for the pressure I would obtain for R_star using TOVr('last') and Maple shouldn't encounter a singularity.

Am I using the 'events' command wrong? And does somebody know of a more efficient method to obtain the maximum value of a variable after carying out a numerical integration using dsolve?

Sorry for the long post and thank you all.

So i got a procedure test, she is kind of numeric, i whant to optimaze test([.5, .5, .5], 1, 3, 100, 100, true, [x, 0, 0, 0, 0])=0 by x. But optinization substitutes x like a symbol, i tryed all methods but they all do the same.

f := proc (x) options operator, arrow; abs(test([.5, .5, .5], 1, 3, 100, 100, true, [x, 0, 0, 0, 0])-.4) end proc; Minimize(f(x));
Error, (in test) cannot determine if this expression is true or false: 0 < -43.0+100*x

Can i some how use optinization on such procedure?

file link  - >

I've got the following four differential equations :

d2v_x:=-((C_d)*rho*Pi*(r^2)*(v_x)*sqrt((v_x)^2 +(v_y)^2))/(2*m);
d2v_y:=-((C_d)*rho*Pi*(r^2)*(v_y)*sqrt((v_x)^2 +(v_y)^2))/(2*m)-g;

and the following initial value conditions:

x(0)=0,y(0)=0,v_x(0)=v0/sqrt(2),v_y(0)=v0/sqrt(2) given v0=65 

I need to solve these using the numeric type and then draw overlaid plots

(i) setting C_d=0

(ii) leaving C_d as a variable

before plotting y(t) vs x(t). The hint for this last part is that the path can be seeing using [x(t),y(t)] instead of [t,y(t)]

I've tried to do it but seemed to have several syntax errors.



I've got the following diff.eq

y'(x)=sin(x*y(x)) given y(0)=1 

and need to solve it numerically which is why I've used:


This code doesn't return a value though and in fact, ans3 is being displayed as a procedure

"ans3:=proc(x_rkf45) ... end proc"

I don't quite understand why and what I need to do to get the required numerical solution



I have a little problem. I have a system of ODEs, I can solve (with numeric solve) it but I can't plot it...
Any idea to help ?

Thank you !!

Here is my code:

beta := 1; lambda := 5; nu := 1; Delta := 1;

sys := {C(0) = 0, In(0) = .2, diff(C(u), u) = beta*In(u)*s(u)-C(u)/nu, diff(In(u), u) = C(u)/nu-In(u)/lambda+Delta*(diff(diff(In(u), u), u)), diff(s(u), u) = -beta*In(u)*s(u), s(0) = .8, (D(In))(0) = .2}

dsys := dsolve(sys, numeric, [In(u), s(u), C(u)])

plot(dsys[1], u = 0 .. .5, axes = boxed)

And I have this error:

Warning, expecting only range variable u in expression dsys[1] to be plotted but found name dsys[1]

PS: Maple solves the system without any problem:


        [u = 0.5, In(u) = HFloat(0.33305297276372425),

          --- In(u) = HFloat(0.33950703755414946),

          s(u) = HFloat(0.7022184797811994),

          C(u) = HFloat(0.0781621551198558)]

Good day everyone, how can one check for the congence of numerical solution of this ODE in maple? See it here

Best regards.

1 2 3 4 5 6 7 Last Page 1 of 16