Date: Jan 23, 2013 4:18 PM
Author: Derek Goring
Subject: Re: Single Trendline for multiple datasets

On Thursday, January 24, 2013 10:03:08 AM UTC+13, Charlotte  wrote:
> TideMan <mulgor@gmail.com> wrote in message <5ee51095-fef4-4353-8f44-4474a719180f@googlegroups.com>...
>

> > On Thursday, January 24, 2013 9:24:08 AM UTC+13, Charlotte wrote:
>
> > > I have a plot with multiple datasets plotted, and would like to plot on top a single trendline for all the datasets - is there an easy way to do this?
>
> >
>
> > 1. Assemble all the data into two vectors, x and y
>
> > x=[x1(:);x2(:); etc ];
>
> > 2. Fit a line to the data using least squares:
>
> > coef=[x ones(length(x),1)]\y;
>
> > 3. Define the line:
>
> > xfit=[min(x) max(x)];
>
> > yfit=coef(1)*xfit + coef(2);
>
> > 4. Plot
>
> > plot(x,y,'bo',xfit,yfit,'r-')
>
>
>
>
>
> thank you very much for your reply - I get an error on the coef line:
>
> ??? Error using ==> horzcat
>
> CAT arguments dimensions are not consistent.
>
>
>
> Error in ==> Postplotmultiples_CAD at 44
>
> coef=[x ones(length(x),1)]\y;
>
>
>
> fyi - my x vector has multiple instances of the same value
>
>
>
> so my y vector will be something like [332.456 345.321 234.543 453.456, etc.]
>
> and my x will be [1 2 1 2, etc.]
>
>
>
> any help much appreciated!


Your x is a row vector, whereas ones(length(x),1) is a column vector.
You need to make them consistent by transposing (append an apostrophe):
coef=[x' ones(length(x),1)]\y';
alternatively:
coef=[x(:) ones(length(x),1)]\y(:);