## 25 Reputation

13 years, 267 days

## some more thoughts to this question...

I think, that maybe the first NumericEventHandler should be kept, and probably I should redefine the following:

0*infinity should not be undefined but should equal to 0.

How can we achieve this?

My problem is that 0*infinity does not drop an exception, which could be catched by the NumericExceptionHandler, hence maybe I should do something with define, to achieve this.

I tried to add more definition to the multiplication rule by

definemore(`*`,0*infinity=0), but the error is that `*` does not refer to the multiplication operator.

BR,

Zoltan

## heaviside...

Hi,

Thank you for your answers. K (H) are simple now, but my aim is to compare different ranking methods, and the most simple is the weighted sum method, where I choose 1/3 for the weights (of the columns of the matrix X). That is why K and H became simple.

If this integration worked, I would like to tune the fX11, fX12, ... probability density functions to more realstic ones in my domain (packet delay, rate, jitter, loss) (using some heavy tail, gaussian, etc.), and compare different ranking algorithms (more complex K (H)) from the point of view that which of them makes a given alternative win more times.

So it would be really nice if it worked with this "simple" case. I think that I should not decrease the number of variables in this comparison, because in those cases it is not realistic to use ranking algorithms.

Even if the example could be calculated with exact integration, other methods are less nice (in some cases non-continuous and/or non-linear). Hence maybe numerical integration would be good for me. What is your opinion? Is Montecarlo very unreliable?

I have doubts in it because it did not react in a consistent way to increaing values of the epsilon and digits parameters.

Another direction I already tried is to discretize the problem: enumerate combinations of input variables calculate the output of the ranking methods and compare ranking methods on this basis. In your opinion wouldn't this be a better direction?

The output of all of these experiences will be something like in a given use case described by the distribution of input parameters how the method selection influences the winning probabilities of a given alternative, having the  attributes in a given row of the matrix X.

Br,

Zoltan

## heaviside...

Hi,

Thank you for your answers. K (H) are simple now, but my aim is to compare different ranking methods, and the most simple is the weighted sum method, where I choose 1/3 for the weights (of the columns of the matrix X). That is why K and H became simple.

If this integration worked, I would like to tune the fX11, fX12, ... probability density functions to more realstic ones in my domain (packet delay, rate, jitter, loss) (using some heavy tail, gaussian, etc.), and compare different ranking algorithms (more complex K (H)) from the point of view that which of them makes a given alternative win more times.

So it would be really nice if it worked with this "simple" case. I think that I should not decrease the number of variables in this comparison, because in those cases it is not realistic to use ranking algorithms.

Even if the example could be calculated with exact integration, other methods are less nice (in some cases non-continuous and/or non-linear). Hence maybe numerical integration would be good for me. What is your opinion? Is Montecarlo very unreliable?

I have doubts in it because it did not react in a consistent way to increaing values of the epsilon and digits parameters.

Another direction I already tried is to discretize the problem: enumerate combinations of input variables calculate the output of the ranking methods and compare ranking methods on this basis. In your opinion wouldn't this be a better direction?

The output of all of these experiences will be something like in a given use case described by the distribution of input parameters how the method selection influences the winning probabilities of a given alternative, having the  attributes in a given row of the matrix X.

Br,

Zoltan

## RE: Procedures are good to use...

Thank you Acer! I learnt again something on Maple. Zoltan

## RE: Procedures are good to use...

Thank you Acer! I learnt again something on Maple. Zoltan

## catchig fsolve output...

In that case, I assume this is a good solution to handle that solution has been found by fsolve:

If we have this equation:

eqn1 := f1(t)=f2(t)

Let  the output of fsolve be tmp1

tmp1 := fsolve(eqn1, t = 0 .. 1)

to catch that solution has been found:

if `and`(tmp1<>NULL,type(tmp1,float)) then ... end if

What is your opinion?

BR,

Zoltan

## catchig fsolve output...

In that case, I assume this is a good solution to handle that solution has been found by fsolve:

If we have this equation:

eqn1 := f1(t)=f2(t)

Let  the output of fsolve be tmp1

tmp1 := fsolve(eqn1, t = 0 .. 1)

to catch that solution has been found:

if `and`(tmp1<>NULL,type(tmp1,float)) then ... end if

What is your opinion?

BR,

Zoltan

## simplfying piecewise...

