【发布时间】:2023-04-04 09:45:01
【问题描述】:
我试图在不使用 polyfit 和 polyval 的情况下为某些数据拟合一条线。我已经在如何实现这个方面得到了一些很好的帮助,并且我已经让它与一个简单的 sin 函数一起工作。但是,当应用于我要拟合的功能时,它不起作用。这是我的代码:
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 个数据点,因此您应该拟合一个次数
-
@David 我明白为什么它不能准确地拟合它是有道理的。我可以实现更多的东西以使其更像 polyfit 和 polyval 函数,还是因为该函数而无法做到?