Question: How do I use non linear curve fitting with an extra condition for the fitting parameters?

Hello,

I have a problem using the NonlinearFit function from the Statistics package in Maple 2018.

I want to fit an exponential function which is non-linear in the parameters. The function in itself is working fine but i want to implement an extra condition on the parameters that are fitted. I already implemented the range of each parameter which is from 0 to 1, but I also want to implement the following condition:

a + b + c = 1.0
 

This is the code that i am using:

with(Statistics);
X := Vector([0, 100, 200, 300, 400, 500], datatype = float);
Y := Vector([0.2e-2, 0.5e-2, 0.7e-2, 0.75e-2, 0.77e-2, 0.8e-2], datatype = float);
nlfit := NonlinearFit(epsfunc, X, Y, t, parameterranges = [a = 0 .. 1, b = 0 .. 1, c = 0 .. 1], initialvalues = [a = .2, b = .2, c = .2], output = [parametervalues, leastsquaresfunction]);

 

It there a way to implement the additional condition that a+b+c=1.0?

 

Thanks!

Joa

 

 

Edit:

Epsfunc is the result of solving an ODE using dsolve:

the following code is used:

restart;

eq1 := x(t)+(t1+t2)*(diff(x(t), t))+t1*t2*(diff(x(t), t, t)) = (n1+n2)*(diff(eps(t), t))+(n1*t2+n2*t1)*(diff(eps(t), t, t));
tr := n1*n2*(E1+E2)/((n1+n2)*E1*E2);
x := proc (t) options operator, arrow, function_assign; x0 end proc;
solution := dsolve({eq1, eps(0) = x0/(E1+E2), (D(eps))(0) = x0*((n1/E1+n2/E2)/(n1+n2)-1/(E1+E2))/tr}, eps(t)); assign(solution);


E := 500;
E1 := a*E; E2 := b*E; t1 := 100; t2 := c*t1; n1 := E1*t1; n2 := E2*t2; x0 := 2;
epsfunc := eval(eps(t));
 

Please Wait...