longrob

Mr. Robert Long

1404 Reputation

18 Badges

13 years, 131 days
Leeds, United Kingdom

Social Networks and Content at Maplesoft.com

Business Consultant Data Scientist Statistician

MaplePrimes Activity


These are answers submitted by longrob

This looks like a heat/diffusion equation problem. 

May I ask where Q comes from ?

Have you looked at the behaviour of Q for certain fixed x or t ? For example, setting x=2*Pi, and plotting the evolution over various time periods > 0 indicates quite odd behaviour. Do you think it is correct, physically ? For example, see the plots on the attached sheet.


(1)

 

 

PDE :   

 

 

 

(2)

(3)

PP:=eval(P,x=2*Pi):

plot(PP,t=0..100);

 

plot(PP,t=0..1000);

 

 

plot(PP,t=0..20000);

 

plot(PP,t=0..390000);

 

plot(PP,t=390000..395000);

 

plot(PP,t=395000..397000);

 

plot(PP,t=405000..410000);

 

 

Download EhsanKayo_01.mw

@Christopher2222 I may be missing something, but looking at those 2 plots, why is Mathematica's much better than Maple's ? Edit: I'm talking about the Zeta() plots.

FYI I've produced the plot in Maple 15 with grid = [1500, 1500] and that looks nice to me, though I don't have mathematica to compare it to..... I can post a screenshot, or try to export it and upload it, if you like ? Edit: I'm talking about the exp(1/z) plot but I could also do the zeta() plot....

Another way might be with using frontend() though I wasn't able to get it to work. Perhaps Joe Riel or another esteemed expert on frontend() could weigh in on this ?

 

Here's my solution using unassign:

restart:
eq1:=a + b*x + c*x^alpha = 0;
alpha
a + b x + c x = 0
a:=alpha^2:
eq1;
2 alpha
alpha + b x + c x = 0
eq2:=subs(alpha=sqrt(5),eq1);
/ (1/2)\
\5 /
5 + b x + c x = 0
# which (if I understood correctly) is not what the OP wants
# Instead
a:='a':
eq2:=subs(alpha=sqrt(5),eq1):
a:=alpha^2:
eq2;
/ (1/2)\
2 \5 /
alpha + b x + c x = 0
# as (I think) required.
# But I thought there might be a way using frontend() to apply subs to eq1 so 
that the substitution is made only where alpha occurs in a power of x, something like
eq2:=frontend(subs,[alpha=sqrt(5),eq1],[{},{x^alpha}]);
which doesn't work.....
 

Can't you just unassign a,b,c,,d,..., prior to using subs to substitute for alpha, and then re-assign them afterwards ?

I was able to solve it directly as below. I don't know why you received [] as output. Often maple returns empty output when it finds no solution. As for recursive assignment error, this would happen if you tried to assign the values of  B[n1],B[n2],A[n1] or A[n2] rather than defiining equations (ie if you replaced the "=" with ":=" in your code above). Here's my code. I hope it helps:

eq1:= B[n1] = -A[n1]*R[s]^np/R[s]^(-np):
eq2:= B[n2] = -(-mu[r]*A[n2]*R[r]^np+mu[r]*A[n2]*R[r]^np*np^2-M[n]*R[r])/(mu[r]*R[r]^(-np)*(-1+np^2)):

eq3:= A[n2] = (-np*mu[R[m]]*A[n1]*R[m]^np+np^3*mu[R[m]]*A[n1]*R[m]^np+np*mu[R[m]]*B[n1]*R[m]^(-np)-np^3*mu[R[m]]*B[n1]*R[m]^(-np)-np*mu[R[m]]*B[n2]*R[m]^(-np)+np^3*mu[R[m]]*B[n2]*R[m]^(-np)+M[n]*R[m])/(np*mu[R[m]]*R[m]^np*(-1+np^2)):

eq4:= A[n1] = (mu[R[m]]*B[n1]*R[m]^(-np)-mu[R[m]]*B[n1]*R[m]^(-np)*np^2-mu[R[m]]*A[n2]*R[m]^np+mu[R[m]]*A[n2]*R[m]^np*np^2-mu[R[m]]*B[n2]*R[m]^(-np)+mu[R[m]]*B[n2]*R[m]^(-np)*np^2-M[n]*R[m])/(mu[R[m]]*R[m]^np*(-1+np^2)):

