help-octave
[Top][All Lists]

Re: Help in parameter estimation

 From: Bharath R Subject: Re: Help in parameter estimation Date: Wed, 31 Aug 2016 09:00:43 +0200

Dear Nicholas,

Thank you very much for the comments. It worked perfectly fine when I did put @f in leasqr solver instead of f as described in the help section of Octave. My function is basically computing the room temperature based on the energy balance of the room. I'm trying to estimate the parameters in the equation and then compare the measured and calculated room temperature. When I run with the initial guesses of parameters, the temperature function is deviating a lot. So, I am right now trying to calculate a good initial guess for my parameters. Also, now that I got my function running, I am running the model with "nonlin_curvefit".

Thanks again! Regards,
Bharath

On Tue, Aug 30, 2016 at 5:56 PM, Nicholas Jankowski wrote:
error: leasqr: subscript indices must be either positive integers less than 2^31 or logicals
>
>
>> error: called from
>>     leasqr at line 329 column 9
>>
>

Since it's giving that error pointing out line 329 within leasqr I don't think he's shadowing the function.

Bharath:

ok, I removed the definitions for x, p and pin from the function f, as there's no point in passing it values of f if the function is setting them anyway.  So:

function F = f(x,p)
typeinfo(x)
m(1,1)=20;
for i=1:length(x)
m(i+1,1)=((p(1)-m(i,1))/(p(2)*p(3))+((p(4)*x(i,2)*(x(i,3)-m(i,1)))+(p(5)*x(i,4))+(p(6)*x(i,5)))/(p(3))+p(7))+m(i,1);
endfor
F=m(2:end);
endfunction

>>x = [19.54533     0.00000    21.33717     0.00000     0.60320;
19.30000     0.00000    21.28817     0.00000     0.66134;
19.30000     0.00000    20.55900     0.00000     0.71948;
19.13750     0.00000    21.21883     0.00000     0.77762;
19.00000     0.00000    20.68650     0.00000     0.83576];

>> p = [20, 1, 100, 1, 0.001, 1, 0.01];

>> pin=[p(1);p(2);p(3);p(4);p(5);p(6);p(7)];

>> f(x,p)
ans = matrix
ans =

20.016
20.032
20.049
20.067
20.084

>> [L,p,cvg,iter]=leasqr(x,y,pin,f)
error: 'y' undefined near line 1 column 24
error: evaluating argument list element number 2

oops, forgot to ask for testvalues for y.

for now, just using y = f(x,p)

>> [L,p,cvg,iter]=leasqr(x,f(x,p),pin,f)

>> leasqr(x,f(x,p),pin,f)
ans = matrix
error: 'x' undefined near line 2 column 12
error: called from
f at line 2 column 3
error: evaluating argument list element number 1
error: called from
f at line 2 column 3
error: evaluating argument list element number 4

NOW, adding the @f as I said before (it also works with 'f' ):

>> [L,p,cvg,iter]=leasqr(x,f(x,p),pin,@f)
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
ans = matrix
L =

20.016
20.032
20.049
20.067
20.084

p =

2.0000e+001
1.0000e+000
1.0000e+002
1.0000e+000
1.0000e-003
1.0000e+000
1.0000e-002

cvg =  1
iter =  1

so, it works, and once the input arguments were straightened out you get a result.  Since I don't know what your data and function really are, I'm not in a position to evaluate whether the output is 'right'.