% основная программа:
clear
a=-2; b=7; h=.01; n=4; eps=.001;
f=[2 -11 -11 8];
r=roots(f);
c=[a -0.5 0 2 5 b];
x=a:h:b;
%plot(x,polyval(f,x));
for i=1:5,
w1=knots(c(1),c(2),n);
Lw1=lknots(f,w1);
r1=lagr(0,Lw1,w1);
ep=abs(r(2)-r1);
if ep<eps break; end;
if polyval(f,r1)>0 c(2)=r1; else c(1)=r1;end;
end;
disp(r1);
for i=1:5,
w1=knots(c(3),c(4),n);
Lw1=lknots(f,w1);
r1=lagr(0,Lw1,w1);
ep=abs(r(1)-r1);
if ep<eps break; end;
if polyval(f,r1)>0 c(4)=r1; else c(3)=r1;end;
end;
disp(r1);
for i=1:5,
w1=knots(c(5),c(6),n);
Lw1=lknots(f,w1);
r1=lagr(0,Lw1,w1);
ep=abs(r(3)-r1);
if ep<eps break; end;
if polyval(f,r1)>0 c(6)=r1; else c(5)=r1;end;
end;
disp(r1);
% вспомогательная программа:
function u=knots(x1,x2,n);
u=zeros(1,n);
for j=0:n-1,
u(j+1) =x1 + j*(x2-x1)/(n-1);
end
% вспомогательная программа:
function u=lknots(ef,t);
n=length(t);
u=zeros(1,n);
for j=1:n,
u(j) =polyval(ef,t(j));
end
% вектор данных с шумом:
alf=0.1;
x=-5:0.1:5;
y=sin(x)+alf*randn(size(x));
k=polyfit(x,y,5);
Y=polyval(k,x);
plot(x,y,'r',x,Y,'b')
% результат
» lab3
-1.2749
0.5000
6.2749
» roots(f)
ans =
6.2749
-1.2749
0.5000
»