solve({eq1,eq2,eq3,eq4},[B[n1],B[n2],A[n1],A[n2]]);
 
 

[[ / np / (-np) np
[[B[n1] = - \R[s] \np R[m] R[r] R[m] mu[r]

(-np) np
- 2 np R[m] R[r] mu[R[m]] R[m]

(-np) np (-np) np
+ np R[r] R[m] R[m] mu[r] + R[m] R[r] R[m] mu[r]

(-np) np \ \// (-np)
- R[r] R[m] R[m] mu[r]/ M[n]/ \2 np mu[R[m]] R[m]

np / 2 np (-np) (-np) np
R[m] \-np R[r] R[s] - R[r] R[s]

np (-np) (-np) 2 np\ \ /
+ R[r] R[s] + R[r] np R[s] / mu[r]/, B[n2] = - \

/ np (-np) np
\R[r] R[m] R[s] np R[m] mu[r]

np (-np) np
+ R[r] R[m] R[s] R[m] mu[r]

np np (-np)
- R[r] R[m] R[s] R[m] mu[r]

np np (-np)
+ R[r] R[m] R[s] np R[m] mu[r]

np np (-np)\ \// /
- 2 R[r] np mu[R[m]] R[m] R[s] R[m] / M[n]/ \2 \-1

2\ / np (-np) (-np) np\ np
+ np / mu[r] \-R[r] R[s] + R[r] R[s] / R[m] np

(-np)\ // (-np) np
mu[R[m]] R[m] /, A[n1] = \\np R[m] R[r] R[m] mu[r]

(-np) np
- 2 np R[m] R[r] mu[R[m]] R[m]

(-np) np (-np) np
+ np R[r] R[m] R[m] mu[r] + R[m] R[r] R[m] mu[r]

(-np) np \ (-np)\//
- R[r] R[m] R[m] mu[r]/ M[n] R[s] / \2 np mu[R[m]]

(-np) np / 2 np (-np) (-np) np
R[m] R[m] \-np R[r] R[s] - R[r] R[s]

np (-np) (-np) 2 np\ \ /
+ R[r] R[s] + R[r] np R[s] / mu[r]/, A[n2] = \M[

/ (-np) (-np) np
n] \R[r] R[m] R[s] np R[m] mu[r]

(-np) (-np) np
+ R[r] R[m] R[s] R[m] mu[r]

(-np) np (-np)
- R[r] R[m] R[s] R[m] mu[r]

(-np) np (-np)
+ R[r] R[m] R[s] np R[m] mu[r]

(-np) np (-np)\\// / 2
- 2 np R[m] R[r] mu[R[m]] R[m] R[s] // \2 \-1 + np

\ / np (-np) (-np) np\ np
/ mu[r] \-R[r] R[s] + R[r] R[s] / R[m] np mu[R[m]

(-np)\]]
] R[m] /]]

If it's just happening with one worksheet, then just remove all the output from it, then paste the code to a new worksheet, and let us know if the problem persists - if it does, then could you post part of the code so we can try to reproduce it ?

I had this problem a while ago before I got a new laptop. it turns out to be a problem with the graphics card driver. I installed the latest driver and the problem was solved. I don't know what caused it, but I think it was just after a update/patch.

Have you tried opening the worksheet in question on a different machine ?

I'm not sure what you mean by "within a certain percentage". A percentage of what ? Leaving that aside, would something like this achieve what you want ?

f:=x^2:g:=x:

iq:=abs(f-g)<1:

solve(iq,x):

convert(%,list);

     [Open(1/2-(1/2)*sqrt(5)), Open((1/2)*sqrt(5)+1/2)]

Does this work as you intend ?  

testerror := proc(b) 
local bb:
print (b):
if b > 3 then
return;
end if;
bb:=b;
bb := bb+1;
testerror(bb);
return;
end proc:
 
?

