[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
leasqr problem
From: |
Jose Rodriguez |
Subject: |
leasqr problem |
Date: |
Sat, 24 Jan 2009 12:12:45 +0000 |
Hello
I'm trying to solve a problem with leasqr, where the observed
value, instead of being a set of points y=f(x), is the result of a
definite integral. I found that I can use leasqr if I adjust the
dimensions of the function to fit and its expected values to the
dimension of the x range:
x=(0:0.1:pi);
P=@(x) 1/2 * ( 3*cos(x).^2-1 );
F=inline( " ones ( size(x,1), 1 ) * trapz( x, P(x).*
exp(-a*P(x)).*sin(x) ) ", "x", "a" );
y=0.5 * ones ( size(x,1), 1 );
pin=1;
[f,p,kvg,iter,corp,covp,covr,stdresid,Z,r2]=leasqr(x, y, pin, F);
If I run this I obtain the value 'a' for which the integral:
trapz( x, P(x) .* exp(-a*P(x)) .* sin(x) )
is 0.5.
My problem is that I also want to include a normalisation
condition, like:
1 = trapz( x, exp(-a*P(x)).*sin(x) )
And I thought that I could build F in two columns, the first of
them identical to what I've written above and the second with the
normalisation condition, adjusting again the number of rows to the
x dimension:
F=inline( " [ ones ( size(x,1), 1 ) * trapz( x, P(x).*
( a(1)*exp(-a(2)*P(x)).*sin(x) ) ones ( size(x,1), 1 ) *
trapz( x, a(1)*exp(-a(2)*P(x)) .*sin(x) ) ] ", "x", "a" );
y=[0.5*ones(size(x,1),1) ones(size(x,1),1)];
pin=[1 1]';
But this triggers an error from leasqr.m:
"input(x)/output(y) data must have same number of
rows"
error: evaluating if command near line 162, column 1
because the script converts all the vectors to columns and thus
size(y(:)) is the double of size(x,1).
Could somebody give me some pointers as to how to proceed? Or am I
completely out of track?
Regards
Jose
- leasqr problem,
Jose Rodriguez <=