2014-01-22 5 views
0

최소 사각 법을 사용하여 사인 함수의 근사값을 찾는 프로젝트를 수행하고 있습니다. 또한 나는 내 자신의 선택의 12 값을 사용할 수 있습니다. 내가 그것을 해결하는 방법을 알아낼 수 없기 때문에 나는 사인에 대한 테일러의 시리즈를 사용하여 다음 5 순서의 다항식으로 해결 생각.최소 제곱을 사용하는 사인의 근사값 찾기

%% Find the sine of the 12 known values 
x=[0,pi/8,pi/4,7*pi/2,3*pi/4,pi,4*pi/11,3*pi/2,2*pi,5*pi/4,3*pi/8,12*pi/20]; 
y=zeros(12,1); 
for i=1:12 
    y=sin(x); 
end 
n=12; 
j=5; 
%% Find the sums to populate the matrix A and matrix B 
s1=sum(x);s2=sum(x.^2); 
s3=sum(x.^3);s4=sum(x.^4); 
s5=sum(x.^5);s6=sum(x.^6); 
s7=sum(x.^7);s8=sum(x.^8); 
s9=sum(x.^9);s10=sum(x.^10); 
sy=sum(y); 
sxy=sum(x.*y); 
sxy2=sum((x.^2).*y); 
sxy3=sum((x.^3).*y); 
sxy4=sum((x.^4).*y); 
sxy5=sum((x.^5).*y); 
A=[n,s1,s2,s3,s4,s5;s1,s2,s3,s4,s5,s6;s2,s3,s4,s5,s6,s7; 
    s3,s4,s5,s6,s7,s8;s4,s5,s6,s7,s8,s9;s5,s6,s7,s8,s9,s10]; 
B=[sy;sxy;sxy2;sxy3;sxy4;sxy5]; 
난 FE t = PI/2 I 얻을 잘못된 결과를 테일러 급수의 값을 교체하고 해결하려고하면

그럼 MATLAB에서 제가

>> a=A^-1*B 
a = 
    -0.0248 
    1.2203 
    -0.2351 
    -0.1408 
    0.0364 
    -0.0021 

그러나,이 결과를 얻기

>> t=pi/2; 
fun=t-t^3*a(4)+a(6)*t^5 
fun = 
    2.0967 

나는 wro을하고있다. 내가 Taylor 시리즈의 a 매트릭스의 값을 대체 할 때 또는 초기 결함이 결함입니까?

참고 : 당신은 단순히 당신이 대략 그 몇 가지 x abscissae을 생성 할 일정 간격을 결정하는 최소 자승 근사 필요한 경우 내가 어떤 내장 함수

+0

당신은 원래 생각을 적어 주실 수 있습니까? 그것은 [반데르 몬데스 행렬] (http://en.wikipedia.org/wiki/Vandermonde_matrix)을 생각 나게하지만이 모든 합계를 더한 것입니다. – bdecaf

+0

나는 이것을 당신이 요구하는 것이라면 [link] (http://kobus.ca/seminars/ugrad/NM5_curve_s02.pdf)로 사용했다. 그렇지 않다면, 내가 더 잘 설명 할 수 있도록 말해주십시오. –

+0

아. 그렇다면 테스트 기능이 잘못되었습니다. 모든 a를 사용해야합니다. – bdecaf

답변

0

을 사용할 수 없습니다 간격 (예 : linspace을 사용하는 동일 간격의 가로 좌표 - 또는 예에서와 같이 균일하지 않은 간격). 그런 다음 당신이되도록 각 지점에서 사인 함수를 평가

y = sin(x) 

그리고 단순히 최소 제곱을 얻기 위해 polyfit 기능 (here 문서화)를 사용

b = polyfit(x,y,n) 

n는 다항식의 정도 매개 변수 당신 근사치를 원한다. 그런 다음 polyval (here 설명)을 사용하여 x의 다른 값에서 근사값을 얻을 수 있습니다.

편집 : polyfit을 사용할 수 없으므로 최소 제곱근 근사법에 대한 Vandermonde 행렬을 직접 생성 할 수 있습니다 (아래는 x이 행 벡터라고 가정 함).

A = ones(length(x),1); 
x = x'; 
for i=1:n 
    A = [A x.^i]; 
end 

은 단순히 그냥 개념을 설명하기 위해 쓴 위의 당신은 명확하게 서투른 반데 몬드 세대 루프를 최적화 할 수 있습니다

b = A\y; 

사용하여 최소 제곱 매개 변수를 얻을 수 있습니다. 더 나은 수치 안정성을 위해서는 첫 번째 종류의 Chebyshev 다항식과 같은 멋진 직교 다항식 시스템을 사용하는 것이 좋습니다. 매트릭스를 사용할 수 없더라도 \ 함수를 나눈다면 QR factorisation의 구현을 코드화하고 그런 식으로 시스템을 해결해야합니다 (또는 다른 수치 적으로 안정한 방법).

+0

'polyfit'또는 다른 내장 기능. –