linspacen
Below is a demonstration of the features of the linspacen function
Contents
Syntax
[C]=linspacen(A,B,n);
Description
This function is a generalization of the linspace function to N dimensions. The output C is a matrix of size [size(A) n] such that "it goes" from A to B in n steps in the last dimention. The input variables A and B (scalars, vectors or matrices). For scalar input this function is equivalent to linspace (but slower due to repmat operation). Clearly the inputs A and B should have the same size.
See also: linspace and subCurve
Examples
clear; close all; clc;
Plot settings
fontSize=15; cMap=viridis(250);
Control parameters for examples
% Number of steps used in examples
n=6;
Example 1: Use of linspacen for scalars
For scalar input linspacen is equivalent to linspace
A=0 B=1 C=linspacen(A,B,n)
A = 0 B = 1 C = Columns 1 through 3 0 0.200000000000000 0.400000000000000 Columns 4 through 6 0.600000000000000 0.800000000000000 1.000000000000000
Example 2: Use of linspacen for vectors
For (column) vector input linspacen produces a matrix
A=zeros(1,10) B=ones(size(A)) C=linspacen(A(:),B(:),n)
A = 0 0 0 0 0 0 0 0 0 0 B = 1 1 1 1 1 1 1 1 1 1 C = Columns 1 through 3 0 0.200000000000000 0.400000000000000 0 0.200000000000000 0.400000000000000 0 0.200000000000000 0.400000000000000 0 0.200000000000000 0.400000000000000 0 0.200000000000000 0.400000000000000 0 0.200000000000000 0.400000000000000 0 0.200000000000000 0.400000000000000 0 0.200000000000000 0.400000000000000 0 0.200000000000000 0.400000000000000 0 0.200000000000000 0.400000000000000 Columns 4 through 6 0.600000000000000 0.800000000000000 1.000000000000000 0.600000000000000 0.800000000000000 1.000000000000000 0.600000000000000 0.800000000000000 1.000000000000000 0.600000000000000 0.800000000000000 1.000000000000000 0.600000000000000 0.800000000000000 1.000000000000000 0.600000000000000 0.800000000000000 1.000000000000000 0.600000000000000 0.800000000000000 1.000000000000000 0.600000000000000 0.800000000000000 1.000000000000000 0.600000000000000 0.800000000000000 1.000000000000000 0.600000000000000 0.800000000000000 1.000000000000000
Plotting results
cFigure; title('A surface gradient from vector A to vector B','FontSize',fontSize); xlabel('X','FontSize',fontSize);ylabel('Y','FontSize',fontSize); zlabel('Z','FontSize',fontSize); hold on; surf(C); colormap(cMap); caxis([min(C(:)) max(C(:))]); colorbar; axis equal; view(3); axis tight; grid on; set(gca,'FontSize',fontSize); drawnow;
Example 3: Use of linspacen for 2D matrices
For qxr input matrices linspacen produces a qxrxn output matrix whereby the entries go from input A to B allong the last dimension in n steps
A=zeros(5,5) B=ones(size(A)); C=linspacen(A,B,n)
A = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 C(:,:,1) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 C(:,:,2) = Columns 1 through 3 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 Columns 4 through 5 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 C(:,:,3) = Columns 1 through 3 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 Columns 4 through 5 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 C(:,:,4) = Columns 1 through 3 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 Columns 4 through 5 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 C(:,:,5) = Columns 1 through 3 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 Columns 4 through 5 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 C(:,:,6) = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Plotting results
cFigure; title('A 3D gradient from A to B','FontSize',fontSize); xlabel('X','FontSize',fontSize);ylabel('Y','FontSize',fontSize); zlabel('Z','FontSize',fontSize); hold on; [Fm,Vm,Cm]=ind2patch(1:numel(C),C,'vu'); gpatch(Fm,Vm,Cm); axis equal; view(3); axis tight; axis vis3d; grid off; colormap(cMap); caxis([min(C(:)) max(C(:))]); colorbar; set(gca,'FontSize',fontSize); drawnow;
Example 4: Use of linspacen for higher order matrices
For qxrx... input matrices linspacen produces a qxrxn output matrix whereby the entries go from input A to B allong the last dimension in n steps.
A=zeros(3,4,2) B=ones(size(A)); C=linspacen(A,B,n)
A(:,:,1) = 0 0 0 0 0 0 0 0 0 0 0 0 A(:,:,2) = 0 0 0 0 0 0 0 0 0 0 0 0 C(:,:,1,1) = 0 0 0 0 0 0 0 0 0 0 0 0 C(:,:,2,1) = 0 0 0 0 0 0 0 0 0 0 0 0 C(:,:,1,2) = Columns 1 through 3 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 Column 4 0.200000000000000 0.200000000000000 0.200000000000000 C(:,:,2,2) = Columns 1 through 3 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 0.200000000000000 Column 4 0.200000000000000 0.200000000000000 0.200000000000000 C(:,:,1,3) = Columns 1 through 3 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 Column 4 0.400000000000000 0.400000000000000 0.400000000000000 C(:,:,2,3) = Columns 1 through 3 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 0.400000000000000 Column 4 0.400000000000000 0.400000000000000 0.400000000000000 C(:,:,1,4) = Columns 1 through 3 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 Column 4 0.600000000000000 0.600000000000000 0.600000000000000 C(:,:,2,4) = Columns 1 through 3 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 0.600000000000000 Column 4 0.600000000000000 0.600000000000000 0.600000000000000 C(:,:,1,5) = Columns 1 through 3 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 Column 4 0.800000000000000 0.800000000000000 0.800000000000000 C(:,:,2,5) = Columns 1 through 3 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 0.800000000000000 Column 4 0.800000000000000 0.800000000000000 0.800000000000000 C(:,:,1,6) = 1 1 1 1 1 1 1 1 1 1 1 1 C(:,:,2,6) = 1 1 1 1 1 1 1 1 1 1 1 1
Plotting results
cFigure; subplot(1,3,1); title('4D output: First set','FontSize',fontSize); xlabel('X','FontSize',fontSize);ylabel('Y','FontSize',fontSize); zlabel('Z','FontSize',fontSize); hold on; c=C(:,:,:,1); [Fm,Vm,Cm]=ind2patch(1:numel(c),c,'vu'); gpatch(Fm,Vm,Cm); axis equal; view(3); axis tight; axis vis3d; grid off; colormap(cMap); caxis([min(C(:)) max(C(:))]); colorbar; set(gca,'FontSize',fontSize); subplot(1,3,2); title('4D output: Intermediate set','FontSize',fontSize); xlabel('X','FontSize',fontSize);ylabel('Y','FontSize',fontSize); zlabel('Z','FontSize',fontSize); hold on; c=C(:,:,:,round(size(C,4)/2)); [Fm,Vm,Cm]=ind2patch(1:numel(c),c,'vu'); gpatch(Fm,Vm,Cm); axis equal; view(3); axis tight; axis vis3d; grid off; colormap(cMap); caxis([min(C(:)) max(C(:))]); colorbar; set(gca,'FontSize',fontSize); subplot(1,3,3); title('4D output: Last set','FontSize',fontSize); xlabel('X','FontSize',fontSize);ylabel('Y','FontSize',fontSize); zlabel('Z','FontSize',fontSize); hold on; c=C(:,:,:,end); [Fm,Vm,Cm]=ind2patch(1:numel(c),c,'vu'); gpatch(Fm,Vm,Cm); axis equal; view(3); axis tight; axis vis3d; grid off; colormap(cMap); caxis([min(C(:)) max(C(:))]); colorbar; set(gca,'FontSize',fontSize); drawnow;
GIBBON www.gibboncode.org
Kevin Mattheus Moerman, [email protected]
GIBBON footer text
License: https://github.com/gibbonCode/GIBBON/blob/master/LICENSE
GIBBON: The Geometry and Image-based Bioengineering add-On. A toolbox for image segmentation, image-based modeling, meshing, and finite element analysis.
Copyright (C) 2019 Kevin Mattheus Moerman
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.