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(:);