For some reason, this worked:

fDiffx:=proc(X,methodList)  # differentiate functions based on t

local i,j,tmp,U,Un;

for i in [1,2,3] do:

tmp[i]:=diff(simplify(convert(X[i],rational)),t) assuming t>=0, t<=1;

od;

for j in [2,3] do:

U:=convert(select(Y->type(Y,numeric),map(op,map(Y->map2(rhs@op,1,

PiecewiseTools:-ToList(Y)),indets(tmp[j],piecewise)))),list);

Un := [0, op(U), infinity];

tmp[j]:=piecewise(seq(op( [ t > Un[i] and t < Un[i+1], `assuming`([simplify(tmp[j])], [t>Un[i] and t<Un[i+1]])]), i=1..nops(Un)-1),undefined);

od;

Vector(3,i->tmp[i]);

end proc:

## simplfying piecewise...

For some reason, this worked:

fDiffx:=proc(X,methodList)  # differentiate functions based on t

local i,j,tmp,U,Un;

for i in [1,2,3] do:

tmp[i]:=diff(simplify(convert(X[i],rational)),t) assuming t>=0, t<=1;

od;

for j in [2,3] do:

U:=convert(select(Y->type(Y,numeric),map(op,map(Y->map2(rhs@op,1,

PiecewiseTools:-ToList(Y)),indets(tmp[j],piecewise)))),list);

Un := [0, op(U), infinity];

tmp[j]:=piecewise(seq(op( [ t > Un[i] and t < Un[i+1], `assuming`([simplify(tmp[j])], [t>Un[i] and t<Un[i+1]])]), i=1..nops(Un)-1),undefined);

od;

Vector(3,i->tmp[i]);

end proc:

## simplifying piecewise...

Thank you! I analyzed your commands, using maple help.

Finally I could use in my example the follwoing differentiation

## simplifying piecewise...

Thank you! I analyzed your commands, using maple help.

Finally I could use in my example the follwoing differentiation

## forgot...

I forgot to say that compared to my previous question where pagan's solution worked (http://www.mapleprimes.com/questions/96934-Question-On-Differentiation-And-Integration-Problems#comment96941
), now the input Matrix X has been changed.

BR,

Zoltan

## strange plots...

I noticed that if I plot out smaller regions of tmp[1] (distance of dia ) , the function shape is not too nice. Otherwise discont says that the function has no discontinuities. fdiscont on the other hand results regions of discontinuities.

What caused that tmp[1] is so noisy/oscillating? Did the numerical integration gave up due to this oscillation?

 > with('LinearAlgebra'):Testzero:= proc(O) evalb(simplify(O)=0) end:
 > safeDivide:=(x,y)->limit(x/b,b=y):
 > sumNorm:=proc(X) local k,l,xnorm,N,M,output; if (typematch(X,Matrix)) then         N,M:=Dimensions(X);         for k to M do:                 for l to N do:                         xnorm[l,k]:=safeDivide(X[l,k],add(X[i,k],i=1..N));                 od;         od;         output:=Matrix(N,M,xnorm) elif (typematch(X,Vector)) then         N:=Dimensions(X);         for l to N do:                 xnorm[l]:=safeDivide(X[l],add(X[i],i=1..N));         od;         output:=Vector(N,xnorm) end if; output; end proc:

Let's compare three score aggregation method. All are f:=(X::Matrix,C::Vector) -> TerminalScores::Vector

1st method: simple weighted sum

 > simpleWeightedSum:=proc(X::Matrix,C::Vector)         local i,j,k,l,t,N,M;         N,M:=Dimensions(X);         # simple weighted sum         for j from 1 to N do:                 t[j]:=add(C[i]*X[j,i],i=1..M);         od;         sumNorm(Vector(N,t)); end proc:

2nd method: distance to ideal alternative

 > dia:=proc(X::Matrix,C::Vector)         local i,j,k,l,t,v,Dpos,Dneg,Dposmin,Dnegmax,N,M;         N,M:=Dimensions(X);         #DiA         for i to M do:                 for j to N do:                         v[j,i]:=C[i]*X[j,i];                 od;         od;         i,j:='i','j';         for j to N do:                 Dpos[j]:=add(  abs(v[j,i] - max(seq(v[k,i],k=1..N)) ) ,i=1..M );                 Dneg[j]:=add(  abs(v[j,i] - min(seq(v[k,i],k=1..N)) ) ,i=1..M );         od;         j,k:='j','k';         Dposmin:=min(seq(Dpos[j],j=1..N));         Dnegmax:=max(seq(Dneg[j],j=1..N));         j:='j';         for j to N do:                 t[j]:=sqrt((Dpos[j]-Dposmin)^2+(Dneg[j]-Dnegmax)^2);                         od;         Vector(N,1)-sumNorm(Vector(N,t));         #Vector(N,t); end proc:

