Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Solution 188736

Submitted on 9 Jan 2013 by Alfonso Nieto-Castanon

Correct

29Size
Leading solution size is 23.
This solution is locked. To view this solution, you need to provide a solution of the same size or smaller.

This solution is outdated. To rescore this solution, log in.

Test Suite

Test
Code Input and Output
1
Pass
 
%%% first test: fit to a constant
x = [1,2,3,4]';
y = rand(4,1);
f{1} = @(x) ones(size(x));
aref=mean(y);
assert(norm(fit_coefficients(f,x,y)-aref)<1e-6)

                    
2
Pass
 
%%% second test: fit to a straight line (linear regression)
x = [1,2,3,4,5]' + randn(5,1);
y = [1,2,3,4,5]' + randn(5,1);
f{1} = @(x) ones(size(x));
f{2} = @(x) x;
aref(2) = sum((x-mean(x)).*(y-mean(y)))/sum((x-mean(x)).^2);
aref(1) = mean(y)-aref(2)*mean(x);
assert(norm(fit_coefficients(f,x,y)-aref')<1e-6)

                    
3
Pass
 
%%% third test: polynomial fit
x = [1:10]' + randn(10,1);
y = -10+0.2*x-0.5*x.^2+0.4*x.^3+0.001*log(x) + 0.2*randn(10,1);
f{1} = @(x) ones(size(x));
f{2} = @(x) x;
f{3} = @(x) x.^2;
f{4} = @(x) x.^3;
aref = fliplr(polyfit(x,y,3));
assert(norm(fit_coefficients(f,x,y)-aref')<1e-6)

                    
4
Pass
 
%%% fourth test: non-polynomial fit (yes, we are that crazy)
x = [0:0.1:2*pi]';
y = 0.123 + 0.456*sin(x).*exp(0.1*x);
f{1} = @(x) ones(size(x));
f{2} = @(x) sin(x).*exp(0.1*x);
aref=[0.123 0.456]';
assert(norm(fit_coefficients(f,x,y)-aref)<1e-6)