Сплайн с заданной кривизной в крайних точках:
function G=Splain4(x,y,Deriv2)
for i=1:length(x)-1
h(i)=x(i+1)-x(i);
end;
for i=1:length(y)-1
d(i)=(y(i+1)-y(i))/h(i);
end;
for i=1:length(d)-1
u(i)=6*(d(i+1)-d(i));
end;
M1=Progon(koefSplain4(h, u, d, Deriv2, length(x)),length(x));
n=length(x);
M(1)=Deriv2(1);
M(n)=Deriv2(1);
for i =2:n-1
M(i)=M1(i-1);
end;
for i=1:length(x)-1
G(i,1)=(M(i+1)-M(i))/(6*h(i));
G(i,2)=M(i)/2;
G(i,3)=d(i)-h(i)*(2*M(i)+M(i+1))/6;
G(i,4)=y(i);
end;
x1=x(1):0.01:x(2);
x2=x(2):0.01:x(3);
x3=x(3):0.01:x(4);
y1=polyval(G(1,:),x1-x(1));
y2=polyval(G(2,:),x2-x(2));
y3=polyval(G(3,:),x3-x(3));
plot(x1,y1,x2,y2,x3,y3,x,y,'ko');
grid on;
hold off;
title('График сплайна с заданной кривизной');
end
Функция выполняет построение кубического сплайна, с помощью встроенной функции:
function y1= VsSplain(x,y)
pp=interp1(x,y,'splaine','pp');
x1=x(1):0.1:x(4);
y1=ppval(pp,x1);
plot(x,y,'ko');
hold on;
plot(x1,y1,'g-');
grid on;
hold off;
title('График, построенный с помощью встроенной функции');
end
Функция выполняет построение графиков кубических полиномов с разными граничными условиями:
function x= VseSplain(x,y,Deriv,Deriv2)
Q=Splain12(x,y,Deriv);
G1=Splain1(x,y);
G2=Splain2(x,y);
G3=Splain3(x,y);
G4=Splain4(x,y,Deriv2);
x1=0:0.01:1;
x2=1:0.01:2;
x3=2:0.01:3;
y10=polyval(Q(1,:),x1-x(1));
y20=polyval(Q(2,:),x2-x(2));
y30=polyval(Q(3,:),x3-x(3));
plot(x1,y10,x2,y20,x3,y30,x,y,'ko');
hold on;
y11=polyval(G1(1,:),x1-x(1));
y21=polyval(G1(2,:),x2-x(2));
y31=polyval(G1(3,:),x3-x(3));
plot(x1,y11,x2,y21,x3,y31,x,y,'ko');
hold on;
y12=polyval(G2(1,:),x1-x(1));
y22=polyval(G2(2,:),x2-x(2));
y32=polyval(G2(3,:),x3-x(3));
plot(x1,y12,x2,y22,x3,y32,x,y,'ko');
hold on;
y13=polyval(G3(1,:),x1-x(1));
y23=polyval(G3(2,:),x2-x(2));
y33=polyval(G3(3,:),x3-x(3));
plot(x1,y13,x2,y23,x3,y33,x,y,'ko');
hold on;
y14=polyval(G4(1,:),x1-x(1));
y24=polyval(G4(2,:),x2-x(2));
y34=polyval(G4(3,:),x3-x(3));
plot(x1,y14,x2,y24,x3,y34,x,y,'ko');
grid on;
hold off;
title('Графики кубических сплайнов с разными граничными условиями');
end
Скрипт файл:
function CH = script()
choice=menu('Ограничения в крайних точках сплайна:',...
'Смыкающий', 'Естественный','Экстраполяционный', ...
'Заканчивающийся параболой', 'С заданной кривизной',...
'Встроенная функция','Кубические сплайны');
switch choice
case 1
prompt = {'значение аргумента','значение функции'...
'значение производной'};
dlg_title = 'Splain';
num_lines = 1;
def = {'0 1 2 3','0 0.5 2 1.5', '0.2 -1',};
answer = inputdlg(prompt,dlg_title,num_lines,def);
x = str2num(answer{1});
y = str2num(answer{2});
Deriv = str2num(answer{3});
results{1} = 'Матрица коэффициентов';
results{2} = 'смыкающегося сплайна';
results{3} = strcat(num2str(Splain(x,y,Deriv)));
case 2
prompt = {'значение аргумента','значение функции'};
dlg_title = 'Splain';
num_lines = 1;
def = {'0 1 2 3','0 0.5 2 1.5'};
answer = inputdlg(prompt,dlg_title,num_lines,def);
x = str2num(answer{1});
y = str2num(answer{2});
results{1} = 'Матрица коэффициентов';
results{2} = 'естественного сплайна';
results{3} = strcat(num2str(Splain3(x,y)));
case 3
prompt = {'значение аргумента','значение функции'};
dlg_title = 'Splain';
num_lines = 1;
def = {'0 1 2 3','0 0.5 2 1.5'};
answer = inputdlg(prompt,dlg_title,num_lines,def);
x = str2num(answer{1});
y = str2num(answer{2});
results{1} = 'Матрица коэффициентов';
results{2} = 'экстраполяционнго сплайна';
results{3} = strcat(num2str(Splain1(x,y)));
case 4
prompt = {'значение аргумента','значение функции'};
dlg_title = 'Splain';
num_lines = 1;
def = {'0 1 2 3','0 0.5 2 1.5'};
answer = inputdlg(prompt,dlg_title,num_lines,def);
x = str2num(answer{1});
y = str2num(answer{2});
results{1} = 'Матрица коэффициентов';
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.