polyfit 및 polyval을 사용하지 않고 일부 데이터에 선을 맞추려고합니다. 나는 이것을 구현하는 방법에 대한 좋은 도움을 이미 받았고 간단한 죄 함수로 작동하도록했습니다. 그러나, 내가 적합하려고하는 함수에 적용될 때, 그것은 작동하지 않습니다. 여기 내 코드는 다음과 같습니다.MATLAB 피팅 함수
clear all
clc
lb=0.001; %lowerbound of data
ub=10; %upperbound of data
step=.1; %step-size through data
a=.03;
la=1482/120000; %1482 is speed of sound in water and 120kHz
ep1=.02;
ep2=.1;
x=lb:step:ub;
r_sq_des=0.90; %desired value of r^2 for the fit of data without noise present
i=1;
for x=lb:step:ub
G(i,1)= abs(sin((a/la)*pi*x*(sqrt(1+(1/x)^2)-1)));
N(i,1)=2*rand()-1;
Ghat(i,1)=(1+ep1*N(i,1))*G(i,1)+ep2*N(i,1);
r(i,1)=x;
i=i+1;
end
x=r;
y=G;
V=[x.^0];
Vfit=[x.^0];
for i=1:1:1000
V = [x.^i V];
c = V \ y;
Vfit = [x.^i Vfit];
yFit=Vfit*c;
plot(x,y,'o',x,yFit,'--')
drawnow
pause
end
처음 두 섹션은 변수와 기능을 정의하는 것입니다. 두 번째 for 루프는 내가 적합하게 만드는 곳입니다. 보시다시피, 나는 적합을보기 위해 매 n 번째 주문 이후에 일시 중지했습니다.
작동하지 않습니다. 여기에는 두 가지 문제가 있습니다. 우선, 최대 차수 다항식의 1000은 좋은 생각이 아닙니다. 약 100 개의 데이터 만 생성하므로 차수가 <100 인 다항식에 적합해야합니다. 둘째, 적합하려고하는 함수가 있습니다. 분화가 불가능하고 빠르게 진동하는 모서리. 이것은 다항식 피팅을 어렵거나 부정확하게 만듭니다. – David
@ David 나는 왜 그것이 그것을 정확하게 맞추지 않는지에 대해 이해할 것을 본다. polyfit 및 polyval 함수처럼 작동하도록 구현할 수있는 함수가 더 있습니까? 아니면 함수 때문에 불가능합니까? –