3rd method:topsis

 > topsis:=proc(X::Matrix,C::Vector)         local i,j,t,v,Dpos,Dneg,N,M;         N,M:=Dimensions(X);         #TOPSIS         for i to M do:                 for j to N do:                         v[j,i]:=C[i]*X[j,i];                 od;         od;         i,j:='i','j';         for j to N do:                 Dpos[j]:= sqrt(add( (v[j,i] - max( seq( v[j,i],j=1..N ) ))^2, i=1..M));                 Dneg[j]:= sqrt(add( (v[j,i] - min( seq( v[j,i],j=1..N ) ))^2, i=1..M));         od;         j:='j';         for j to N do:                 t[j]:= safeDivide(Dneg[j],(Dneg[j]+Dpos[j]));         od;         #Vector(N,t);         sumNorm(Vector(N,t));         end proc:

Number of methods to compare

 > numOfMethods=3;

1st input parameter of methods

 > X:=Matrix(3,3,<|<0.5,0.5,0.5>|<0.5,0.5,0.5>>);

2nd input parameter of methods

 > C:=Vector(3,1/3);

I want to analyze the difference between the methods, by calculating :

distortion1:=int(abs(terminalScore[1]_dia - terminalScore[1]_simpleWeightedSum, t=0..1), and

distortion2:=int(abs(terminalScore[1]_topsis - terminalScore[1]_simpleWeightedSum, t=0..1)

Here I create a vector of the three decision method functions

 > createFunctionVector:=proc(t)         global X,C,numOfMethods;         local f;         f[1]:=unapply(simpleWeightedSum(X,C),t);         f[2]:=unapply(dia(X,C),t);         f[3]:=unapply(topsis(X,C),t);         Vector(3,i->f[i](t)[1]); end proc:

termScores is the Vector of decision method functions

 > termScores:=createFunctionVector(t):

Now I create a procedure to differentiate the decision method functions

 > fDiffx:=proc(X,methodList)  # differentiate functions based on t         local i,tmp;         for i in methodList do:                 tmp[i]:=diff(simplify(convert(X[i],rational)),t) assuming t>=0, t<=1;         od;         Vector(3,i->tmp[i]); end proc:

call the procedure to differentiate decision method function 1 and 3, i.e., simpleWeightedSum and Topsis

 > diffTermScores:=fDiffx(termScores,[1,2,3]): # OK for 1:simpleWeightedSum and 3:topsis

ERROR happens when I try to differentiate the dia function --> How to solve this?

 > fDiffx(termScores,2): # not OK for 2: dia

Now I look the "distance" of method topsis from simpleWeightedSum

 > distanceOfMethods:=Vector(2,):

Before integration I replace undefined values to 0

 > tmp[1]:=unapply(subs(undefined=0,distanceOfMethods[1]),t):
 > tmp[2]:=unapply(subs(undefined=0,distanceOfMethods[2]),t):

I try to integrate (at least numerically) the distance of two methods to get the distortion of Topsis compared to simple weighted sum

 > distortion:=evalf(Int(tmp[1],0.0..1,epsilon=1e-4,digits=10)); # integration did not work for tmp[1]

 > distortion:=evalf(Int(tmp[2],0.0..1,epsilon=1e-4,digits=10)); # integration worked for tmp[2]

 > fdiscont(tmp[1], 0.47..0.52,10^(-3));

 > discont(tmp[1],t);

 > iscont(tmp[1], x = 0.48 .. 0.51);

 > plot(tmp[1](t),t=0.489999..0.49);

 > plot(tmp[1](t),t=0.4899995..0.49);

 > fdiscont(tmp[1],0.4899995..0.49);

 > plot(tmp[1](t),t=0.499999..0.5);

 > plot(tmp[2](t),t=0.489999..0.49);

 >
 >

question_differentia.mw

## strange plots...

I noticed that if I plot out smaller regions of tmp[1] (distance of dia ) , the function shape is not too nice. Otherwise discont says that the function has no discontinuities. fdiscont on the other hand results regions of discontinuities.

What caused that tmp[1] is so noisy/oscillating? Did the numerical integration gave up due to this oscillation?

 > with('LinearAlgebra'):Testzero:= proc(O) evalb(simplify(O)=0) end:
 > safeDivide:=(x,y)->limit(x/b,b=y):
 > sumNorm:=proc(X) local k,l,xnorm,N,M,output; if (typematch(X,Matrix)) then         N,M:=Dimensions(X);         for k to M do:                 for l to N do:                         xnorm[l,k]:=safeDivide(X[l,k],add(X[i,k],i=1..N));                 od;         od;         output:=Matrix(N,M,xnorm) elif (typematch(X,Vector)) then         N:=Dimensions(X);         for l to N do:                 xnorm[l]:=safeDivide(X[l],add(X[i],i=1..N));         od;         output:=Vector(N,xnorm) end if; output; end proc:

Let's compare three score aggregation method. All are f:=(X::Matrix,C::Vector) -> TerminalScores::Vector

1st method: simple weighted sum

 > simpleWeightedSum:=proc(X::Matrix,C::Vector)         local i,j,k,l,t,N,M;         N,M:=Dimensions(X);         # simple weighted sum         for j from 1 to N do:                 t[j]:=add(C[i]*X[j,i],i=1..M);         od;         sumNorm(Vector(N,t)); end proc:

2nd method: distance to ideal alternative

 > dia:=proc(X::Matrix,C::Vector)         local i,j,k,l,t,v,Dpos,Dneg,Dposmin,Dnegmax,N,M;         N,M:=Dimensions(X);         #DiA         for i to M do:                 for j to N do:                         v[j,i]:=C[i]*X[j,i];                 od;         od;         i,j:='i','j';         for j to N do:                 Dpos[j]:=add(  abs(v[j,i] - max(seq(v[k,i],k=1..N)) ) ,i=1..M );                 Dneg[j]:=add(  abs(v[j,i] - min(seq(v[k,i],k=1..N)) ) ,i=1..M );         od;         j,k:='j','k';         Dposmin:=min(seq(Dpos[j],j=1..N));         Dnegmax:=max(seq(Dneg[j],j=1..N));         j:='j';         for j to N do:                 t[j]:=sqrt((Dpos[j]-Dposmin)^2+(Dneg[j]-Dnegmax)^2);                         od;         Vector(N,1)-sumNorm(Vector(N,t));         #Vector(N,t); end proc:

3rd method:topsis

 > topsis:=proc(X::Matrix,C::Vector)         local i,j,t,v,Dpos,Dneg,N,M;         N,M:=Dimensions(X);         #TOPSIS         for i to M do:                 for j to N do:                         v[j,i]:=C[i]*X[j,i];                 od;         od;         i,j:='i','j';         for j to N do:                 Dpos[j]:= sqrt(add( (v[j,i] - max( seq( v[j,i],j=1..N ) ))^2, i=1..M));                 Dneg[j]:= sqrt(add( (v[j,i] - min( seq( v[j,i],j=1..N ) ))^2, i=1..M));         od;         j:='j';         for j to N do:                 t[j]:= safeDivide(Dneg[j],(Dneg[j]+Dpos[j]));         od;         #Vector(N,t);         sumNorm(Vector(N,t));         end proc:

Number of methods to compare

 > numOfMethods=3;

1st input parameter of methods

 > X:=Matrix(3,3,<|<0.5,0.5,0.5>|<0.5,0.5,0.5>>);

2nd input parameter of methods

 > C:=Vector(3,1/3);

I want to analyze the difference between the methods, by calculating :

distortion1:=int(abs(terminalScore[1]_dia - terminalScore[1]_simpleWeightedSum, t=0..1), and

distortion2:=int(abs(terminalScore[1]_topsis - terminalScore[1]_simpleWeightedSum, t=0..1)

Here I create a vector of the three decision method functions

 > createFunctionVector:=proc(t)         global X,C,numOfMethods;         local f;         f[1]:=unapply(simpleWeightedSum(X,C),t);         f[2]:=unapply(dia(X,C),t);         f[3]:=unapply(topsis(X,C),t);         Vector(3,i->f[i](t)[1]); end proc:

termScores is the Vector of decision method functions

 > termScores:=createFunctionVector(t):

Now I create a procedure to differentiate the decision method functions

 > fDiffx:=proc(X,methodList)  # differentiate functions based on t         local i,tmp;         for i in methodList do:                 tmp[i]:=diff(simplify(convert(X[i],rational)),t) assuming t>=0, t<=1;         od;         Vector(3,i->tmp[i]); end proc:

call the procedure to differentiate decision method function 1 and 3, i.e., simpleWeightedSum and Topsis

 > diffTermScores:=fDiffx(termScores,[1,2,3]): # OK for 1:simpleWeightedSum and 3:topsis

ERROR happens when I try to differentiate the dia function --> How to solve this?

 > fDiffx(termScores,2): # not OK for 2: dia

Now I look the "distance" of method topsis from simpleWeightedSum

 > distanceOfMethods:=Vector(2,):

Before integration I replace undefined values to 0

 > tmp[1]:=unapply(subs(undefined=0,distanceOfMethods[1]),t):
 > tmp[2]:=unapply(subs(undefined=0,distanceOfMethods[2]),t):

I try to integrate (at least numerically) the distance of two methods to get the distortion of Topsis compared to simple weighted sum

 > distortion:=evalf(Int(tmp[1],0.0..1,epsilon=1e-4,digits=10)); # integration did not work for tmp[1]

 > distortion:=evalf(Int(tmp[2],0.0..1,epsilon=1e-4,digits=10)); # integration worked for tmp[2]

 > fdiscont(tmp[1], 0.47..0.52,10^(-3));

 > discont(tmp[1],t);

 > iscont(tmp[1], x = 0.48 .. 0.51);

 > plot(tmp[1](t),t=0.489999..0.49);

 > plot(tmp[1](t),t=0.4899995..0.49);

 > fdiscont(tmp[1],0.4899995..0.49);

 > plot(tmp[1](t),t=0.499999..0.5);

 > plot(tmp[2](t),t=0.489999..0.49);

 >
 >

question_differentia.mw

## integration skipping out dirac deltas...

Thank you, I learnt it now. I have another problem. I try to analyze the distortion of methods in different cases for the X input Matrix. For some X , the distance function (i.e., abs( D(f2)-D(f1) )) contains dirac deltas.

In the following example, I only modified X to a new Matrix (besides adding the previous recommended modification). With this X I experienced that the numerical integration returns quite soon, but only with symbolic value, and I think that it is caused by the "dirac delta" part of the function.

In general, how should we deal with this problem? I would like to have some distortion value, but maybe skipping out in the integration those x values where the value of the function to integrate is "infinite".

Can we find these x points, and integrate the function skipping out these points? Or what is a good treatment of this problem?

BR,

Zoltan Faigl

 > with('LinearAlgebra'):Testzero:= proc(O) evalb(simplify(O)=0) end:
 > safeDivide:=(x,y)->limit(x/b,b=y):
 > sumNorm:=proc(X) local k,l,xnorm,N,M,output; if (typematch(X,Matrix)) then         N,M:=Dimensions(X);         for k to M do:                 for l to N do:                         xnorm[l,k]:=safeDivide(X[l,k],add(X[i,k],i=1..N));                 od;         od;         output:=Matrix(N,M,xnorm) elif (typematch(X,Vector)) then         N:=Dimensions(X);         for l to N do:                 xnorm[l]:=safeDivide(X[l],add(X[i],i=1..N));         od;         output:=Vector(N,xnorm) end if; output; end proc:

Let's compare three score aggregation method. All are f:=(X::Matrix,C::Vector) -> TerminalScores::Vector

1st method: simple weighted sum

 > simpleWeightedSum:=proc(X::Matrix,C::Vector)         local i,j,k,l,t,N,M;         N,M:=Dimensions(X);         # simple weighted sum         for j from 1 to N do:                 t[j]:=add(C[i]*X[j,i],i=1..M);         od;         sumNorm(Vector(N,t)); end proc:

2nd method: distance to ideal alternative

 > dia:=proc(X::Matrix,C::Vector)         local i,j,k,l,t,v,Dpos,Dneg,Dposmin,Dnegmax,N,M;         N,M:=Dimensions(X);         #DiA         for i to M do:                 for j to N do:                         v[j,i]:=C[i]*X[j,i];                 od;         od;         i,j:='i','j';         for j to N do:                 Dpos[j]:=add(  abs(v[j,i] - max(seq(v[k,i],k=1..N)) ) ,i=1..M );                 Dneg[j]:=add(  abs(v[j,i] - min(seq(v[k,i],k=1..N)) ) ,i=1..M );         od;         j,k:='j','k';         Dposmin:=min(seq(Dpos[j],j=1..N));         Dnegmax:=max(seq(Dneg[j],j=1..N));         j:='j';         for j to N do:                 t[j]:=sqrt((Dpos[j]-Dposmin)^2+(Dneg[j]-Dnegmax)^2);                         od;         Vector(N,1)-sumNorm(Vector(N,t));         #Vector(N,t); end proc:

3rd method:topsis

 > topsis:=proc(X::Matrix,C::Vector)         local i,j,t,v,Dpos,Dneg,N,M;         N,M:=Dimensions(X);         #TOPSIS         for i to M do:                 for j to N do:                         v[j,i]:=C[i]*X[j,i];                 od;         od;         i,j:='i','j';         for j to N do:                 Dpos[j]:= sqrt(add( (v[j,i] - max( seq( v[j,i],j=1..N ) ))^2, i=1..M));                 Dneg[j]:= sqrt(add( (v[j,i] - min( seq( v[j,i],j=1..N ) ))^2, i=1..M));         od;         j:='j';         for j to N do:                 t[j]:= safeDivide(Dneg[j],(Dneg[j]+Dpos[j]));         od;         #Vector(N,t);         sumNorm(Vector(N,t));         end proc:

Number of methods to compare

 > numOfMethods=3;

1st input parameter of methods

 > X:=Matrix(3,3,<|<0.5,0.5,0.5>|<0.5,0.5,0.5>>);

2nd input parameter of methods

 > C:=Vector(3,1/3);

I want to analyze the difference between the methods, by calculating :

distortion1:=int(abs(terminalScore[1]_dia - terminalScore[1]_simpleWeightedSum, t=0..1), and

distortion2:=int(abs(terminalScore[1]_topsis - terminalScore[1]_simpleWeightedSum, t=0..1)

Here I create a vector of the three decision method functions

 > createFunctionVector:=proc(t)         global X,C,numOfMethods;         local f;         f[1]:=unapply(simpleWeightedSum(X,C),t);         f[2]:=unapply(dia(X,C),t);         f[3]:=unapply(topsis(X,C),t);         Vector(3,i->f[i](t)[1]); end proc:

termScores is the Vector of decision method functions

 > termScores:=createFunctionVector(t):

Now I create a procedure to differentiate the decision method functions

 > fDiffx:=proc(X,methodList)  # differentiate functions based on t         local i,tmp;         for i in methodList do:                 tmp[i]:=diff(simplify(convert(X[i],rational)),t) assuming t>0, t<1;         od;         Vector(3,i->tmp[i]); end proc:

call the procedure to differentiate decision method function 1 and 3, i.e., simpleWeightedSum and Topsis

 > diffTermScores:=fDiffx(termScores,[1,2,3]): # OK for 1:simpleWeightedSum and 3:topsis

ERROR happens when I try to differentiate the dia function --> How to solve this?

 > fDiffx(termScores,2): # not OK for 2: dia

Now I look the "distance" of method topsis from simpleWeightedSum

 > distanceOfMethods:=Vector(2,):

Before integration I replace undefined values to 0

 > tmp[1]:=unapply(subs(undefined=0,distanceOfMethods[1]),t):
 > tmp[2]:=unapply(subs(undefined=0,distanceOfMethods[2]),t):

I try to integrate (at least numerically) the distance of two methods to get the distortion of Topsis compared to simple weighted sum

 > distortion:=evalf(Int(tmp[1],0.0..1,epsilon=1e-4,digits=10)); # integration did not work for tmp[1]

 > distortion:=evalf(Int(tmp[2],0.0..1,epsilon=1e-4,digits=10)); # integration worked for tmp[2]

 > tmp[1](t):
 > plot(tmp[1](t),t=0.0..1);

 > plot(tmp[2](t),t=0.0..1);

 >
 >

question_differentia.mw