This has the same problems as you last question

1. You are using = instead of :=

2. You are assigning a value to a parameter.

 

The problem occurs because you assign a value to terminal_counter which is one of the parameters of the procedure.

To avoid this, either use a new local parameter and assign the value of terminal_counter to it and use it in place of terminal_counter in your code; or change the name of terminal_counter in the parameter list to a new name and assign it's value to terminal_counter.

For example (using the 2nd suggestion)

evolf := proc(z, f, tc)  #<- terminal_counter changed to tc
local h1,h2,h3,h4,h5,h6,h7,N,test,fitness,total_fitness,i,j,temp1,temp2,terminal_counter;
h1 := z + f;
h2 := z - f;
h3 := z*f;
h4 := z+diff(f,x);
h5 := z-diff(f,x);
h6 := z*diff(f,x);
h7 := subs(x=z, f);
terminal_counter:=tc; # <-----terminal_counter is assigned the value of the parameter tc
N := 7;
test := [h1, h2, h3, h4, h5, h6, h7];
print(test);
fitness := [0, 0, 0, 0, 0, 0, 0];

if terminal_counter > 5 then
return fitness;
end if;

total_fitness := 0;
for i from 1 to N do
temp1 := 0;
temp2 := 0;
for j from 0 by 0.1 to 1 do
temp1 := eval(subs(x=j,test[i])^2);
temp2 := eval(subs(x=j,f)^2);
od;
fitness[i] := 1/(1+temp1+temp2);
total_fitness := total_fitness + 1/(1+temp1+temp2);
od;
for i from 1 to N do
fitness[i] := fitness[i]/evalf(total_fitness);
od;
print(select(t->type(fitness[op(t)], max(fitness)), [$1..nops(fitness)])[1]);
print(test[select(t->type(fitness[op(t)], max(fitness)), [$1..nops(fitness)])[1]]);

terminal_counter := terminal_counter + 1;
if max(fitness) = min(fitness) then
return fitness;
end if;
fitness := evolf(test[select(t->type(fitness[op(t)], max(fitness)), [$1..nops(fitness)])[1]], f, terminal_counter);
return fitness;
end proc:
fitness := evolf(x^2, x+1, 1);

The best I can do is

expand(t);
n
2
--
n
5
You can use the DeleteRow command in the LinearAlgebra package
http://www.maplesoft.com/support/help/Maple/view.aspx?path=LinearAlgebra/DeleteRow

You need to close the for loop with an "end do" before closing the procedure.

There are some other issues in your code, such as
using = instead of := 
not declaring variables as local
It may also be an idea to declare the type of parameter that is being passed in to the procedure (seems like it's a function so you can use f::mathfunc)

So, 

evolf := proc(f::mathfunc)
local h1,h2,h3,h4,h5,h6,h7,h8,h9,test,F,i;
h1 := z + f(x);
h2 := z - f(x);
h3 := z*f(x);
h4 := f(x)/z;
h5 := z+diff(f(x),x);
h6 := z-diff(f(x),x);
h7 := z*diff(f(x),x);
h8 := diff(f(x),x)/z;
h9 := subs(x=z, f(x));
test := [h1, h2, h3, h4, h5, h6, h7, h8, h9];
F := 0;
for i from 1 to 9 do
F := F + 1/(1+exp(subs(x=0,test[i])-subs(x=0,f(x))));
end do;
end proc:

evolf(sin);
1/(1+exp(z))+1/(1+exp(z-2*sin(0)))+1/(1+exp(z*sin(0)-sin(0)))+1/(1+exp(sin(0)/z-sin(0)))+1/(1+exp(z+cos(0)-sin(0)))+1/(1+exp(z-cos(0)-sin(0)))+1/(1+exp(z*cos(0)-sin(0)))+1/(1+exp(cos(0)/z-sin(0)))+1/(1+exp(sin(z)-sin(0)))

 

 

Did you try using fieldplot ?

I tried to enter your equations into maple, but couldn't succeed.  It would be a bit easier (for me, at least) to help if you write your post with maple code instead.

1 2 3 4 5 6 7 Page 3 of 9