1

xとyの点の数が与えられた場合、すべての点と交差し、交差点で同じ勾配を持つスプラインを作成したいと思います。

私のアプローチは、点の交点の方程式のセットを確立し、交点で等しい勾配を指示してから、fsolve()を使用して係数を決定することでした。

ただし、見つかったスプラインをプロットする場合、xとyで指定された正しい点と交差しますが、交差する点で同じ勾配はありません。

私はこのスクリプトを2日間ほとんどデバッグしようとしてきましたが、運がありませんでした。スプラインが正しい勾配を取得していない理由を誰かが指摘できますか?または、満足のいく解が見つかる前にfsolve()が終了する可能性がありますか?

メインファイル:

result = fsolve(@(K) eqns(x,y,K) , ones(1,(size(x,1)-1)*3) ); %Calls eqns() in eqns.m

A = result(1 : size(x,1)-1 );
B = result(size(x,1) : 2*size(x,1)-2 );
C = result(2*size(x,1)-1 : 3*size(x,1)-3 );


%Plot splines
splinePts = size(A,2)*100;
x_spline = [0 : x(end)/splinePts : x(end)];
fx = ones(splinePts,1);
for i = 1:size(A,2)
    for j = 1:100
        k = i*100-100 + j;
        fx(k) = A(i) * x_spline(k)^2 + B(i) * x_spline(k) + C(i);
    end
end

plot(fx);

eqns.m

function fcns=eqns(x,y,K)

A = K(1 : size(x,1)-1 ); %Coefficients for X^2
B = K(size(x,1) : 2*size(x,1)-2); %Coefficients for X
C = K(2*size(x,1)-1 : 3*size(x,1)-3); %Constants

%Equations for hitting all points
syms H;
temp = H; %Initiate variable for containing equations.

for i = 1:size(B,2)
    temp(end+1) = eqn(x(i),y(i),A,B,C,i); %Calls eqn() in eqn.
    temp(end+1) = eqn(x(i+1),y(i+1),A,B,C,i);
end


%Equations for slopes at spline intersections
syms X;
temp(end+1) = subs( diff(eqn(X,0,A,B,C,1),X) - 0 , 'X' , x(1) );

for i = 1:size(A,2)-1
    temp(end+1) = subs( diff(eqn(X,1,A,B,C,i),X) - diff(eqn(X,1,A,B,C,i+1),X) , 'X' , x(i)+1 );
end

fcns = double( temp(2:end) );

end

eqn.m

function fcn=eqn(X,Y,A,B,C,i)

fcn = A(i)*X^2 + B(i)*X + C(i) - Y;

end
4

0 に答える 0