You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

58 lines
1.5 KiB

function [P,new_n,new_Xi] = Prolongation_Operator_1D(p,n,Xi,add_Xi)
% Prolongation_Operator
% Written by Christopher Coley
% Last modified 2 Apr 15
%
% Creates the prolongation operator for 1D using B-splines
%
% Output:
% P - 1D prolongation operator
% new_n - number of basis functions for the refined B-spline space
% new_Xi - univariate knot vector for the refined B-spline space
%
% Input:
% p - polynomial degree of the original and refined B-spline curves; scalar
% n - number of basis functions for the original B-spline space; scalar
% Xi - univariate knot vector for the original B-spline space; row vector
% add_Xi - knots to be added; row vector
% initialize variables
P = eye(n,n);
new_n = n;
% insert one knot at a time and find the prolongation operator for that
% knot
% then multiply the current prolongation operator with the system
% prolongation operator
for i = 1:length(add_Xi)
% initialize the current prolongation operator
new_n = new_n+1;
P1 = zeros(new_n,n);
% find k such that xi exists in [Xi(k), Xi(k+1))
[TF,k]=ismember(0,add_Xi(i)<Xi,'legacy');
for j = 1:n+i
if j <= k-p
P1(j,j) = 1;
elseif j > k-p && j <= k
% calculate alpha and insert into P
a = (add_Xi(i)-Xi(j))/(Xi(j+p)-Xi(j));
P1(j,j-1) = 1-a;
P1(j,j) = a;
else
P1(j,j-1) = 1;
end
end
new_Xi = [Xi(1:k) add_Xi(i) Xi(k+1:end)];
Xi = new_Xi;
P = P1*P;
end