## Global Optimization - XYZ problem...

Data.xlsx

XYZ.mw

Hello,

I'm using the Global Optimization Toolbox to solve some examples and fit equations to a given data, finding "unknown" parameters. I generated the data on Excel, and I already know the values of these parameters.

The XY case is (there is no problem here, I just put as a example I follow):

> with(GlobalOptimization);
> with(plots);

> X := ExcelTools:-Import("F:\\Data.xlsx", "Plan1", "I5:I25");
> Y := ExcelTools:-Import("F:\\Data.xlsx", "Plan1", "J5:J25");

> XY := zip( (X, Y) -> [X, Y] , X, Y);
> fig1 := plot(XY, style = point, view = [.9 .. 3.1, 6 .. 40]);

> Model := A+B*x+C*x^2+D*cos(x)+E*exp(x):
> VarInterv := [A = 0 .. 10, B = 0 .. 10, C = -10 .. 10, D = 0 .. 10, E = 0 .. 10];

> ModelSubs := proc (x, val)

subs({x = val}, Model)

end proc;

> SqEr := expand(add((ModelSubs(x, X(i))-Y(i))^2, i = 1 .. 21));
> CoefList := GlobalSolve(SqEr, op(VarInterv), timelimit = 5000);

> Model := subs(CoefList[2], Model):

I could find the right values of A, B, C, D and E.

My problem is in the XYZ case, where I don't know how to "write" the right instruction. My last attempt was:

> with(GlobalOptimization);
> with(plots);

> X := ExcelTools:-Import("F:\\Data.xlsx", "Plan1", "Q5:Q25"); X2 := convert(X, list);
> Y := ExcelTools:-Import("F:\\Data.xlsx", "Plan1", "R5:R25"); Y2 := convert(Y, list);
> Z := ExcelTools:-Import("F:\\Data.xlsx", "Plan1", "S5:S25"); Z2 := convert(Z, list);
> NElem := numelems(X);

> pointplot3d(X2, Y2, Z2, axes = normal, labels = ["X", "Y", "Z"], symbol = box, color = red);

> Model := A*x+B*y+C*sin(x*y)+D*exp(x/y);

> VarInterv := [A = 0 .. 10, B = 0 .. 10, C = 0 .. 10, D = 0 .. 10];

> ModelSubs:=proc({x,y},val)

subs({(x,y)=val},Model)

end proc:
Error, missing default value for option(s)

> SqEr := expand(add((ModelSubs(x, y, X(i), Y(i))-Z(i))^2, i = 1 .. NElem));
> CoefList := GlobalSolve(SqEr, op(Range), timelimit = 5000);
Error, (in GlobalOptimization:-GlobalSolve) finite bounds must be provided for all variables

My actual problem involves six equations, six parameters and four or five independent variables on each equation, but I alread developed a way to solve two or more equations simultaneously.

Thanks

## Plotting a Spline...

Hello, Mapleprimes' users.

I am using spline to fit a function to a given data (instead of polynomial). I created two examples with data of y=cos(x).

The first example has a domain X=0..10 and its result is satisfactory.

Ths second example has a larger domain, X=0..15, but I couldn't plot the spline function. The function fits well, but its line ends at X=~10.

Then I ckecked this spline assigning several values of X, and all the results are correct. The problem is on the plot step.

My mw file is:

> restart;
> with(plots);
> with(CurveFitting);
> plotsetup(default);

