Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何实现矩阵形式的B样条?_Matlab_Graphics_Curve_Spline_Bspline - Fatal编程技术网

Matlab 如何实现矩阵形式的B样条?

Matlab 如何实现矩阵形式的B样条?,matlab,graphics,curve,spline,bspline,Matlab,Graphics,Curve,Spline,Bspline,我只是尝试使用本文给出的矩阵表示法绘制三次B样条曲线: 具体来说,我正试图准确地复制PDF第3节(使用放置矩阵G)中的公式。但我不确定我错在哪里。它不断产生直线。有人能告诉我下面的代码有什么问题吗(它应该在任何版本的matlab上运行;它非常简单) 辅助函数 % Bi.m % The 'B' matrix function [B] = Bi(i) B = [[ -(1./6.)*i^3, (1./6.)*(3*i^3 + 3*i^2 - 3*i + 1), -(1./2.)*(i^3)-(i^2

我只是尝试使用本文给出的矩阵表示法绘制三次B样条曲线:

具体来说,我正试图准确地复制PDF第3节(使用放置矩阵G)中的公式。但我不确定我错在哪里。它不断产生直线。有人能告诉我下面的代码有什么问题吗(它应该在任何版本的matlab上运行;它非常简单)

辅助函数

% Bi.m
% The 'B' matrix
function [B] = Bi(i)
B = [[ -(1./6.)*i^3, (1./6.)*(3*i^3 + 3*i^2 - 3*i + 1), -(1./2.)*(i^3)-(i^2)+2./3., (1./2.)*(i+1)^3 ];
      [ +(1./2.)*i^2, -(1./2.)*(3*i-1)*(i+1), (1./2.)*(3*i^2 + 4*i), -(1./2.)*(i+1)^2 ];
      [ (1./2.)*i, (1./2.)*(3*i+1), -(1./2.)*(3*i+2), (1./2.)*(i+1) ];
      [ (1./6.), -(1./2.), (1./2.), -(1./6.) ]];
end
我的输出如下所示:

我的第一个问题是,你的最终目标是什么?你是否愿意使用矩阵表示法?我的第二个问题是,你能发布一个输出的屏幕截图吗?我的目标只是复制那个矩阵表示。我需要那个特定的矩阵表示法来进行进一步的研究。嗯,那么我可能帮不了忙,我对matlab和样条曲线的矩阵表示法都不熟悉,因为这种表示法效率很低,而且伸缩性很差。我打算建议使用DeBoor的算法,这是B样条曲线在野外的实际使用方式。作为一个关于再现某人数学的问题,这可能更好地继续问下去,因为这有很多与matlab相关的问题。因为作为一个编程问题,答案实际上是“只使用已经可用的许多预构建BSpline包中的一个”。我的第一个问题是,您的最终目标是什么,您是否愿意使用矩阵表示?我的第二个问题是,你能发布一个输出的屏幕截图吗?我的目标只是复制那个矩阵表示。我需要那个特定的矩阵表示法来进行进一步的研究。嗯,那么我可能帮不了忙,我对matlab和样条曲线的矩阵表示法都不熟悉,因为这种表示法效率很低,而且伸缩性很差。我打算建议使用DeBoor的算法,这是B样条曲线在野外的实际使用方式。作为一个关于再现某人数学的问题,这可能更好地继续问下去,因为这有很多与matlab相关的问题。因为作为一个编程问题,答案实际上是“只需使用已经可用的许多预构建BSpline包中的一个”。
% Bi.m
% The 'B' matrix
function [B] = Bi(i)
B = [[ -(1./6.)*i^3, (1./6.)*(3*i^3 + 3*i^2 - 3*i + 1), -(1./2.)*(i^3)-(i^2)+2./3., (1./2.)*(i+1)^3 ];
      [ +(1./2.)*i^2, -(1./2.)*(3*i-1)*(i+1), (1./2.)*(3*i^2 + 4*i), -(1./2.)*(i+1)^2 ];
      [ (1./2.)*i, (1./2.)*(3*i+1), -(1./2.)*(3*i+2), (1./2.)*(i+1) ];
      [ (1./6.), -(1./2.), (1./2.), -(1./6.) ]];
end
% Gi.m
% The 'G' matrix
function [G] = Gi(i, L)
G = zeros(4, L);
for m = 1:4
    for n = 1:L
        if n == i+m-3
            G(m,n) = 1;
        end
    end
end
end