vv

13837 Reputation

20 Badges

9 years, 319 days

MaplePrimes Activity


These are replies submitted by vv

I did not remove it! Probably somebody else did.

I just asked why it was transformed into a question, from its initial place.

In all cases, it would be nice that any such action be mentioned by the person who decides to do so.

 

I wonder why this comment @chandrashekhar was converted into a question.

@Rouben Rostamian  

Very nice, thank you.
So, it seems that pdsolve accepts discontinuous bc's but rejects discontinuous pdes, and converting the 2nd order PDE into a 1st order system does not always work.
The solution is to approximate the discontinuous pde or to implement a custom finite difference method, as you did.
[There should be some pdsolve options, but they seem to be hard to find].

The pde approximation method (also yours!) works well for your last example:

restart;
uexact := piecewise(x<0, erf(x/(2*sqrt(t))), 1/2*erf(x/(4*sqrt(t)))):
#K := x -> piecewise(x<=0, 1,4):
K := x -> 1+3*(1+erf(100*x))/2:
pde := { diff(u(x,t),t) =  diff(K(x)*diff(u(x,t),x), x)}:
bc:={ u(-1,t)=-erf(1/(2*sqrt(t))), u(1,t)=erf(1/(4*sqrt(t)))/2, u(x,0)=piecewise(x<0, -1, +1/2)}:
sol:=pdsolve(pde, bc, numeric, spacestep=1/200, timestep=0.0001):
p1:=sol:-animate(u, t=0..0.1, frames=25, color=red):
p2:=plots:-animate(plot,[uexact, x=-1..1, color=blue], t=0..0.1, frames=25):
plots:-display(p1,p2);

@Rouben Rostamian

It would be nice to know an exact solution for an example where c(x) (=K(x)) is also discontinuous.
It is in this case where I don't know theoretical results.

@Bart 

Yes, it seems that pdsolve rejects not only a discontinuous u(x,0) but also a continuous but non-smooth one.
Rouben's solution accepts any u(x,0) because it does not check it. It just solves the generated linear system.
I do not know what the theory says for such conditions and about the nature of the solution (when it exists).

(for Example 2)

restart;
K := x -> piecewise(x<0.5, 1, 10):
pde := {diff(u(x,t),t)=diff(v(x,t),x),
        v(x,t)=K(x)*diff(u(x,t),x)}: 
bc:={ u(0,t)=0, u(1,t)=1, u(x,0)=2 }:
sol:=pdsolve(pde, bc, numeric, spacestep=1/200):
sol:-animate(u, t=0..0.15);

@federicie

f:=proc(a,b,ev)
   local i; global A,B,F;
   if ev<>true then return 'last'(A,B)=F fi;
   A,B:=a,b;
   F:=add(evalf(sin(a+b+i)), i=1..10^5)
end:

 

@Carl Love 
In the 2019 help page:

This feature is currently not supported in 2-D math input

@Carl Love 

Maybe I am too conservative but I prefer the old style

ur:= proc(r) local i:=op(procname); A[i]*r + B[i]/r end;

 

@WebSuccess 

Unfortunately you have not checked your statement.

@byrktr 

Sorry, I don't know. But usually in such problems some heuristic is used.
BTW, I have corrected a typo in cond3.

Edit.
Here is an idea.
Solve the problem in real x[i,j,k],  in the interval 0..1. Maple can do it quickly.
One obtains an "approx" solution (with some conditions violated). Maybe you can start from here.

i1:=indets([cond1])<=~1:
i0:=indets([cond1])>=~0:
i01:=i0[],i1[]:

fracsol:=Optimization:-LPSolve( add(q[i],i=1..20), {seq(cond||i, i=1..6), i01} );
sol01_approx:=map(t -> (lhs(t)=round(rhs(t))), fracsol[2]);

@byrktr 

It is always a good idea to post the mathematical presentation of the problem. Then, an experienced user could come with a simpler/alternative solution.

@student_md 

Actually, it's the absolute error. For the relative error, use

numapprox:-infnorm((y-mExact)/mExact, 0..1);

 

@denbkh 

I can easily give recurrences with "complex" sums which cannot be solved.
If you have a specific one, why don't you post it?

You have just produced a duplicate. You already asked this in your previous question and have received a partial answer.
Why don't you wait, maybe someone will come with the rest.
Note that usually such duplicates are simply deleted!

First 61 62 63 64 65 66 67 Last Page 63 of 176