First Exemple Data (Y=cos(X)):
> X := [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
> Y := [1, .54, -.41, -.99, -.65, .28, .96, .75, -.14, -.91, -.83];
> Piece1 := spline(X, Y, x, 2);
> fig1 := plot(Piece1, view = [0 .. 15, -1 .. 1]);
> fig2 := pointplot(X, Y);
> display(fig1, fig2);
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Second Example Data (Y=cos(X))::
> X := [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
> Y := [1, .54, -.41, -.99, -.65, .28, .96, .75, -.14, -.91, -.83, 0., .84, .91, .13, -.76];
> Piece2 := spline(X, Y, x, 2);
> fig3 := plot(Piece2, view = [0 .. 15, -1 .. 1]);
> fig4 := pointplot(X, Y);
> display(fig3, fig4);
> test := unapply(Piece2, x);
> test(15);

test(15)=-0.76    #correct value!

My actual problem involves data from X=0 to X=300, and I have the same issue in this case.

Thanks.

## algsubs with subscripts and powers...

When attempting to use algsubs with a subscripted expression involving powers I am running into a problem.

I have assigned a numerical value to n, and I have a symbol subscripted with n+1 and raised to a power.

In the original expression I have a factor of the form: P^q + R_n^q which I should like to replace with the symbol B.

> n:= 2

> P^q + R_(n+1)^q

> algsubs(P^q + R_(n+1)^q = B, %)

This last input leads to the error message:

Error, (in algsubs) no variables appearing rationally in pattern.

If I attempt to use algsubs on a subscripted symbol which is not raised to a power, the result works. Is there a cure?

## how to do isprime command in maple?...

Find the product of the square root of all prime numbers less than 100.
Hint: The function isprime determines the primality of an integer.

## Differential Equation with Homogeneous Coefficient...

Can anyone tell me how to use dsolve to find the solution to the problem in the attachment.  It is faily easy to do using substitution for homogeneous coefficients, but dsolve seems to put out a very complicated solution to the problem.

 >
 >
 (1)
 >
 (2)
 >

## Matrix evaluation differ on i386 and amd64 platfor...

THE FOLLOWING CODE

restart;

A:=Matrix([[ a , b ], [ c , d ]]);

a:=1; b:=0; c:=0; d:=1;

A;

produces differents results under MAPLE 16  linux i386 and under MAPLE 16  linux amd64

in the first case the last evalution has the following printed output:

on the second machine the printed output is

Does anybody has an explication; I thought that the "coorect behaviour was the first one since tables use last-name evalutation. But now I am puzzled.

## A Problem with LSSOLVE for ODE...

Following my previous question

http://www.mapleprimes.com/questions/200627-Lssolve-Midpoint

I wrote the following code

restart:
Phiavg:=0.06;
lambda:=0.05;
Ha:=0;
NBT:=0.5;
Nr:=500;
#N[bt]:=cc*NBT+(1-cc)*4; ## cc between 0 and 1
N[bt]:=cc*NBT+(1-cc^2)*0.75;

0.06
0.05
0
0.5
500
2
0.5 cc + 0.75 - 0.75 cc
eq1:=diff(u(eta),eta,eta)+1/(mu(eta)/mu1[w])*(sigma-Nr*(phi(eta)-phi1[w])-(1-phi(eta))*T(eta)-Ha^2*u(eta))+((1/mu(eta)*(mu_phi*diff(phi(eta),eta)))*diff(u(eta),eta));
eq2:=diff(T(eta),eta)-1/(k(eta)/k1[w]);
eq3:=diff(phi(eta),eta)-phi(eta)/(N[bt]*(1-gama1*T(eta))^2)*diff(T(eta),eta);
/  d   /  d         \\      1
|----- |----- u(eta)|| + ------- (mu1[w] (sigma - 500 phi(eta)
\ deta \ deta       //   mu(eta)

+ 500 phi1[w] - (1 - phi(eta)) T(eta)))

/  d           \ /  d         \
mu_phi |----- phi(eta)| |----- u(eta)|
\ deta         / \ deta       /
+ --------------------------------------
mu(eta)
/  d         \   k1[w]
|----- T(eta)| - ------
\ deta       /   k(eta)
/  d         \
phi(eta) |----- T(eta)|
/  d           \                       \ deta       /
|----- phi(eta)| - ----------------------------------------------
\ deta         /   /                       2\                   2
\0.5 cc + 0.75 - 0.75 cc / (1 - gama1 T(eta))
mu:=unapply(mu1[bf]*(1+a[mu1]*phi(eta)+b[mu1]*phi(eta)^2),eta):
k:=unapply(k1[bf]*(1+a[k1]*phi(eta)+b[k1]*phi(eta)^2),eta):
rhop:=3880:
rhobf:=998.2:
cp:=773:
cbf:=4182:
rho:=unapply(  phi(eta)*rhop+(1-phi(eta))*rhobf ,eta):
c:=unapply(  (phi(eta)*rhop*cp+(1-phi(eta))*rhobf*cbf )/rho(eta) ,eta):
mu_phi:=mu1[bf]*(a[mu1]+2*b[mu1]*phi(eta)):
gama1:=0.00:
a[mu1]:=39.11:
b[mu1]:=533.9:
mu1[bf]:=9.93/10000:
a[k1]:=7.47:
b[k1]:=0:
k1[bf]:=0.597:
zet:=1:
phi1[w]:=phi0:
mu1[w]:=mu(0):
k1[w]:=k(0):

eq1:=subs(phi(0)=phi0,eq1);
eq2:=subs(phi(0)=phi0,eq2);
eq3:=subs(phi(0)=phi0,eq3);
/  d   /  d         \\   //
|----- |----- u(eta)|| + \\0.0009930000000 + 0.03883623000 phi0
\ deta \ deta       //

2\
+ 0.5301627000 phi0 / (sigma - 500 phi(eta) + 500 phi0

\//
- (1 - phi(eta)) T(eta))/ \0.0009930000000

2\
+ 0.03883623000 phi(eta) + 0.5301627000 phi(eta) / +

/                                       /  d           \ /  d
|(0.03883623000 + 1.060325400 phi(eta)) |----- phi(eta)| |-----
\                                       \ deta         / \ deta

\\//
u(eta)|| \0.0009930000000 + 0.03883623000 phi(eta)
//

2\
+ 0.5301627000 phi(eta) /
/  d         \     0.597 + 4.45959 phi0
|----- T(eta)| - ------------------------
\ deta       /   0.597 + 4.45959 phi(eta)
/  d         \
1. phi(eta) |----- T(eta)|
/  d           \               \ deta       /
|----- phi(eta)| - --------------------------
\ deta         /                           2
0.5 cc + 0.75 - 0.75 cc
Q:=proc(pp2,fi0) option remember; local res,F0,F1,F2,a,INT0,INT10,B;
print(pp2,fi0);
if not type([pp2,fi0],list(numeric)) then return 'procname(_passed)' end if;
res := dsolve(subs(sigma=pp2,phi0=fi0,{eq1=0,eq2=0,eq3=0,u(1)=-lambda*D(u)(1),u(0)=lambda*D(u)(0),phi(0)=phi0,T(0)=0}), numeric,output=listprocedure,initmesh=10, continuation=cc);
F0,F1,F2:=op(subs(res,[u(eta),phi(eta),T(eta)]));
INT0:=evalf(Int((abs(F0(eta)),eta=0..1)));
INT10:=evalf(Int(abs(F0(eta))*F1(eta),eta=0..1));
a[1]:=evalf(Int(F0(eta)*(F1(eta)*rhop+(1-F1(eta))*rhobf),eta=0..1));
#a[1]:=evalf(Int((F0(eta),eta=0..1)));
a[2]:=(INT10/INT0-Phiavg)/Phiavg; #relative
[a[1],a[2]]
end proc:
Q1:=proc(pp2,fi0) Q(_passed)[1] end proc;
Q2:=proc(pp2,fi0) Q(_passed)[2] end proc;
proc(pp2, fi0)  ...  end;
proc(pp2, fi0)  ...  end;
#Q(116,0.0041);
#tempe:=Optimization:-LSSolve([Q1,Q2],initialpoint=[130,0.01]);
#tempe:=Optimization:-LSSolve([Q1,Q2],initialpoint=[43.55,0.39]);
tempe:=Optimization:-LSSolve([Q1,Q2],initialpoint=[5.65,0.00036]);
#tempe:=Optimization:-LSSolve([Q1,Q2],initialpoint=[12,0.003]); # khoob ba 1
#tempe:=Optimization:-LSSolve([Q1,Q2],initialpoint=[5,0.01]);
HFloat(5.65), HFloat(3.6e-4)
HFloat(5.650000070103341), HFloat(3.6e-4)
HFloat(5.65), HFloat(3.600105456508193e-4)
HFloat(29.63242379055208), HFloat(0.0205927592420527)
HFloat(12.803902258015825), HFloat(0.006395385884750864)
HFloat(12.803902403534572), HFloat(0.006395385884750864)
HFloat(12.803902258015825), HFloat(0.00639539649402585)
HFloat(12.804004931505949), HFloat(0.0063954867657199386)
HFloat(12.804107604996073), HFloat(0.006395587646689013)
HFloat(12.80400483062498), HFloat(0.006498160255844027)
HFloat(12.803902157134855), HFloat(0.006498059374874952)
HFloat(-1.0206939292143726), HFloat(-3.32764179807047e-4)
HFloat(-1.0206939079125088), HFloat(-3.32764179807047e-4)
HFloat(-1.0206939292143726), HFloat(-3.327536344433438e-4)
HFloat(18.749500943683863), HFloat(0.01993840615828979)
HFloat(3.9953780262640484), HFloat(0.00481041471606933)
HFloat(6.166152606930136), HFloat(0.00703619658484674)
HFloat(7.3193201827812295), HFloat(0.008218585352824569)
Error, (in Optimization:-LSSolve) complex value encountered
sigma:=tempe[2](1);
tempe[2](1)
phi0:=tempe[2](2);
tempe[2](2)
with(plots):

res2 := dsolve({eq1=0,eq2=0,eq3=0,u(1)=-lambda*D(u)(1),u(0)=lambda*D(u)(0),phi(0)=phi0,T(0)=0}, numeric,output=listprocedure,continuation=cc);
Error, (in dsolve/numeric/process_input) boundary conditions specified at too many points: {0, 1, 2}, can only solve two-point boundary value problems
G0,G1,G2:=op(subs(res2,[u(eta),phi(eta),T(eta)])):
ruu:=evalf((Int(abs(G0(eta))*(G1(eta)*rhop+(1-G1(eta))*rhobf ),eta=0..zet)))/(Phiavg*rhop+(1-Phiavg)*rhobf);
phb:=evalf((Int(abs(G0(eta))*G1(eta),eta=0..1))) / evalf((Int(abs(G0(eta)),eta=0..1))) ;
TTb:=evalf(Int(abs(G0(eta))*G2(eta)*(G1(eta)*rhop*cp+(1-G1(eta))*rhobf*cbf ),eta=0..1))/evalf(Int(abs(G0(eta))*(G1(eta)*rhop*cp+(1-G1(eta))*rhobf*cbf ),eta=0..1));
Error, invalid input: subs received res2, which is not valid for its 1st argument
/  /1.                                        \
| |                                           |
0.0008538922115 | |    |G0(eta)| (2881.8 G1(eta) + 998.2) deta|
| |                                           |
\/0.                                          /
/1.
|
|    |G0(eta)| G1(eta) deta
|
/0.
----------------------------
/1.
|
|
|    |G0(eta)| deta
/
0.
/Int(
1                               |
------------------------------------------------------------- |
/1.                                                         |
|                                                            \
|              /             6                       6\
|    |G0(eta)| \-1.1752324 10  G1(eta) + 4.1744724 10 / deta
/
0.

/             6                       6\ , eta = 0. .. 1.)
|G0(eta)| G2(eta) \-1.1752324 10  G1(eta) + 4.1744724 10 /

\
|
|
|
/
#rhouu:=evalf((Int((G1(eta)*rhop+(1-G1(eta))*rhobf)*G0(eta),eta=0..1)));

odeplot(res2,[[eta,u(eta)/ruu],[eta,phi(eta)/phb],[eta,T(eta)/TTb]],0..1);
#odeplot(res2,[[eta,u(eta)],[eta,phi(eta)],[eta,T(eta)]],0..1);
Error, (in plots/odeplot) input is not a valid dsolve/numeric solution
rhou:=evalf((Int(abs(G0(eta))*(G1(eta)*rhop+(1-G1(eta))*rhobf ),eta=0..zet))):

Nub:=(1/G2(1))*(((1+a[k1]*abs(G1(0))+b[k1]*abs(G1(0))^2)/(1+a[k1]*Phiavg+b[k1]*Phiavg^2)));
0.6905123602 (1 + 7.47 |G1(0)|)
-------------------------------
G2(1)
(rhs(res2(0.0000000000001)[3])-rhs(res2(0)[3]))/0.0000000000001;
Error, invalid input: rhs received res2(0.1e-12)[3], which is not valid for its 1st argument, expr
sigma;
tempe[2](1)
NBT;
0.5
>

the above code has been worked for NBT=0.6 and higher, whereas as NBT decreases, the code doesnt converge easily.

How can I fix this problem?

Amir

## Modelling pendulums in maple...

I'm trying to model a simple pendulum. I have arrived at this code which gives me an animation of a point swinging.

To analyse the pendulum I want to plot a graph of phi against time, but do not know how to take readings from my animation to plot a graph with.

Thanks.

## Change in formula when a certain y-value is reache...

Hello,

I was wondering how (or what is the best way) to write a worksheet in which a change of formula is used when a certain value on the y-axis is reached.

So for example: if there is a mass-spring system with damping in it, I would like to change the value of the damping when the displacement/velocity/acceleration has reached a certain value.
So when I apply a force to the mass-spring system, and the acceleration for example is LOWER than 0.2 m/s^2 I use a value of X % damping, but when the value of the acceleration is HIGER than 0.2 m/s^2 I want to apply Y % damping. So in time the curve will increase (when low damping is used) and the curve will decrease (because high damping is used, because the y-value is higher than 0.2 m/s^2), and so on...

I hope somebody has a 'simple' idea. I know what I want to do, but I don't know how to put this down in a formula which I can write in Maple.

Greetings,
Frank

## How to fit or approximate a complicated function b...

Hi everyone,

I have a very complicated function y with only one independent variable x, and want to fit or approximate it by a simpler function, say polynomial. Many books or maple reference seem to tell how to fit a set of data instead of a given function. But the argument x in the function is assumed to be continuous other than discrete, so I don't know whether it is possible to express datax in form of x's range such as 0..1, and express datay in form of the function. After that , maybe I can fit the two created data sets by a polynomial function.

Or, does anyone have a better or more direct way to do the fitting linking two fucntions?

I am appreciated for your help.

Best,

GOODLUCK

## Mapple 16 mathematical function...

hello. before I used Mapple 15. But then Ive run Mapple 16 and now Ive a problem. I cant use this program. I open the program, everthing is in the rule, but if I want to write any mathemathical function, or a letter, such as- x or x+2, the program doest give any reaction. program only gives reaction the numbers.

Please, help me. (my english isnt very good, and I dont know I`ve explained my opinion).

## Lssolve- midpoint...

Hi,

I get the error in the following code

restart:

gama1:=0.01:

zet:=0;
#phi0:=0.00789:
Phiavg:=0.02;
lambda:=0.01;
Ha:=1;

0
0.02
0.01
1
rhocu:=2/(1-zet^2)*int((1-eta)*rho(eta)*c(eta)*u(eta),eta=0..1-zet):

eq1:=diff(u(eta),eta,eta)+1/(mu(eta)/mu1[w])*(1-Ha^2*u(eta))+((1/(eta)+1/mu(eta)*(mu_phi*diff(phi(eta),eta)))*diff(u(eta),eta));
eq2:=diff(T(eta),eta,eta)+1/(k(eta)/k1[w])*(-2/(1-zet^2)*rho(eta)*c(eta)*u(eta)/(p2*10000)+( (a[k1]+2*b[k1]*phi(eta))/(1+a[k1]*phi1[w]+b[k1]*phi1[w]^2)*diff(phi(eta),eta)+k(eta)/k1[w]/(eta)*diff(T(eta),eta) ));
eq3:=diff(phi(eta),eta)+phi(eta)/(N[bt]*(1+gama1*T(eta))^2)*diff(T(eta),eta);
/  d   /  d         \\   mu1[w] (1 - u(eta))
|----- |----- u(eta)|| + -------------------
\ deta \ deta       //         mu(eta)

/             /  d           \\
|      mu_phi |----- phi(eta)||
| 1           \ deta         /| /  d         \
+ |--- + -----------------------| |----- u(eta)|
\eta           mu(eta)        / \ deta       /
/      /
|      |
/  d   /  d         \\     1    |      |  rho(eta) c(eta) u(eta)
|----- |----- T(eta)|| + ------ |k1[w] |- ----------------------
\ deta \ deta       //   k(eta) |      |         5000 p2
\      \

/  d           \
(a[k1] + 2 b[k1] phi(eta)) |----- phi(eta)|
\ deta         /
+ -------------------------------------------
2
1 + a[k1] phi1[w] + b[k1] phi1[w]

/  d         \\\
k(eta) |----- T(eta)|||
\ deta       /||
+ ---------------------||
k1[w] eta      ||
//
/  d         \
phi(eta) |----- T(eta)|
/  d           \            \ deta       /
|----- phi(eta)| + ------------------------
\ deta         /                          2
N[bt] (1 + 0.01 T(eta))
mu:=unapply(mu1[bf]*(1+a[mu1]*phi(eta)+b[mu1]*phi(eta)^2),eta):
k:=unapply(k1[bf]*(1+a[k1]*phi(eta)+b[k1]*phi(eta)^2),eta):
rhop:=3880:
rhobf:=998.2:
cp:=773:
cbf:=4182:
rho:=unapply(  phi(eta)*rhop+(1-phi(eta))*rhobf ,eta):
c:=unapply(  (phi(eta)*rhop*cp+(1-phi(eta))*rhobf*cbf )/rho(eta) ,eta):
mu_phi:=mu1[bf]*(a[mu1]+2*b[mu1]*phi(eta)):

a[mu1]:=39.11:
b[mu1]:=533.9:
mu1[bf]:=9.93/10000:
a[k1]:=7.47:
b[k1]:=0:
k1[bf]:=0.597:
zet:=0.5:
#phi(0):=1:
#u(0):=0:
phi1[w]:=phi0:
N[bt]:=0.2:
mu1[w]:=mu(0):
k1[w]:=k(0):

eq1:=subs(phi(0)=phi0,eq1):
eq2:=subs(phi(0)=phi0,eq2):
eq3:=subs(phi(0)=phi0,eq3):

#A somewhat speedier version uses the fact that you really need only compute 2 integrals not 3, since one of the integrals can be written as a linear combination of the other 2:
Q:=proc(pp2,fi0) local res,F0,F1,F2,a,INT0,INT10,B;
global Q1,Q2;
print(pp2,fi0);
if not type([pp2,fi0],list(numeric)) then return 'procname(_passed)' end if:
res := dsolve(subs(p2=pp2,phi0=fi0,{eq1=0,eq2=0,eq3=0,u(1)=lambda/(phi(1)*rhop/rhobf+(1-phi(1)))*D(u)(1),D(u)(0)=0,phi(1)=phi0,T(1)=0,D(T)(1)=1}), numeric,output=listprocedure):
F0,F1,F2:=op(subs(res,[u(eta),phi(eta),T(eta)])):
INT0:=evalf(Int((1-eta)*F0(eta),eta=0..1-zet));
INT10:=evalf(Int((1-eta)*F0(eta)*F1(eta),eta=0..1-zet));
B:=(-cbf*rhobf+cp*rhop)*INT10+ rhobf*cbf*INT0;
a[1]:=2/(1-zet^2)*B-10000*pp2;
a[2]:=INT10/INT0-Phiavg;
Q1(_passed):=a[1];
Q2(_passed):=a[2];
if type(procname,indexed) then a[op(procname)] else a[1],a[2] end if
end proc;
#The result agrees very well with the fsolve result.
#Now I did use a better initial point. But if I start with the same as in fsolve I get the same result in just about 2 minutes, i.e. more than 20 times as fast as fsolve:

Q1:=proc(pp2,fi0) Q[1](_passed) end proc;
Q2:=proc(pp2,fi0) Q[2](_passed) end proc;
Optimization:-LSSolve([Q1,Q2],initialpoint=[6.5,exp(-1/N[bt])]);

proc(pp2, fi0)  ...  end;
proc(pp2, fi0)  ...  end;
proc(pp2, fi0)  ...  end;
HFloat(6.5), HFloat(0.006737946999)

the error is :

Error, (in Optimization:-LSSolve) system is singular at left endpoint, use midpoint method instead

how can I fix it.

Thanks

Amir

## Strange for...while loop behavior?...

Or I didn't get something right? This is with Maple 16.02 on a Mac:

> for i from 1 to 10 while i<=5 do print(i) end do; #works all right
> for i from 1 to 10 while i>=5 do print(i) end do; #nothing shows up?

## logarithmic inequality...

I'm trying to solve the following inequality:

ln(x+1)<x^2-1

but the solve command returns:

"Warning, solutions may have been lost"

Can someone halp me?

Thank you.

Carmelita