Data.xlsx

XY.mw

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