Input buildinfo: https://buildinfos.debian.net/buildinfo-pool/o/octave-nurbs/octave-nurbs_1.4.3-2_amd64.buildinfo Use metasnap for getting required timestamps New buildinfo file: /tmp/octave-nurbs-1.4.3-2y4aqvfcv/octave-nurbs_1.4.3-2_amd64.buildinfo Get source package info: octave-nurbs=1.4.3-2 Source URL: http://snapshot.notset.fr/mr/package/octave-nurbs/1.4.3-2/srcfiles?fileinfo=1 env -i PATH=/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp mmdebstrap --arch=amd64 --include=aglfn=1.7+git20191031.4036a9c-2 autoconf=2.69-14 automake=1:1.16.4-1 autopoint=0.21-4 autotools-dev=20180224.1+nmu1 base-files=11.1 base-passwd=3.5.51 bash=5.1-3+b1 binutils=2.35.2-2 binutils-common=2.35.2-2 binutils-x86-64-linux-gnu=2.35.2-2 bsdextrautils=2.36.1-8 bsdutils=1:2.36.1-8 build-essential=12.9 bzip2=1.0.8-4 ca-certificates=20210119 cme=1.032-1 coreutils=8.32-4+b1 cpp=4:10.2.1-1 cpp-10=10.2.1-6 dash=0.5.11+git20210120+802ebd4-1 debconf=1.5.77 debhelper=13.3.4 debianutils=4.11.2 dh-autoreconf=20 dh-octave=1.0.5 dh-octave-autopkgtest=1.0.5 dh-strip-nondeterminism=1.12.0-1 diffstat=1.64-1 diffutils=1:3.7-5 dpkg=1.20.9 dpkg-dev=1.20.9 dwz=0.14-1 file=1:5.39-3 findutils=4.8.0-1 fontconfig=2.13.1-4.2 fontconfig-config=2.13.1-4.2 fonts-dejavu-core=2.37-2 fonts-freefont-otf=20120503-10 g++=4:10.2.1-1 g++-10=10.2.1-6 gcc=4:10.2.1-1 gcc-10=10.2.1-6 gcc-10-base=10.2.1-6 gcc-11-base=11.2.0-2 gettext=0.21-4 gettext-base=0.21-4 gfortran=4:10.2.1-1 gfortran-10=10.2.1-6 gnuplot-data=5.4.1+dfsg1-1 gnuplot-nox=5.4.1+dfsg1-1 gpg=2.2.27-2 gpgconf=2.2.27-2 grep=3.6-1 groff-base=1.22.4-6 gzip=1.10-4 hdf5-helpers=1.10.6+repack-5 hostname=3.23 init-system-helpers=1.60 intltool-debian=0.35.0+20060710.5 libacl1=2.2.53-10 libaec-dev=1.0.5-2 libaec0=1.0.5-2 libalgorithm-c3-perl=0.11-1 libaliased-perl=0.34-1.1 libamd2=1:5.8.1+dfsg-2 libapp-cmd-perl=0.331-1 libapt-pkg-perl=0.1.40 libapt-pkg6.0=2.3.8 libarchive-zip-perl=1.68-1 libarpack2=3.8.0-1 libarray-intspan-perl=2.004-1 libasan6=10.2.1-6 libasound2=1.2.4-1.1 libasound2-data=1.2.4-1.1 libassuan0=2.5.4-1 libatomic1=10.2.1-6 libattr1=1:2.4.48-6 libaudit-common=1:3.0-2 libaudit1=1:3.0-2 libavahi-client3=0.8-5 libavahi-common-data=0.8-5 libavahi-common3=0.8-5 libb-hooks-endofscope-perl=0.24-1.1 libb-hooks-op-check-perl=0.22-1+b3 libbinutils=2.35.2-2 libblas-dev=3.9.0-3 libblas3=3.9.0-3 libblkid1=2.36.1-8 libboolean-perl=0.46-1 libbrotli1=1.0.9-2+b2 libbsd0=0.11.3-1 libbtf1=1:5.8.1+dfsg-2 libbz2-1.0=1.0.8-4 libc-bin=2.31-13 libc-dev-bin=2.31-13 libc6=2.31-13 libc6-dev=2.31-13 libcairo2=1.16.0-5 libcamd2=1:5.8.1+dfsg-2 libcap-ng0=0.7.9-2.2+b1 libcapture-tiny-perl=0.48-1 libcarp-assert-more-perl=1.26-1 libcarp-assert-perl=0.21-1.1 libcc1-0=10.2.1-6 libccolamd2=1:5.8.1+dfsg-2 libcholmod3=1:5.8.1+dfsg-2 libclass-c3-perl=0.35-1 libclass-data-inheritable-perl=0.08-3 libclass-load-perl=0.25-1 libclass-method-modifiers-perl=2.13-1 libclass-xsaccessor-perl=1.19-3+b7 libclone-choose-perl=0.010-1 libclone-perl=0.45-1+b1 libcolamd2=1:5.8.1+dfsg-2 libcom-err2=1.46.2-2 libconfig-model-backend-yaml-perl=2.134-1 libconfig-model-dpkg-perl=2.143 libconfig-model-perl=2.141-1 libconfig-tiny-perl=2.26-1 libconvert-binhex-perl=1.125-1 libcpanel-json-xs-perl=4.25-1+b1 libcrypt-dev=1:4.4.18-5 libcrypt1=1:4.4.18-5 libctf-nobfd0=2.35.2-2 libctf0=2.35.2-2 libcups2=2.3.3op2-3+deb11u1 libcurl3-gnutls=7.74.0-1.3+b1 libcxsparse3=1:5.8.1+dfsg-2 libdata-dpath-perl=0.58-1 libdata-messagepack-perl=1.01-2 libdata-optlist-perl=0.110-1.1 libdata-section-perl=0.200007-1 libdata-validate-domain-perl=0.10-1.1 libdatrie1=0.2.13-1 libdb5.3=5.3.28+dfsg1-0.8 libdbus-1-3=1.12.20-2 libdebconfclient0=0.260 libdebhelper-perl=13.3.4 libdeflate0=1.7-1 libdevel-callchecker-perl=0.008-1+b2 libdevel-size-perl=0.83-1+b2 libdevel-stacktrace-perl=2.0400-1 libdouble-conversion3=3.1.5-6.1 libdpkg-perl=1.20.9 libdrm-amdgpu1=2.4.104-1 libdrm-common=2.4.104-1 libdrm-intel1=2.4.104-1 libdrm-nouveau2=2.4.104-1 libdrm-radeon1=2.4.104-1 libdrm2=2.4.104-1 libdynaloader-functions-perl=0.003-1.1 libedit2=3.1-20210714-1 libegl-dev=1.3.2-1 libegl-mesa0=20.3.5-1 libegl1=1.3.2-1 libelf1=0.185-2 libemail-address-xs-perl=1.04-1+b3 libencode-locale-perl=1.05-1.1 liberror-perl=0.17029-1 libevdev2=1.11.0+dfsg-1 libexception-class-perl=1.44-1 libexpat1=2.2.10-2 libexporter-lite-perl=0.08-1 libexporter-tiny-perl=1.002002-1 libffi7=3.3-6 libfftw3-bin=3.3.8-2 libfftw3-dev=3.3.8-2 libfftw3-double3=3.3.8-2 libfftw3-long3=3.3.8-2 libfftw3-quad3=3.3.8-2 libfftw3-single3=3.3.8-2 libfile-basedir-perl=0.08-1 libfile-find-rule-perl=0.34-1 libfile-homedir-perl=1.006-1 libfile-listing-perl=6.14-1 libfile-stripnondeterminism-perl=1.12.0-1 libfile-which-perl=1.23-1 libflac8=1.3.3-2 libfltk-gl1.3=1.3.5-3 libfltk1.3=1.3.5-3 libfont-ttf-perl=1.06-1.1 libfontconfig1=2.13.1-4.2 libfreetype6=2.10.4+dfsg-1 libfribidi0=1.0.8-2 libgbm1=20.3.5-1 libgcc-10-dev=10.2.1-6 libgcc-s1=10.2.1-6 libgcrypt20=1.8.7-6 libgd3=2.3.0-2 libgdbm-compat4=1.19-2 libgdbm6=1.19-2 libgetopt-long-descriptive-perl=0.105-1 libgfortran-10-dev=10.2.1-6 libgfortran5=11.2.0-2 libgl-dev=1.3.2-1 libgl1=1.3.2-1 libgl1-mesa-dev=20.3.5-1 libgl1-mesa-dri=20.3.5-1 libgl2ps1.4=1.4.2+dfsg1-2 libglapi-mesa=20.3.5-1 libgles-dev=1.3.2-1 libgles1=1.3.2-1 libgles2=1.3.2-1 libglib2.0-0=2.68.3-2 libglpk40=5.0-1 libglu1-mesa=9.0.1-1 libglvnd-dev=1.3.2-1 libglvnd0=1.3.2-1 libglx-dev=1.3.2-1 libglx-mesa0=20.3.5-1 libglx0=1.3.2-1 libgmp10=2:6.2.1+dfsg-1 libgnutls30=3.7.1-5 libgomp1=10.2.1-6 libgpg-error0=1.38-2 libgraphicsmagick++-q16-12=1.4+really1.3.36+hg16481-2 libgraphicsmagick-q16-3=1.4+really1.3.36+hg16481-2 libgraphite2-3=1.3.14-1 libgssapi-krb5-2=1.18.3-6 libgudev-1.0-0=234-1 libharfbuzz0b=2.7.4-1 libhash-fieldhash-perl=0.15-1+b3 libhash-merge-perl=0.302-1 libhdf5-103-1=1.10.6+repack-5 libhdf5-cpp-103-1=1.10.6+repack-5 libhdf5-dev=1.10.6+repack-5 libhdf5-fortran-102=1.10.6+repack-5 libhdf5-hl-100=1.10.6+repack-5 libhdf5-hl-cpp-100=1.10.6+repack-5 libhdf5-hl-fortran-100=1.10.6+repack-5 libhogweed6=3.7.3-1 libhtml-html5-entities-perl=0.004-1.1 libhtml-parser-perl=3.76-1 libhtml-tagset-perl=3.20-4 libhtml-tree-perl=5.07-2 libhttp-cookies-perl=6.10-1 libhttp-date-perl=6.05-1 libhttp-message-perl=6.29-1 libhttp-negotiate-perl=6.01-1 libice6=2:1.0.10-1 libicu67=67.1-7 libidn2-0=2.3.0-5 libimport-into-perl=1.002005-1 libinput-bin=1.16.4-3 libinput10=1.16.4-3 libio-html-perl=1.004-2 libio-interactive-perl=1.023-1 libio-socket-ssl-perl=2.069-1 libio-string-perl=1.08-3.1 libio-stringy-perl=2.111-3 libio-tiecombine-perl=1.005-1.1 libipc-run3-perl=0.048-2 libipc-system-simple-perl=1.30-1 libisl23=0.23-1 libiterator-perl=0.03+ds1-1.1 libiterator-util-perl=0.02+ds1-1.1 libitm1=10.2.1-6 libjack-jackd2-0=1.9.17~dfsg-1 libjbig0=2.1-3.1+b2 libjpeg-dev=1:2.0.6-4 libjpeg62-turbo=1:2.0.6-4 libjpeg62-turbo-dev=1:2.0.6-4 libjson-maybexs-perl=1.004003-1 libjson-perl=4.03000-1 libk5crypto3=1.18.3-6 libkeyutils1=1.6.1-2 libklu1=1:5.8.1+dfsg-2 libkrb5-3=1.18.3-6 libkrb5support0=1.18.3-6 liblapack-dev=3.9.0-3 liblapack3=3.9.0-3 liblcms2-2=2.12~rc1-2 libldap-2.4-2=2.4.57+dfsg-3 liblist-compare-perl=0.55-1 liblist-moreutils-perl=0.430-2 liblist-moreutils-xs-perl=0.430-2 liblist-someutils-perl=0.58-1 liblist-utilsby-perl=0.11-1 libllvm11=1:11.0.1-2 liblog-any-adapter-screen-perl=0.140-2 liblog-any-perl=1.709-1 liblog-log4perl-perl=1.54-1 liblsan0=10.2.1-6 libltdl7=2.4.6-15 liblua5.4-0=5.4.2-2 liblwp-mediatypes-perl=6.04-1 liblwp-protocol-https-perl=6.10-1 liblz4-1=1.9.3-2 liblzma5=5.2.5-2 liblzo2-2=2.10-2 libmagic-mgc=1:5.39-3 libmagic1=1:5.39-3 libmailtools-perl=2.21-1 libmarkdown2=2.2.6-1 libmd0=1.0.3-3 libmd4c0=0.4.8-1 libmetis5=5.1.0.dfsg-7 libmime-tools-perl=5.509-1 libmodule-implementation-perl=0.09-1.1 libmodule-pluggable-perl=5.2-1 libmodule-runtime-perl=0.016-1 libmoo-perl=2.004004-1 libmoox-aliases-perl=0.001006-1.1 libmoox-struct-perl=0.020-1 libmount1=2.36.1-8 libmouse-perl=2.5.10-1+b1 libmousex-nativetraits-perl=1.09-2.1 libmousex-strictconstructor-perl=0.02-2.1 libmpc3=1.2.0-1 libmpfr6=4.1.0-3 libmro-compat-perl=0.13-1 libmtdev1=1.1.6-1 libnamespace-autoclean-perl=0.29-1 libnamespace-clean-perl=0.27-1 libncurses-dev=6.2+20201114-2 libncurses6=6.2+20201114-2 libncursesw6=6.2+20201114-2 libnet-domain-tld-perl=1.75-1.1 libnet-http-perl=6.20-1 libnet-smtp-ssl-perl=1.04-1 libnet-ssleay-perl=1.88-3+b1 libnettle8=3.7.3-1 libnghttp2-14=1.43.0-1 libnsl-dev=1.3.0-2 libnsl2=1.3.0-2 libnumber-compare-perl=0.03-1.1 libnumber-range-perl=0.12-1.1 libobject-id-perl=0.1.2-2.1 liboctave-dev=6.2.0-1 liboctave8=6.2.0-1 libogg0=1.3.4-0.1 libopengl-dev=1.3.2-1 libopengl0=1.3.2-1 libopus0=1.3.1-0.1 libp11-kit0=0.23.22-1 libpackage-stash-perl=0.39-1 libpam-modules=1.4.0-9 libpam-modules-bin=1.4.0-9 libpam-runtime=1.4.0-9 libpam0g=1.4.0-9 libpango-1.0-0=1.46.2-3 libpangocairo-1.0-0=1.46.2-3 libpangoft2-1.0-0=1.46.2-3 libparams-classify-perl=0.015-1+b3 libparams-util-perl=1.102-1+b1 libparams-validate-perl=1.30-1+b1 libparse-debcontrol-perl=2.005-4.1 libparse-recdescent-perl=1.967015+dfsg-2 libpath-iterator-rule-perl=1.014-1 libpath-tiny-perl=0.118-1 libpciaccess0=0.16-1 libpcre2-16-0=10.36-2 libpcre2-8-0=10.36-2 libpcre3=2:8.39-13 libperl5.32=5.32.1-5 libperlio-gzip-perl=0.19-1+b7 libpipeline1=1.5.3-1 libpixman-1-0=0.40.0-1 libpng16-16=1.6.37-3 libpod-constants-perl=0.19-2 libpod-parser-perl=1.63-2 libpod-pom-perl=2.01-3 libportaudio2=19.6.0-1.1 libproc-processtable-perl=0.59-2+b1 libpsl5=0.21.0-1.2 libpthread-stubs0-dev=0.4-1 libqhull8.0=2020.2-4 libqrupdate1=1.1.2-4 libqscintilla2-qt5-15=2.11.6+dfsg-2 libqscintilla2-qt5-l10n=2.11.6+dfsg-2 libqt5core5a=5.15.2+dfsg-10 libqt5dbus5=5.15.2+dfsg-10 libqt5gui5=5.15.2+dfsg-10 libqt5help5=5.15.2-5 libqt5network5=5.15.2+dfsg-10 libqt5printsupport5=5.15.2+dfsg-10 libqt5sql5=5.15.2+dfsg-10 libqt5widgets5=5.15.2+dfsg-10 libqt5xml5=5.15.2+dfsg-10 libquadmath0=10.2.1-6 libre-engine-re2-perl=0.14-1 libre2-9=20210201+dfsg-1 libreadline-dev=8.1-2 libreadline8=8.1-2 libregexp-common-perl=2017060201-1 libregexp-pattern-license-perl=3.9.0-1 libregexp-pattern-perl=0.2.14-1 librole-tiny-perl=2.002004-1 librtmp1=2.4+20151223.gitfa8646d.1-2+b2 libsamplerate0=0.2.1+ds0-1 libsasl2-2=2.1.27+dfsg-2.1 libsasl2-modules-db=2.1.27+dfsg-2.1 libseccomp2=2.5.1-1 libselinux1=3.1-3 libsensors-config=1:3.6.0-7 libsensors5=1:3.6.0-7 libsereal-decoder-perl=4.018+ds-1+b1 libsereal-encoder-perl=4.018+ds-1+b1 libsigsegv2=2.13-1 libsm6=2:1.2.3-1 libsmartcols1=2.36.1-8 libsndfile1=1.0.31-2 libsoftware-license-perl=0.103014-2 libsoftware-licensemoreutils-perl=1.005-1 libsort-versions-perl=1.62-1 libsqlite3-0=3.34.1-3 libssh2-1=1.9.0-3 libssl1.1=1.1.1k-1 libstdc++-10-dev=10.2.1-6 libstdc++6=10.2.1-6 libstrictures-perl=2.000006-1 libstring-copyright-perl=0.003007-1 libstring-escape-perl=2010.002-2 libstring-rewriteprefix-perl=0.008-1 libsub-exporter-perl=0.987-1 libsub-exporter-progressive-perl=0.001013-1 libsub-identify-perl=0.14-1+b3 libsub-install-perl=0.928-1.1 libsub-name-perl=0.26-1+b1 libsub-override-perl=0.09-2 libsub-quote-perl=2.006006-1 libsub-uplevel-perl=0.2800-1.1 libsuitesparseconfig5=1:5.8.1+dfsg-2 libsundials-ida4=4.1.0+dfsg-4 libsundials-nvecserial4=4.1.0+dfsg-4 libsundials-sunlinsol2=4.1.0+dfsg-4 libsundials-sunmatrix2=4.1.0+dfsg-4 libsystemd0=247.3-6 libsz2=1.0.5-2 libtasn1-6=4.16.0-2 libtest-exception-perl=0.43-1 libtext-autoformat-perl=1.750000-1 libtext-glob-perl=0.11-1 libtext-levenshtein-damerau-perl=0.41-1.1 libtext-levenshteinxs-perl=0.03-4+b8 libtext-markdown-discount-perl=0.12-1+b1 libtext-reform-perl=1.20-3 libtext-template-perl=1.59-1 libtext-unidecode-perl=1.30-1 libtext-xslate-perl=3.5.8-1+b1 libthai-data=0.1.28-4 libthai0=0.1.28-4 libtiff5=4.2.0-1 libtime-duration-perl=1.21-1 libtime-moment-perl=0.44-1+b3 libtimedate-perl=2.3300-2 libtinfo6=6.2+20201114-2 libtirpc-common=1.3.1-1 libtirpc-dev=1.3.1-1 libtirpc3=1.3.1-1 libtoml-tiny-perl=0.11-1 libtool=2.4.6-15 libtry-tiny-perl=0.30-1 libtsan0=10.2.1-6 libtype-tiny-perl=1.012002-1 libubsan1=10.2.1-6 libuchardet0=0.0.7-1 libudev1=247.3-6 libumfpack5=1:5.8.1+dfsg-2 libunicode-utf8-perl=0.62-1+b2 libunistring2=0.9.10-4 liburi-perl=5.08-1 libuuid1=2.36.1-8 libvariable-magic-perl=0.62-1+b3 libvorbis0a=1.3.7-1 libvorbisenc2=1.3.7-1 libvulkan1=1.2.162.0-1 libwacom-common=1.8-2 libwacom2=1.8-2 libwayland-client0=1.19.0-2 libwayland-server0=1.19.0-2 libwebp6=0.6.1-2.1 libwebpmux3=0.6.1-2.1 libwmf0.2-7=0.2.8.4-17+b1 libwww-perl=6.53-1 libwww-robotrules-perl=6.02-1 libx11-6=2:1.7.2-1 libx11-data=2:1.7.2-1 libx11-dev=2:1.7.2-1 libx11-xcb1=2:1.7.2-1 libxau-dev=1:1.0.9-1 libxau6=1:1.0.9-1 libxcb-dri2-0=1.14-3 libxcb-dri3-0=1.14-3 libxcb-glx0=1.14-3 libxcb-icccm4=0.4.1-1.1 libxcb-image0=0.4.0-1+b3 libxcb-keysyms1=0.4.0-1+b2 libxcb-present0=1.14-3 libxcb-randr0=1.14-3 libxcb-render-util0=0.3.9-1+b1 libxcb-render0=1.14-3 libxcb-shape0=1.14-3 libxcb-shm0=1.14-3 libxcb-sync1=1.14-3 libxcb-util1=0.4.0-1+b1 libxcb-xfixes0=1.14-3 libxcb-xinerama0=1.14-3 libxcb-xinput0=1.14-3 libxcb-xkb1=1.14-3 libxcb1=1.14-3 libxcb1-dev=1.14-3 libxcursor1=1:1.2.0-2 libxdamage1=1:1.1.5-2 libxdmcp-dev=1:1.1.2-3 libxdmcp6=1:1.1.2-3 libxext6=2:1.3.3-1.1 libxfixes3=1:5.0.3-2 libxft2=2.3.2-2 libxinerama1=2:1.1.4-2 libxkbcommon-x11-0=1.0.3-2 libxkbcommon0=1.0.3-2 libxml-libxml-perl=2.0134+dfsg-2+b1 libxml-namespacesupport-perl=1.12-1.1 libxml-sax-base-perl=1.09-1.1 libxml-sax-perl=1.02+dfsg-1 libxml2=2.9.10+dfsg-6.7 libxpm4=1:3.5.12-1 libxrender1=1:0.9.10-1 libxshmfence1=1.3-1 libxxf86vm1=1:1.1.4-1+b2 libxxhash0=0.8.0-2 libyaml-0-2=0.2.2-1 libyaml-libyaml-perl=0.82+repack-1+b1 libyaml-perl=1.30-1 libyaml-tiny-perl=1.73-1 libz3-4=4.8.10-1 libzstd1=1.4.8+dfsg-2.1 licensecheck=3.2.9-1 lintian=2.104.0 linux-libc-dev=5.10.46-4 login=1:4.8.1-1 lsb-base=11.1.0 lzip=1.22-3 lzop=1.04-2 m4=1.4.18-5 make=4.3-4.1 man-db=2.9.4-2 mawk=1.3.4.20200120-2 ncurses-base=6.2+20201114-2 ncurses-bin=6.2+20201114-2 netbase=6.3 octave=6.2.0-1 octave-common=6.2.0-1 openssl=1.1.1k-1 patch=2.7.6-7 patchutils=0.4.2-1 perl=5.32.1-5 perl-base=5.32.1-5 perl-modules-5.32=5.32.1-5 perl-openssl-defaults=5 po-debconf=1.0.21+nmu1 readline-common=8.1-2 sed=4.7-1 sensible-utils=0.0.14 shared-mime-info=2.0-1 sysvinit-utils=2.96-7 t1utils=1.41-4 tar=1.34+dfsg-1 tex-common=6.16 texinfo=6.7.0.dfsg.2-6 ucf=3.0043 unzip=6.0-26 util-linux=2.36.1-8 x11-common=1:7.7+22 x11proto-dev=2020.1-1 xkb-data=2.29-2 xorg-sgml-doctools=1:1.11-1.1 xtrans-dev=1.4.0-1 xz-utils=5.2.5-2 zlib1g=1:1.2.11.dfsg-2 zlib1g-dev=1:1.2.11.dfsg-2 --variant=apt --aptopt=Acquire::Check-Valid-Until "false" --aptopt=Acquire::http::Dl-Limit "1000"; --aptopt=Acquire::https::Dl-Limit "1000"; --aptopt=Acquire::Retries "5"; --aptopt=APT::Get::allow-downgrades "true"; --keyring=/usr/share/keyrings/ --essential-hook=chroot "$1" sh -c "apt-get --yes install fakeroot util-linux" --essential-hook=copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ --essential-hook=chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210819T203919Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210819T203919Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20210818T085356Z/ unstable main deb http://snapshot.notset.fr/archive/debian/20210815T204244Z/ unstable main' >> /etc/apt/sources.list && apt-get update" --customize-hook=chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash --customize-hook=chroot "$1" env sh -c "apt-get source --only-source -d octave-nurbs=1.4.3-2 && mkdir -p /build/octave-nurbs-scP5Tx && dpkg-source --no-check -x /*.dsc /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3 && chown -R builduser:builduser /build/octave-nurbs-scP5Tx" --customize-hook=chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3 && env DEB_BUILD_OPTIONS="parallel=4" LC_ALL="C.UTF-8" SOURCE_DATE_EPOCH="1629128308" dpkg-buildpackage -uc -a amd64 --build=any" --customize-hook=sync-out /build/octave-nurbs-scP5Tx /tmp/octave-nurbs-1.4.3-2y4aqvfcv bullseye /dev/null deb http://snapshot.notset.fr/archive/debian/20210815T204244Z unstable main I: automatically chosen mode: root I: chroot architecture amd64 is equal to the host's architecture I: automatically chosen format: tar I: using /tmp/mmdebstrap.TQA_h6GwHT as tempdir I: running apt-get update... I: downloading packages with apt... I: extracting archives... I: installing essential packages... I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "apt-get --yes install fakeroot util-linux"' exec /tmp/mmdebstrap.TQA_h6GwHT Reading package lists... Building dependency tree... util-linux is already the newest version (2.36.1-8). The following NEW packages will be installed: fakeroot libfakeroot 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 134 kB of archives. After this operation, 397 kB of additional disk space will be used. Get:1 http://snapshot.notset.fr/archive/debian/20210815T204244Z unstable/main amd64 libfakeroot amd64 1.25.3-1.1 [47.0 kB] Get:2 http://snapshot.notset.fr/archive/debian/20210815T204244Z unstable/main amd64 fakeroot amd64 1.25.3-1.1 [87.0 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 134 kB in 0s (1040 kB/s) Selecting previously unselected package libfakeroot:amd64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 4668 files and directories currently installed.) Preparing to unpack .../libfakeroot_1.25.3-1.1_amd64.deb ... Unpacking libfakeroot:amd64 (1.25.3-1.1) ... Selecting previously unselected package fakeroot. Preparing to unpack .../fakeroot_1.25.3-1.1_amd64.deb ... Unpacking fakeroot (1.25.3-1.1) ... Setting up libfakeroot:amd64 (1.25.3-1.1) ... Setting up fakeroot (1.25.3-1.1) ... update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode Processing triggers for libc-bin (2.31-13) ... I: running special hook: copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210819T203919Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210819T203919Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20210818T085356Z/ unstable main deb http://snapshot.notset.fr/archive/debian/20210815T204244Z/ unstable main' >> /etc/apt/sources.list && apt-get update"' exec /tmp/mmdebstrap.TQA_h6GwHT Get:1 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm InRelease [94.4 kB] Get:2 http://snapshot.notset.fr/archive/debian/20210818T085356Z unstable InRelease [165 kB] Hit:3 http://snapshot.notset.fr/archive/debian/20210815T204244Z unstable InRelease Ign:4 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm/main Sources Ign:5 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm/main amd64 Packages Ign:4 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm/main Sources Ign:5 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm/main amd64 Packages Ign:4 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm/main Sources Ign:5 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm/main amd64 Packages Get:4 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm/main Sources [11.5 MB] Get:5 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm/main amd64 Packages [11.2 MB] Ign:6 http://snapshot.notset.fr/archive/debian/20210818T085356Z unstable/main amd64 Packages Err:6 http://snapshot.notset.fr/archive/debian/20210818T085356Z unstable/main amd64 Packages 404 Not Found [IP: 10.13.0.253 80] Ign:6 http://snapshot.notset.fr/archive/debian/20210818T085356Z unstable/main amd64 Packages Get:6 http://snapshot.notset.fr/archive/debian/20210818T085356Z unstable/main amd64 Packages [11.8 MB] Fetched 34.8 MB in 29s (1209 kB/s) Reading package lists... I: installing remaining packages inside the chroot... I: running --customize-hook in shell: sh -c 'chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash' exec /tmp/mmdebstrap.TQA_h6GwHT I: running --customize-hook in shell: sh -c 'chroot "$1" env sh -c "apt-get source --only-source -d octave-nurbs=1.4.3-2 && mkdir -p /build/octave-nurbs-scP5Tx && dpkg-source --no-check -x /*.dsc /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3 && chown -R builduser:builduser /build/octave-nurbs-scP5Tx"' exec /tmp/mmdebstrap.TQA_h6GwHT Reading package lists... NOTICE: 'octave-nurbs' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/pkg-octave-team/octave-nurbs.git Please use: git clone https://salsa.debian.org/pkg-octave-team/octave-nurbs.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 131 kB of source archives. Get:1 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm/main octave-nurbs 1.4.3-2 (dsc) [2133 B] Get:2 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm/main octave-nurbs 1.4.3-2 (tar) [124 kB] Get:3 http://snapshot.notset.fr/archive/debian/20210819T203919Z bookworm/main octave-nurbs 1.4.3-2 (diff) [3964 B] Fetched 131 kB in 0s (755 kB/s) Download complete and in download only mode W: Download is performed unsandboxed as root as file 'octave-nurbs_1.4.3-2.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) dpkg-source: info: extracting octave-nurbs in /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3 dpkg-source: info: unpacking octave-nurbs_1.4.3.orig.tar.gz dpkg-source: info: unpacking octave-nurbs_1.4.3-2.debian.tar.xz I: running --customize-hook in shell: sh -c 'chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3 && env DEB_BUILD_OPTIONS="parallel=4" LC_ALL="C.UTF-8" SOURCE_DATE_EPOCH="1629128308" dpkg-buildpackage -uc -a amd64 --build=any"' exec /tmp/mmdebstrap.TQA_h6GwHT dpkg-buildpackage: info: source package octave-nurbs dpkg-buildpackage: info: source version 1.4.3-2 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Rafael Laboissière dpkg-source --before-build . dpkg-buildpackage: info: host architecture amd64 debian/rules clean dh clean --buildsystem=octave --with=octave dh_auto_clean -O--buildsystem=octave dh_octave_clean make[1]: Entering directory '/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/src' rm -f *.o core octave-core *.oct *~ make[1]: Leaving directory '/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/src' dh_autoreconf_clean -O--buildsystem=octave dh_clean -O--buildsystem=octave debian/rules binary-arch dh binary-arch --buildsystem=octave --with=octave dh_update_autotools_config -a -O--buildsystem=octave dh_autoreconf -a -O--buildsystem=octave dh_octave_version -a -O--buildsystem=octave Checking the Octave version... ok dh_auto_configure -a -O--buildsystem=octave dh_auto_build -a -O--buildsystem=octave dh_auto_test -a -O--buildsystem=octave create-stamp debian/debhelper-build-stamp dh_testroot -a -O--buildsystem=octave dh_prep -a -O--buildsystem=octave dh_auto_install -a -O--buildsystem=octave octave --no-gui --no-history --silent --no-init-file --no-window-system /usr/share/dh-octave/install-pkg.m warning: creating installation directory /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/debian/octave-nurbs/usr/share/octave/packages warning: called from install at line 36 column 5 pkg at line 568 column 9 /usr/share/dh-octave/install-pkg.m at line 43 column 1 make[1]: Entering directory '/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/src' /usr/bin/mkoctfile --verbose -c low_level_functions.cc g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security low_level_functions.cc -o low_level_functions.o /usr/bin/mkoctfile --verbose basisfun.cc low_level_functions.o /usr/bin/mkoctfile --verbose basisfunder.cc low_level_functions.o /usr/bin/mkoctfile --verbose bspderiv.cc low_level_functions.o /usr/bin/mkoctfile --verbose bspeval.cc low_level_functions.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security basisfun.cc -o /tmp/oct-lbZoVg.o /usr/bin/mkoctfile --verbose curvederivcpts.cc low_level_functions.o /usr/bin/mkoctfile --verbose nrb_srf_basisfun__.cc low_level_functions.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security bspderiv.cc -o /tmp/oct-58muwo.o /usr/bin/mkoctfile --verbose nrb_srf_basisfun_der__.cc low_level_functions.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security basisfunder.cc -o /tmp/oct-wUln6i.o /usr/bin/mkoctfile --verbose nrbsurfderiveval.cc low_level_functions.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security bspeval.cc -o /tmp/oct-HNMKZu.o /usr/bin/mkoctfile --verbose surfderivcpts.cc low_level_functions.o /usr/bin/mkoctfile --verbose surfderiveval.cc low_level_functions.o /usr/bin/mkoctfile --verbose tbasisfun.cc low_level_functions.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security curvederivcpts.cc -o /tmp/oct-hXrT1z.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security nrb_srf_basisfun__.cc -o /tmp/oct-oeUQMG.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security nrb_srf_basisfun_der__.cc -o /tmp/oct-2fHiHO.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security surfderiveval.cc -o /tmp/oct-6udoFw.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security nrbsurfderiveval.cc -o /tmp/oct-deMnWZ.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security surfderivcpts.cc -o /tmp/oct-gSeTWi.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security tbasisfun.cc -o /tmp/oct-OG9mRz.o g++ -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -o basisfunder.oct low_level_functions.o /tmp/oct-wUln6i.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -o surfderiveval.oct low_level_functions.o /tmp/oct-6udoFw.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -o bspderiv.oct low_level_functions.o /tmp/oct-58muwo.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -o curvederivcpts.oct low_level_functions.o /tmp/oct-hXrT1z.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -o basisfun.oct low_level_functions.o /tmp/oct-lbZoVg.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -o bspeval.oct low_level_functions.o /tmp/oct-HNMKZu.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -o surfderivcpts.oct low_level_functions.o /tmp/oct-gSeTWi.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -o tbasisfun.oct low_level_functions.o /tmp/oct-OG9mRz.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -o nrbsurfderiveval.oct low_level_functions.o /tmp/oct-deMnWZ.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -o nrb_srf_basisfun_der__.oct low_level_functions.o /tmp/oct-2fHiHO.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.2.0/octave/.. -I/usr/include/octave-6.2.0/octave -pthread -fopenmp -g -O2 -ffile-prefix-map=/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -o nrb_srf_basisfun__.oct low_level_functions.o /tmp/oct-oeUQMG.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro make[1]: Leaving directory '/build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/src' copyfile /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/basisfun.oct /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/basisfunder.oct /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/bspderiv.oct /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/bspeval.oct /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/curvederivcpts.oct /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/nrb_srf_basisfun__.oct /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/nrb_srf_basisfun_der__.oct /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/nrbsurfderiveval.oct /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/surfderivcpts.oct /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/surfderiveval.oct /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/tbasisfun.oct /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/basisfun.cc-tst /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/curvederivcpts.cc-tst /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/nrbsurfderiveval.cc-tst /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/surfderivcpts.cc-tst /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/surfderiveval.cc-tst /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./src/tbasisfun.cc-tst /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/./inst/x86_64-pc-linux-gnu-api-v55 For information about changes from previous versions of the nurbs package, run 'news nurbs'. chmod: cannot access 'debian/*/usr/lib/*/octave/packages/*/*/*.mex': No such file or directory dh_octave_check -a -O--buildsystem=octave Checking package... Checking m files ... [inst/findspan.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/findspan.m ***** test n = 3; U = [0 0 0 1/2 1 1 1]; p = 2; u = linspace(0, 1, 10); s = findspan (n, p, u, U); assert (s, [2*ones(1, 5) 3*ones(1, 5)]); ***** test p = 2; m = 7; n = m - p - 1; U = [zeros(1,p) linspace(0,1,m+1-2*p) ones(1,p)]; u = [ 0 0.11880 0.55118 0.93141 0.40068 0.35492 0.44392 0.88360 0.35414 0.92186 0.83085 1]; s = [2 2 3 4 3 3 3 4 3 4 4 4]; assert (findspan (n, p, u, U), s, 1e-10); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/nrbsurfderiveval.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbsurfderiveval.m ***** test k = [0 0 1 1]; c = [0 1]; [coef(2,:,:), coef(1,:,:)] = meshgrid (c, c); coef(3,:,:) = coef(1,:,:); srf = nrbmak (coef, {k, k}); [u, v] = meshgrid (linspace(0,1,11)); uv = [u(:)';v(:)']; skl = nrbsurfderiveval (srf, uv, 0); aux = nrbeval(srf,uv); assert (squeeze (skl (1:2,1,1,:)), aux(1:2,:), 1e3*eps) ***** test k = [0 0 1 1]; c = [0 1]; [coef(2,:,:), coef(1,:,:)] = meshgrid (c, c); coef(3,:,:) = coef(1,:,:); srf = nrbmak (coef, {k, k}); srf = nrbkntins (srf, {[], rand(2,1)}); [u, v] = meshgrid (linspace(0,1,11)); uv = [u(:)';v(:)']; skl = nrbsurfderiveval (srf, uv, 0); aux = nrbeval(srf,uv); assert (squeeze (skl (1:2,1,1,:)), aux(1:2,:), 1e3*eps) ***** shared srf, uv ***** test k = [0 0 0 1 1 1]; c = [0 1/2 1]; [coef(1,:,:), coef(2,:,:)] = meshgrid (c, c); coef(3,:,:) = coef(1,:,:); srf = nrbmak (coef, {k, k}); ders= nrbderiv (srf); [u, v] = meshgrid (linspace(0,1,11)); uv = [u(:)';v(:)']; skl = nrbsurfderiveval (srf, uv, 1); [fun, der] = nrbdeval (srf, ders, uv); assert (squeeze (skl (1:2,1,1,:)), fun(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,2,1,:)), der{1}(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,1,2,:)), der{2}(1:2,:), 1e3*eps) ***** test srf = nrbdegelev (srf, [3, 1]); ders= nrbderiv (srf); [fun, der] = nrbdeval (srf, ders, uv); skl = nrbsurfderiveval (srf, uv, 1); assert (squeeze (skl (1:2,1,1,:)), fun(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,2,1,:)), der{1}(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,1,2,:)), der{2}(1:2,:), 1e3*eps) ***** shared uv ***** test k = [0 0 0 1 1 1]; c = [0 1/2 1]; [coef(2,:,:), coef(1,:,:)] = meshgrid (c, c); coef(3,:,:) = coef(1,:,:); srf = nrbmak (coef, {k, k}); ders= nrbderiv (srf); [u, v] = meshgrid (linspace(0,1,11)); uv = [u(:)';v(:)']; skl = nrbsurfderiveval (srf, uv, 1); [fun, der] = nrbdeval (srf, ders, uv); assert (squeeze (skl (1:2,1,1,:)), fun(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,2,1,:)), der{1}(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,1,2,:)), der{2}(1:2,:), 1e3*eps) ***** test p = 3; q = 3; mcp = 5; ncp = 5; Lx = 10*rand(1); Ly = Lx; srf = nrbdegelev (nrb4surf ([0 0], [Lx, 0], [0 Ly], [Lx Ly]), [p-1, q-1]); %%srf = nrbkntins (srf, {linspace(0,1,mcp-p+2)(2:end-1), linspace(0,1,ncp-q+2)(2:end-1)}); %%srf.coefs = permute (srf.coefs, [1 3 2]); ders= nrbderiv (srf); [fun, der] = nrbdeval (srf, ders, uv); skl = nrbsurfderiveval (srf, uv, 1); assert (squeeze (skl (1:2,1,1,:)), fun(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,2,1,:)), der{1}(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,1,2,:)), der{2}(1:2,:), 1e3*eps) ***** shared srf, uv, P, dPdx, d2Pdx2, c1, c2 ***** test [u, v] = meshgrid (linspace(0,1,10)); uv = [u(:)';v(:)']; c1 = nrbmak([0 1/2 1; 0 1 0],[0 0 0 1 1 1]); c1 = nrbtform (c1, vecrotx (pi/2)); c2 = nrbtform(c1, vectrans([0 1 0])); srf = nrbdegelev (nrbruled (c1, c2), [3, 1]); skl = nrbsurfderiveval (srf, uv, 2); P = squeeze(skl(:,1,1,:)); dPdx = squeeze(skl(:,2,1,:)); d2Pdx2 = squeeze(skl(:,3,1,:)); ***** assert(P(3,:), 2*(P(1,:)-P(1,:).^2),100*eps) ***** assert(dPdx(3,:), 2-4*P(1,:), 100*eps) ***** assert(d2Pdx2(3,:), -4+0*P(1,:), 100*eps) srf = nrbdegelev (nrbruled (c1, c2), [5, 6]); skl = nrbsurfderiveval (srf, uv, 2); P = squeeze(skl(:,1,1,:)); dPdx = squeeze(skl(:,2,1,:)); d2Pdx2 = squeeze(skl(:,3,1,:)); aux = nrbeval(srf,uv); assert (squeeze (skl (1:2,1,1,:)), aux(1:2,:), 1e3*eps) ***** assert(P(3,:), 2*(P(1,:)-P(1,:).^2),100*eps) ***** assert(dPdx(3,:), 2-4*P(1,:), 100*eps) ***** assert(d2Pdx2(3,:), -4+0*P(1,:), 100*eps) ***** test skl = nrbsurfderiveval (srf, uv, 0); aux = nrbeval (srf, uv); assert (squeeze (skl (1:2,1,1,:)), aux(1:2,:), 1e3*eps) ***** shared dPdu, d2Pdu2, P, srf, uv ***** test [u, v] = meshgrid (linspace(0,1,10)); uv = [u(:)';v(:)']; c1 = nrbmak([0 1/2 1; 0.1 1.6 1.1; 0 0 0],[0 0 0 1 1 1]); c2 = nrbmak([0 1/2 1; 0.1 1.6 1.1; 1 1 1],[0 0 0 1 1 1]); srf = nrbdegelev (nrbruled (c1, c2), [0, 1]); skl = nrbsurfderiveval (srf, uv, 2); P = squeeze(skl(:,1,1,:)); dPdu = squeeze(skl(:,2,1,:)); dPdv = squeeze(skl(:,1,2,:)); d2Pdu2 = squeeze(skl(:,3,1,:)); aux = nrbeval(srf,uv); assert (squeeze (skl (1:2,1,1,:)), aux(1:2,:), 1e3*eps) ***** assert(dPdu(2,:), 3-4*P(1,:),100*eps) ***** assert(d2Pdu2(2,:), -4+0*P(1,:),100*eps) ***** test skl = nrbsurfderiveval (srf, uv, 0); aux = nrbeval(srf,uv); assert (squeeze (skl (1:2,1,1,:)), aux(1:2,:), 1e3*eps) ***** test srf = nrb4surf([0 0], [1 0], [0 1], [1 1]); geo = nrbdegelev (srf, [3 3]); geo = nrbkntins (geo, {[.1:.1:.9], [.2:.2:.8]}); [u, v] = meshgrid (linspace(0,1,10)); uv = [u(:)';v(:)']; skl = nrbsurfderiveval (geo, uv, 2); dgeo = nrbderiv (geo); [pnts, ders] = nrbdeval (geo, dgeo, uv); assert (ders{1}, squeeze(skl(:,2,1,:)), 1e-9) assert (ders{2}, squeeze(skl(:,1,2,:)), 1e-9) ***** test crv = nrbline ([1 0], [2 0]); srf = nrbrevolve (crv, [0 0 0], [0 0 1], pi/2); srf = nrbtransp (srf); [v, u] = meshgrid (linspace (0, 1, 11)); uv = [u(:)'; v(:)']; skl = nrbsurfderiveval (srf, uv, 2); c = sqrt(2); w = @(x, y) (2 - c)*y.^2 + (c-2)*y + 1; dwdy = @(x, y) 2*(2-c)*y + c - 2; d2wdy2 = @(x, y) 2*(2-c); F1 = @(x, y) (x+1) .* ((1-y).^2 + c*y.*(1-y)) ./ w(x,y); F2 = @(x, y) (x+1) .* (y.^2 + c*y.*(1-y)) ./ w(x,y); dF1dx = @(x, y) ((1-y).^2 + c*y.*(1-y)) ./ w(x,y); dF2dx = @(x, y) (y.^2 + c*y.*(1-y)) ./ w(x,y); dF1dy = @(x, y) (x+1) .* ((2 - 2*c)*y + c - 2) ./ w(x,y) - (x+1) .* ((1-y).^2 + c*y.*(1-y)) .* dwdy(x,y) ./ w(x,y).^2; dF2dy = @(x, y) (x+1) .* ((2 - 2*c)*y + c) ./ w(x,y) - (x+1) .* (y.^2 + c*y.*(1-y)) .* dwdy(x,y) ./ w(x,y).^2; d2F1dx2 = @(x, y) zeros (size (x)); d2F2dx2 = @(x, y) zeros (size (x)); d2F1dxdy = @(x, y) ((2 - 2*c)*y + c - 2) ./ w(x,y) - ((1-y).^2 + c*y.*(1-y)) .* dwdy(x,y) ./ w(x,y).^2; d2F2dxdy = @(x, y) ((2 - 2*c)*y + c) ./ w(x,y) - (y.^2 + c*y.*(1-y)) .* dwdy(x,y) ./ w(x,y).^2; d2F1dy2 = @(x, y) (x+1)*(2 - 2*c) ./ w(x,y) - 2*(x+1) .* ((2 - 2*c)*y + c - 2) .* dwdy(x,y) ./ w(x,y).^2 - ... (x+1) .* ((1-y).^2 + c*y.*(1-y)) * d2wdy2(x,y) ./ w(x,y).^2 + ... 2 * (x+1) .* ((1-y).^2 + c*y.*(1-y)) .* w(x,y) .*dwdy(x,y).^2 ./ w(x,y).^4; d2F2dy2 = @(x, y) (x+1)*(2 - 2*c) ./ w(x,y) - 2*(x+1) .* ((2 - 2*c)*y + c) .* dwdy(x,y) ./ w(x,y).^2 - ... (x+1) .* (y.^2 + c*y.*(1-y)) * d2wdy2(x,y) ./ w(x,y).^2 + ... 2 * (x+1) .* (y.^2 + c*y.*(1-y)) .* w(x,y) .*dwdy(x,y).^2 ./ w(x,y).^4; assert ([F1(u(:),v(:)), F2(u(:),v(:))], squeeze(skl(1:2,1,1,:))', 1e2*eps); assert ([dF1dx(u(:),v(:)), dF2dx(u(:),v(:))], squeeze(skl(1:2,2,1,:))', 1e2*eps); assert ([dF1dy(u(:),v(:)), dF2dy(u(:),v(:))], squeeze(skl(1:2,1,2,:))', 1e2*eps); assert ([d2F1dx2(u(:),v(:)), d2F2dx2(u(:),v(:))], squeeze(skl(1:2,3,1,:))', 1e2*eps); assert ([d2F1dxdy(u(:),v(:)), d2F2dxdy(u(:),v(:))], squeeze(skl(1:2,2,2,:))', 1e2*eps); assert ([d2F1dy2(u(:),v(:)), d2F2dy2(u(:),v(:))], squeeze(skl(1:2,1,3,:))', 1e2*eps); ***** test knots = {[0 0 1 1] [0 0 1 1]}; coefs(:,1,1) = [0;0;0;1]; coefs(:,2,1) = [1;0;0;1]; coefs(:,1,2) = [0;1;0;1]; coefs(:,2,2) = [1;1;1;2]; srf = nrbmak (coefs, knots); [v, u] = meshgrid (linspace (0, 1, 3)); uv = [u(:)'; v(:)']; skl = nrbsurfderiveval (srf, uv, 2); w = @(x, y) x.*y + 1; F1 = @(x, y) x ./ w(x,y); F2 = @(x, y) y ./ w(x,y); F3 = @(x, y) x .* y ./ w(x,y); dF1dx = @(x, y) 1./w(x,y) - x.*y./w(x,y).^2; dF1dy = @(x, y) - x.^2./w(x,y).^2; dF2dx = @(x, y) - y.^2./w(x,y).^2; dF2dy = @(x, y) 1./w(x,y) - x.*y./w(x,y).^2; dF3dx = @(x, y) y./w(x,y) - x.*(y./w(x,y)).^2; dF3dy = @(x, y) x./w(x,y) - y.*(x./w(x,y)).^2; d2F1dx2 = @(x, y) -2*y./w(x,y).^2 + 2*x.*y.^2./w(x,y).^3; d2F1dy2 = @(x, y) 2*x.^3./w(x,y).^3; d2F1dxdy = @(x, y) -x./w(x,y).^2 - x./w(x,y).^2 + 2*x.^2.*y./w(x,y).^3; d2F2dx2 = @(x, y) 2*y.^3./w(x,y).^3; d2F2dy2 = @(x, y) -2*x./w(x,y).^2 + 2*y.*x.^2./w(x,y).^3; d2F2dxdy = @(x, y) -y./w(x,y).^2 - y./w(x,y).^2 + 2*y.^2.*x./w(x,y).^3; d2F3dx2 = @(x, y) -2*y.^2./w(x,y).^2 + 2*x.*y.^3./w(x,y).^3; d2F3dy2 = @(x, y) -2*x.^2./w(x,y).^2 + 2*y.*x.^3./w(x,y).^3; d2F3dxdy = @(x, y) 1./w(x,y) - 3*x.*y./w(x,y).^2 + 2*(x.*y).^2./w(x,y).^3; assert ([F1(u(:),v(:)), F2(u(:),v(:)), F3(u(:),v(:))], squeeze(skl(1:3,1,1,:))', 1e2*eps); assert ([dF1dx(u(:),v(:)), dF2dx(u(:),v(:)), dF3dx(u(:),v(:))], squeeze(skl(1:3,2,1,:))', 1e2*eps); assert ([dF1dy(u(:),v(:)), dF2dy(u(:),v(:)), dF3dy(u(:),v(:))], squeeze(skl(1:3,1,2,:))', 1e2*eps); assert ([d2F1dx2(u(:),v(:)), d2F2dx2(u(:),v(:)), d2F3dx2(u(:),v(:))], squeeze(skl(1:3,3,1,:))', 1e2*eps); assert ([d2F1dy2(u(:),v(:)), d2F2dy2(u(:),v(:)), d2F3dy2(u(:),v(:))], squeeze(skl(1:3,1,3,:))', 1e2*eps); assert ([d2F1dxdy(u(:),v(:)), d2F2dxdy(u(:),v(:)), d2F3dxdy(u(:),v(:))], squeeze(skl(1:3,2,2,:))', 1e2*eps); 21 tests, 21 passed, 0 known failure, 0 skipped [inst/nrbreverse.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbreverse.m ***** demo pnts = [0.5 1.5 3.0 7.5 8.5; 3.0 5.5 1.5 4.0 4.5; 0.0 0.0 0.0 0.0 0.0]; crv1 = nrbmak(pnts,[0 0 0 1/2 3/4 1 1 1]); crv2 = nrbreverse(crv1); fprintf('Knots of the original curve\n') disp(crv1.knots) fprintf('Knots of the reversed curve\n') disp(crv2.knots) fprintf('Control points of the original curve\n') disp(crv1.coefs(1:2,:)) fprintf('Control points of the reversed curve\n') disp(crv2.coefs(1:2,:)) nrbplot(crv1,100) hold on nrbplot(crv2,100) title('The curve and its reverse are the same') hold off ***** test srf = nrbrevolve(nrbline([1 0],[2 0]), [0 0 0], [0 0 1], pi/2); srf = nrbkntins (srf, {0.3, 0.6}); srf2 = nrbreverse (srf); assert (srf.knots, cellfun(@(x) sort(1-x), srf2.knots, 'UniformOutput', false), 1e-15) assert (srf.coefs, srf2.coefs(:,end:-1:1,end:-1:1)) ***** test srf = nrbrevolve(nrbline([1 0],[2 0]), [0 0 0], [0 0 1], pi/2); srf = nrbkntins (srf, {0.3, 0.6}); srf2 = nrbreverse (srf, 1); knt{1} = sort(1-srf2.knots{1}); knt{2} = srf2.knots{2}; assert (srf.knots, knt, 1e-15) assert (srf.coefs, srf2.coefs(:,end:-1:1,:)) srf2 = nrbreverse (srf, 2); knt{1} = srf2.knots{1}; knt{2} = sort(1-srf2.knots{2}); assert (srf.knots, knt, 1e-15) assert (srf.coefs, srf2.coefs(:,:,end:-1:1)) 2 tests, 2 passed, 0 known failure, 0 skipped [inst/surfderivcpts.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/surfderivcpts.m ***** test coefs = cat(3,[0 0; 0 1],[1 1; 0 1]); knots = {[0 0 1 1] [0 0 1 1]}; plane = nrbmak(coefs,knots); pkl = surfderivcpts (plane.number(1)-1, plane.order(1)-1,... plane.knots{1}, plane.number(2)-1,... plane.order(2)-1, plane.knots{2}, ... squeeze (plane.coefs(1,:,:)), 1); 1 test, 1 passed, 0 known failure, 0 skipped [inst/nrbnumbasisfun.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbnumbasisfun.m ***** test p = 2; q = 3; m = 4; n = 5; Lx = 1; Ly = 1; nrb = nrb4surf ([0 0], [1 0], [0 1], [1 1]); nrb = nrbdegelev (nrb, [p-1, q-1]); ikx = linspace(0,1,m); iky = linspace(0,1,n); nrb = nrbkntins (nrb, {ikx(2:end-1), iky(2:end-1)}); nrb.coefs (4,:,:) = nrb.coefs (4,:,:) + rand (size (nrb.coefs (4,:,:))); u = rand (1, 30); v = rand (1, 10); u = (u-min (u))/max (u-min (u)); v = (v-min (v))/max (v-min (v)); N = nrbnumbasisfun ({u, v}, nrb); assert (all (all (N>0)), true) assert (all (all (N <= prod (nrb.number))), true) assert (max (max (N)), prod (nrb.number)) assert (min (min (N)), 1) 1 test, 1 passed, 0 known failure, 0 skipped [inst/nrbdeval.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbdeval.m ***** demo crv = nrbtestcrv; nrbplot(crv,48); title('First derivatives along a test curve.'); tt = linspace(0.0,1.0,9); dcrv = nrbderiv(crv); [p1, dp] = nrbdeval(crv,dcrv,tt); p2 = vecnormalize(dp); hold on; plot(p1(1,:),p1(2,:),'ro'); h = quiver(p1(1,:),p1(2,:),p2(1,:),p2(2,:),0); set(h,'Color','black'); hold off; ***** demo srf = nrbtestsrf; p = nrbeval(srf,{linspace(0.0,1.0,20) linspace(0.0,1.0,20)}); h = surf(squeeze(p(1,:,:)),squeeze(p(2,:,:)),squeeze(p(3,:,:))); set(h,'FaceColor','blue','EdgeColor','blue'); title('First derivatives over a test surface.'); npts = 5; tt = linspace(0.0,1.0,npts); dsrf = nrbderiv(srf); [p1, dp] = nrbdeval(srf, dsrf, {tt, tt}); up2 = vecnormalize(dp{1}); vp2 = vecnormalize(dp{2}); hold on; plot3(p1(1,:),p1(2,:),p1(3,:),'ro'); h1 = quiver3(p1(1,:),p1(2,:),p1(3,:),up2(1,:),up2(2,:),up2(3,:)); h2 = quiver3(p1(1,:),p1(2,:),p1(3,:),vp2(1,:),vp2(2,:),vp2(3,:)); set(h1,'Color','black'); set(h2,'Color','black'); hold off; ***** test knots{1} = [0 0 0 1 1 1]; knots{2} = [0 0 0 .5 1 1 1]; knots{3} = [0 0 0 0 1 1 1 1]; cx = [0 0.5 1]; nx = length(cx); cy = [0 0.25 0.75 1]; ny = length(cy); cz = [0 1/3 2/3 1]; nz = length(cz); coefs(1,:,:,:) = repmat(reshape(cx,nx,1,1),[1 ny nz]); coefs(2,:,:,:) = repmat(reshape(cy,1,ny,1),[nx 1 nz]); coefs(3,:,:,:) = repmat(reshape(cz,1,1,nz),[nx ny 1]); coefs(4,:,:,:) = 1; nurbs = nrbmak(coefs, knots); x = rand(5,1); y = rand(5,1); z = rand(5,1); tt = [x y z]'; ders = nrbderiv(nurbs); [points,jac] = nrbdeval(nurbs,ders,tt); assert(points,tt,1e-10) assert(jac{1}(1,:,:),ones(size(jac{1}(1,:,:))),1e-12) assert(jac{2}(2,:,:),ones(size(jac{2}(2,:,:))),1e-12) assert(jac{3}(3,:,:),ones(size(jac{3}(3,:,:))),1e-12) ***** test knots{1} = [0 0 0 1 1 1]; knots{2} = [0 0 0 0 1 1 1 1]; knots{3} = [0 0 0 1 1 1]; cx = [0 0 1]; nx = length(cx); cy = [0 0 0 1]; ny = length(cy); cz = [0 0.5 1]; nz = length(cz); coefs(1,:,:,:) = repmat(reshape(cx,nx,1,1),[1 ny nz]); coefs(2,:,:,:) = repmat(reshape(cy,1,ny,1),[nx 1 nz]); coefs(3,:,:,:) = repmat(reshape(cz,1,1,nz),[nx ny 1]); coefs(4,:,:,:) = 1; coefs = coefs([2 1 3 4],:,:,:); nurbs = nrbmak(coefs, knots); x = rand(5,1); y = rand(5,1); z = rand(5,1); tt = [x y z]'; dnurbs = nrbderiv(nurbs); [points, jac] = nrbdeval(nurbs,dnurbs,tt); assert(points,[y.^3 x.^2 z]',1e-10); assert(jac{2}(1,:,:),3*y'.^2,1e-12) assert(jac{1}(2,:,:),2*x',1e-12) assert(jac{3}(3,:,:),ones(size(z')),1e-12) 2 tests, 2 passed, 0 known failure, 0 skipped [inst/basisfunder.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/basisfunder.m ***** test k = [0 0 0 0 1 1 1 1]; p = 3; u = rand (1); i = findspan (numel(k)-p-2, p, u, k); ders = basisfunder (i, p, u, k, 1); sumders = sum (squeeze(ders), 2); assert (sumders(1), 1, 1e-15); assert (sumders(2:end), 0, 1e-15); ***** test k = [0 0 0 0 1/3 2/3 1 1 1 1]; p = 3; u = rand (1); i = findspan (numel(k)-p-2, p, u, k); ders = basisfunder (i, p, u, k, 7); sumders = sum (squeeze(ders), 2); assert (sumders(1), 1, 1e-15); assert (sumders(2:end), zeros(rows(squeeze(ders))-1, 1), 1e-13); ***** test k = [0 0 0 0 1/3 2/3 1 1 1 1]; p = 3; u = rand (100, 1); i = findspan (numel(k)-p-2, p, u, k); ders = basisfunder (i, p, u, k, 7); for ii=1:10 sumders = sum (squeeze(ders(ii,:,:)), 2); assert (sumders(1), 1, 1e-15); assert (sumders(2:end), zeros(rows(squeeze(ders(ii,:,:)))-1, 1), 1e-13); end assert (ders(:, (p+2):end, :), zeros(numel(u), 8-p-1, p+1), 1e-13) assert (all(all(ders(:, 1, :) <= 1)), true) 3 tests, 3 passed, 0 known failure, 0 skipped [inst/nrbsquare.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbsquare.m ***** test srf = nrbsquare ([], 1, 2, 2, 4); assert (srf.order, [3 3]); knt = [0 0 0 1/4 1/2 3/4 1 1 1]; assert (srf.knots, {knt knt}) x = linspace (0, 1, 100); [X,Y] = ndgrid (x, x); vals = nrbeval (srf, {x x}); assert (squeeze(vals(1,:,:)), X, 1e-15); assert (squeeze(vals(2,:,:)), 2*Y, 1e-15); 1 test, 1 passed, 0 known failure, 0 skipped [inst/crvkntremove.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/crvkntremove.m ***** test crv = nrbdegelev (nrbline (), 3); acrv = nrbkntins (crv, [.11 .11 .11]); [rcrv, t] = crvkntremove (acrv, .11, 8, 3, 3, 1e-10); assert (crv.knots, rcrv.knots, 1e-10); assert (t, 3); ***** test crv = nrbcirc (); acrv = nrbkntins (crv, [.3 .3]); [rcrv, t] = crvkntremove (acrv, .3, 7, 2, 2, 1e-10); assert (crv.knots, rcrv.knots, 1e-10); assert (t, 2); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/nrbclamp.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbclamp.m ***** test crv = nrbdegelev (nrbcirc (1, [], 0, pi/2), 2); crv = nrbunclamp (crv, 3); xx = linspace (0, 1, 20); crv1 = nrbclamp (crv); assert (crv1.knots, [0 0 0 0 0 1 1 1 1 1]) assert (nrbeval(crv, xx), nrbeval(crv1, xx), 1e-14) crv1 = nrbclamp (crv, 2); assert (crv1.knots, [-3 -2 -1 0 0 1 1 2 3 4]) assert (nrbeval(crv, xx), nrbeval(crv1, xx), 1e-14) ***** test crv1 = nrbcirc(1,[],0,pi/4); crv2 = nrbcirc(2,[],0,pi/4); srf = nrbkntins (nrbdegelev (nrbruled(crv1, crv2), [3 2]), {0.25 []}); srf = nrbunclamp (srf, [4 2]); srf1 = nrbclamp (srf); xx = linspace(0,1,20); assert(srf1.knots, {[0 0 0 0 0 0 0.2500 1 1 1 1 1 1] [0 0 0 0 1 1 1 1]}) assert (nrbeval(srf, {xx xx}), nrbeval(srf1, {xx xx}), 1e-14); srf1 = nrbclamp (srf, [3 1]); assert (srf1.knots, {[-2 -1.75 -1 -0.75 0 0 0.25 1 1 1.25 2 2.25 3], [-2 -1 0 0 1 1 2 3]}) assert (nrbeval(srf, {xx xx}), nrbeval(srf1, {xx xx}), 1e-14); srf1 = nrbclamp (srf, [], 2); assert(srf1.knots, {[-2.75 -2 -1.75 -1 -0.75 0 0.25 1 1.25 2 2.25 3 3.25] [0 0 0 0 1 1 1 1]}) assert (nrbeval(srf, {xx xx}), nrbeval(srf1, {xx xx}), 1e-14); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/nrbinverse.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbinverse.m ***** test nrb = nrb4surf ([0 0], [1 0], [2 3], [5 4]); p = nrbeval (nrb, {.25 .75}); u = nrbinverse (nrb, p, 'Display', false); assert (norm (u - [.25; .75]) < 1e-8); ***** test nrb = nrb4surf ([0 0], [1 0], [2 3], [5 4]); nrb = nrbdegelev (nrbextrude (nrb, [0 2 1]), [3 3 3]); p = nrbeval (nrb, {.25 .75 .05}); u = nrbinverse (nrb, p, 'Display', false, 'TolX', 1e-12, 'TolFun', 1e-10); assert (norm (u - [.25; .75; .05]) < 1e-8); 2 tests, 2 passed, 0 known failure, 0 skipped [inst/kntrefine.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/kntrefine.m ***** shared nrbs ***** test knots = {[0 0 1 1] [0 0 0 1 1 1]}; coefs(1,:,:) = [1 sqrt(2)/2 0; 2 sqrt(2) 0]; coefs(2,:,:) = [0 sqrt(2)/2 1; 0 sqrt(2) 2]; coefs(4,:,:) = [1 sqrt(2)/2 1; 1 sqrt(2)/2 1]; nrbs = nrbmak (coefs, knots); nrbs = nrbkntins (nrbs, {[] [0.5 0.6 0.6]}); nrbs = nrbdegelev (nrbs, [0 1]); nrbs = nrbkntins (nrbs, {[] [0.4]}); rknots = kntrefine (nrbs.knots, [1 1], [1 1], [0 0]); assert (rknots{1} == [0 0 0.5 1 1]); assert (rknots{2} == [0 0 0.2 0.4 0.45 0.5 0.55 0.6 0.8 1 1]); ***** test rknots = kntrefine (nrbs.knots, [1 1], [3 3], [0 0]); assert (rknots{1}, [0 0 0 0 0.5 0.5 0.5 1 1 1 1]); assert (rknots{2}, [0 0 0 0 0.2 0.2 0.2 0.4 0.4 0.4 0.45 0.45 0.45 0.5 0.5 0.5 0.55 0.55 0.55 0.6 0.6 0.6 0.8 0.8 0.8 1 1 1 1]); ***** test rknots = kntrefine (nrbs.knots, [1 1], [3 3], [2 2]); assert (rknots{1}, [0 0 0 0 0.5 1 1 1 1]); assert (rknots{2}, [0 0 0 0 0.2 0.4 0.45 0.5 0.5 0.55 0.6 0.6 0.6 0.8 1 1 1 1]); ***** test rknots = kntrefine (nrbs.knots, [1 1], [4 4], [0 0]); assert (rknots{1}, [0 0 0 0 0 0.5 0.5 0.5 0.5 1 1 1 1 1]); assert (rknots{2}, [0 0 0 0 0 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.4 0.45 0.45 0.45 0.45 0.5 0.5 0.5 0.5 0.55 0.55 0.55 0.55 0.6 0.6 0.6 0.6 0.8 0.8 0.8 0.8 1 1 1 1 1]); ***** test rknots = kntrefine (nrbs.knots, [1 1], [4 4], [3 3]); assert (rknots{1}, [0 0 0 0 0 0.5 1 1 1 1 1]); assert (rknots{2}, [0 0 0 0 0 0.2 0.4 0.4 0.45 0.5 0.5 0.5 0.55 0.6 0.6 0.6 0.6 0.8 1 1 1 1 1]); ***** test knots = [0 0 0 0 0.4 0.5 0.5 0.6 0.6 0.6 1 1 1 1]; rknots = kntrefine (knots, 1, 4, 3); assert (rknots, [0 0 0 0 0 0.2 0.4 0.4 0.45 0.5 0.5 0.5 0.55 0.6 0.6 0.6 0.6 0.8 1 1 1 1 1]); 6 tests, 6 passed, 0 known failure, 0 skipped [inst/nrbbasisfunder.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbbasisfunder.m ***** demo U = [0 0 0 0 1 1 1 1]; x = [0 1/3 2/3 1] ; y = [0 0 0 0]; w = [1 1 1 1]; nrb = nrbmak ([x;y;y;w], U); u = linspace(0, 1, 30); [Bu, id] = nrbbasisfunder (u, nrb); plot(u, Bu) title('Derivatives of the cubic Bernstein polynomials') hold off ***** test U = [0 0 0 0 1 1 1 1]; x = [0 1/3 2/3 1] ; y = [0 0 0 0]; w = rand(1,4); nrb = nrbmak ([x;y;y;w], U); u = linspace(0, 1, 30); [Bu, id] = nrbbasisfunder (u, nrb); #plot(u, Bu) assert (sum(Bu, 2), zeros(numel(u), 1), 1e-10), ***** test U = [0 0 0 0 1/2 1 1 1 1]; x = [0 1/4 1/2 3/4 1] ; y = [0 0 0 0 0]; w = rand(1,5); nrb = nrbmak ([x;y;y;w], U); u = linspace(0, 1, 300); [Bu, id] = nrbbasisfunder (u, nrb); assert (sum(Bu, 2), zeros(numel(u), 1), 1e-10) ***** test p = 2; q = 3; m = 4; n = 5; Lx = 1; Ly = 1; nrb = nrb4surf ([0 0], [1 0], [0 1], [1 1]); nrb = nrbdegelev (nrb, [p-1, q-1]); aux1 = linspace(0,1,m); aux2 = linspace(0,1,n); nrb = nrbkntins (nrb, {aux1(2:end-1), aux2(2:end-1)}); nrb.coefs (4,:,:) = nrb.coefs(4,:,:) + rand (size (nrb.coefs (4,:,:))); [Bu, Bv, N] = nrbbasisfunder ({rand(1, 20), rand(1, 20)}, nrb); #plot3(squeeze(u(1,:,:)), squeeze(u(2,:,:)), reshape(Bu(:,10), 20, 20),'o') assert (sum (Bu, 2), zeros(20^2, 1), 1e-10) 3 tests, 3 passed, 0 known failure, 0 skipped [inst/numbasisfun.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/numbasisfun.m ***** test n = 3; U = [0 0 0 1/2 1 1 1]; p = 2; u = linspace (0, 1, 10); s = findspan (n, p, u, U); Bref = [0 0 0 0 0 1 1 1 1 1; ... 1 1 1 1 1 2 2 2 2 2; ... 2 2 2 2 2 3 3 3 3 3].'; B = numbasisfun (s, u, p, U); assert (B, Bref) 1 test, 1 passed, 0 known failure, 0 skipped [inst/kntbrkdegreg.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/kntbrkdegreg.m ***** test breaks = [0 1 2 3 4]; degree = 3; knots = kntbrkdegreg (breaks, degree); assert (knots, [0 0 0 0 1 2 3 4 4 4 4]) ***** test breaks = [0 1 2 3 4]; degree = 3; reg = 1; knots = kntbrkdegreg (breaks, degree, reg); assert (knots, [0 0 0 0 1 1 2 2 3 3 4 4 4 4]) ***** test breaks = [0 1 2 3 4]; degree = 3; reg = [0 1 2]; knots = kntbrkdegreg (breaks, degree, reg); assert (knots, [0 0 0 0 1 1 1 2 2 3 4 4 4 4]) ***** test breaks = {[0 1 2 3 4] [0 1 2 3]}; degree = [3 2]; reg = {[0 1 2] 0}; knots = kntbrkdegreg (breaks, degree, reg); assert (knots, {[0 0 0 0 1 1 1 2 2 3 4 4 4 4] [0 0 0 1 1 2 2 3 3 3]}) 4 tests, 4 passed, 0 known failure, 0 skipped [inst/curvederiveval.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/curvederiveval.m ***** test k = [0 0 0 1 1 1]; coefs(:,1) = [0;0;0;1]; coefs(:,2) = [1;0;1;1]; coefs(:,3) = [1;1;1;1]; crv = nrbmak (coefs, k); ck = curvederiveval (crv.number-1, crv.order-1, crv.knots, squeeze (crv.coefs(1,:,:)), 0.5, 2); assert(ck, [0.75; 1; -2]); ck = curvederiveval (crv.number-1, crv.order-1, crv.knots, squeeze (crv.coefs(2,:,:)), 0.5, 2); assert(ck, [0.25; 1; 2]); ck = curvederiveval (crv.number-1, crv.order-1, crv.knots, squeeze (crv.coefs(3,:,:)), 0.5, 2); assert(ck, [0.75; 1; -2]); 1 test, 1 passed, 0 known failure, 0 skipped [inst/nrbcrvderiveval.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbcrvderiveval.m ***** test knots = [0 0 0 1 1 1]; coefs(:,1) = [0; 0; 0; 1]; coefs(:,2) = [1; 0; 1; 1]; coefs(:,3) = [1; 1; 1; 2]; crv = nrbmak (coefs, knots); u = linspace (0, 1, 100); ck = nrbcrvderiveval (crv, u, 2); w = @(x) 1 + x.^2; dw = @(x) 2*x; F1 = @(x) (2*x - x.^2)./w(x); F2 = @(x) x.^2./w(x); F3 = @(x) (2*x - x.^2)./w(x); dF1 = @(x) (2 - 2*x)./w(x) - 2*(2*x - x.^2).*x./w(x).^2; dF2 = @(x) 2*x./w(x) - 2*x.^3./w(x).^2; dF3 = @(x) (2 - 2*x)./w(x) - 2*(2*x - x.^2).*x./w(x).^2; d2F1 = @(x) -2./w(x) - 2*x.*(2-2*x)./w(x).^2 - (8*x-6*x.^2)./w(x).^2 + 8*x.^2.*(2*x-x.^2)./w(x).^3; d2F2 = @(x) 2./w(x) - 4*x.^2./w(x).^2 - 6*x.^2./w(x).^2 + 8*x.^4./w(x).^3; d2F3 = @(x) -2./w(x) - 2*x.*(2-2*x)./w(x).^2 - (8*x-6*x.^2)./w(x).^2 + 8*x.^2.*(2*x-x.^2)./w(x).^3; assert ([F1(u); F2(u); F3(u)], squeeze(ck(:, 1, :)), 1e2*eps); assert ([dF1(u); dF2(u); dF3(u)], squeeze(ck(:, 2, :)), 1e2*eps); assert ([d2F1(u); d2F2(u); d2F3(u)], squeeze(ck(:, 3, :)), 1e2*eps); 1 test, 1 passed, 0 known failure, 0 skipped [inst/kntbrkdegmult.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/kntbrkdegmult.m ***** test breaks = [0 1 2 3 4]; degree = 3; knots = kntbrkdegmult (breaks, degree); assert (knots, [0 0 0 0 1 2 3 4 4 4 4]) ***** test breaks = [0 1 2 3 4]; degree = 3; mult = 2; knots = kntbrkdegmult (breaks, degree, mult); assert (knots, [0 0 0 0 1 1 2 2 3 3 4 4 4 4]) ***** test breaks = [0 1 2 3 4]; degree = 3; mult = [1 2 3]; knots = kntbrkdegmult (breaks, degree, mult); assert (knots, [0 0 0 0 1 2 2 3 3 3 4 4 4 4]) ***** test breaks = {[0 1 2 3 4] [0 1 2 3]}; degree = [3 2]; mult = {[1 2 3] 2}; knots = kntbrkdegmult (breaks, degree, mult); assert (knots, {[0 0 0 0 1 2 2 3 3 3 4 4 4 4] [0 0 0 1 1 2 2 3 3 3]}) 4 tests, 4 passed, 0 known failure, 0 skipped [inst/nrbderiv.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbderiv.m ***** demo crv = nrbtestcrv; nrbplot(crv,48); title('First derivatives along a test curve.'); tt = linspace(0.0,1.0,9); dcrv = nrbderiv(crv); [p1, dp] = nrbdeval(crv,dcrv,tt); p2 = vecnormalize(dp); hold on; plot(p1(1,:),p1(2,:),'ro'); h = quiver(p1(1,:),p1(2,:),p2(1,:),p2(2,:),0); set(h,'Color','black'); hold off; ***** demo srf = nrbtestsrf; p = nrbeval(srf,{linspace(0.0,1.0,20) linspace(0.0,1.0,20)}); h = surf(squeeze(p(1,:,:)),squeeze(p(2,:,:)),squeeze(p(3,:,:))); set(h,'FaceColor','blue','EdgeColor','blue'); title('First derivatives over a test surface.'); npts = 5; tt = linspace(0.0,1.0,npts); dsrf = nrbderiv(srf); [p1, dp] = nrbdeval(srf, dsrf, {tt, tt}); up2 = vecnormalize(dp{1}); vp2 = vecnormalize(dp{2}); hold on; plot3(p1(1,:),p1(2,:),p1(3,:),'ro'); h1 = quiver3(p1(1,:),p1(2,:),p1(3,:),up2(1,:),up2(2,:),up2(3,:)); h2 = quiver3(p1(1,:),p1(2,:),p1(3,:),vp2(1,:),vp2(2,:),vp2(3,:)); set(h1,'Color','black'); set(h2,'Color','black'); hold off; ***** test knots = [0 0 0 0.5 1 1 1]; coefs(1,:) = [0 2 4 2]; coefs(2,:) = [0 2 2 0]; coefs(3,:) = [0 4 2 0]; coefs(4,:) = [1 2 2 1]; nrb = nrbmak (coefs, knots); [dnrb, dnrb2] = nrbderiv (nrb); x = linspace (0, 1, 10); [pnt, jac, hess] = nrbdeval (nrb, dnrb, dnrb2, x); w = -4*x.^2 + 4*x + 1; F = zeros (3,numel(x)); DF = zeros (3, numel(x)); D2F = zeros (3, numel(x)); F(1,:) = (-4*x.*(x-2)./w) .* (x<0.5) + ((4*x - 5)./w + 3) .* (x>0.5); F(2,:) = (2-2./w); F(3,:) = (-4*x.*(5*x-4)./w) .* (x<0.5) + (-4*(x.^2 - 1)./w) .* (x>0.5); DF(1,:) = (8*(2*x.^2-x+1)./w.^2) .* (x<0.5) + (8*(2*x-3).*(x-1)./w.^2) .* (x>0.5); DF(2,:) = -8*(2*x-1)./w.^2; DF(3,:) = -(8*(2*x.^2+5*x-2)./w.^2) .* (x<0.5) - (8*(2*x.^2-3*x+2)./w.^2) .* (x>0.5); D2F(1,:) = 8*(16*x.^3-12*x.^2+24*x-9)./w.^3 .* (x<0.5) + 8*(16*x.^3-60*x.^2+72*x-29)./w.^3 .* (x>0.5); D2F(2,:) = -16*(12*x.^2-12*x+5)./w.^3; D2F(3,:) = -8*(16*x.^3+60*x.^2-48*x+21)./w.^3 .* (x<0.5) -8*(16*x.^3-36*x.^2+48*x-19)./w.^3 .* (x>0.5); assert (F, pnt, 1e3*eps) assert (DF, jac, 1e3*eps) assert (D2F, hess, 1e3*eps) ***** test knots = {[0 0 0 1 1 1], [0 0 0 0.5 1 1 1]}; coefs = ones (4,3,4); coefs(1,:,:) = reshape ([0 0 0 0; 1 1 1 1; 2 2 4 2], 1, 3, 4); coefs(2,:,:) = reshape ([0 1 2 3; 0 1 2 3; 0 1 4 3], 1, 3, 4); coefs(3,:,:) = reshape ([0 1 0 0; 0 0 0 0; 0 0 0 0], 1, 3, 4); coefs(4,:,:) = reshape ([1 1 1 1; 1 1 1 1; 1 1 2 1], 1, 3, 4); nrb = nrbmak (coefs, knots); [dnrb, dnrb2] = nrbderiv (nrb); X = linspace (0, 1, 4); Y = linspace (0, 1, 4); [pnt, jac, hess] = nrbdeval (nrb, dnrb, dnrb2, {X Y}); [y, x] = meshgrid (X, Y); w = (2*x.^2.*y.^2 + 1) .* (y < 0.5) + (-6*x.^2.*y.^2 + 8*x.^2.*y - 2*x.^2 + 1) .* (y > 0.5); F = zeros ([3,size(x)]); F(1,:,:) = ((2*x - 2) ./w + 2) .* (y<0.5) + (2 + (2*x-2)./w) .* (y > 0.5); F(2,:,:) = (2 - (2*(y-1).^2)./w).*(y<0.5) + ... ((-12*x.^2.*y.^2 + 16*x.^2.*y - 4*x.^2 + 2*y.^2 + 1)./w).*(y>0.5); F(3,:,:) = (-2*y.*(3*y - 2).*(x - 1).^2./w) .* (y<0.5) + ... (2*(x - 1).^2.*(y - 1).^2./w) .* (y>0.5); dFdu = zeros ([3,size(x)]); dFdu(1,:,:) = (((8*x - 4*x.^2).*y.^2 + 2)./w.^2).*(y<0.5) + ... (((12*y.^2 - 16*y + 4).*x.^2 + (-24*y.^2 + 32*y - 8).*x + 2)./w.^2).*(y>0.5); dFdu(2,:,:) = (8*x.*y.^2.*(y - 1).^2./w.^2).*(y<0.5) + ... ((4*x.*(3*y - 1).*(2*y.^2 - 1).*(y - 1))./w.^2).*(y>0.5); dFdu(3,:,:) = (-4*y.*(2.*x.*y.^2 + 1).*(3*y - 2).*(x - 1)./w.^2).*(y<0.5) + ... ((-4*(x - 1).*(y - 1).^2.*(6*x.*y.^2 - 8*x.*y + 2*x - 1))./w.^2).*(y>0.5); dFdv = zeros ([3,size(x)]); dFdv(1,:,:) = (-8*x.^2.*y.*(x - 1)./w.^2).*(y<0.5) + ... (8*x.^2.*(3*y - 2).*(x - 1)./w.^2).*(y>0.5); dFdv(2,:,:) = (-4*(2*y.*x.^2 + 1).*(y - 1)./w.^2).*(y<0.5) + ... (((16*y.^2 - 20*y + 8).*x.^2 + 4*y)./w.^2).*(y>0.5); dFdv(3,:,:) = (-4*(x - 1).^2.*(2*x.^2.*y.^2 + 3*y - 1)./w.^2).*(y<0.5) + ... (4*(x - 1).^2.*(y - 1).*(2*x.^2 - 2*x.^2.*y + 1)./w.^2).*(y>0.5); d2Fduu = zeros ([3, size(x)]); d2Fduu(1,:,:) = (-((48*x.^2 - 16*x.^3).*y.^4 + (24*x - 8).*y.^2)./w.^3).*(y<0.5) + ... (((32*(3*y - 1).*(x - 1).*(y - 1))-(8*(3*y - 1).*(x - 3).*(y - 1).*w))./w.^3).*(y>0.5); d2Fduu(2,:,:) = (-(8*y.^2.*(6*x.^2.*y.^2 - 1).*(y - 1).^2)./w.^3).*(y<0.5) + ... ((4*(3*y - 1).*(2*y.^2 - 1).*(y - 1).*(18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 + 1))./w.^3).*(y>0.5); d2Fduu(3,:,:) = ((4*y.*(3*y - 2).*(8*x.^3.*y.^4 - 12*x.^2.*y.^4 + 6*x.^2.*y.^2 - 12*x.*y.^2 + 2*y.^2 - 1))./w.^3).*(y<0.5) + ... ((4*(y - 1).^2.*(6*y.^2 - 8*y + 3) - 4*x.^3.*(y - 1).^2.*(72*y.^4 - 192*y.^3 + 176*y.^2 - 64*y + 8) + 4*x.^2.*(y - 1).^2.*(108*y.^4 - 288*y.^3 + 282*y.^2 - 120*y + 18) - 4*x.*(y - 1).^2.*(36*y.^2 - 48*y + 12))./w.^3) .* (y>0.5); d2Fdvv = zeros ([3, size(x)]); d2Fdvv(1,:,:) = (8*x.^2.*(6*x.^2.*y.^2 - 1).*(x - 1)./w.^3) .* (y<0.5) + ... (8*x.^2.*(x - 1).*(54*x.^2.*y.^2 - 72*x.^2.*y + 26*x.^2 + 3)./w.^3) .* (y>0.5); d2Fdvv(2,:,:) = (-((48*y.^2 - 32*y.^3).*x.^4 + (- 24*y.^2 + 48*y - 8).*x.^2 + 4)./w.^3) .*(y<0.5) + ... (((192*y.^3 - 360*y.^2 + 288*y - 88).*x.^4 + (72*y.^2 - 28).*x.^2 + 4)./w.^3) .* (y>0.5); d2Fdvv(3,:,:) = (4*(x - 1).^2.*(8*x.^4.*y.^3 + 18*x.^2.*y.^2 - 12*x.^2.*y - 3))./w.^3 .* (y<0.5) + ... ((4*(x - 1).^2.*(24*x.^4 + 18*x.^2 + 1) + 4*y.^2.*(72*x.^4 + 18*x.^2).*(x - 1).^2 - 96*x.^4.*y.^3.*(x - 1).^2 - 4*y.*(72*x.^4 + 36*x.^2).*(x - 1).^2)./w.^3) .* (y>0.5); d2Fduv = zeros ([3, size(x)]); d2Fduv(1,:,:) = (-(y.^3.*(32*x.^3 - 16*x.^4) - y.*(16*x - 24*x.^2))./w.^3) .* (y<0.5) + ... (-(-8*(3*y - 2).*(6*y.^2 - 8*y + 2).*x.^4 + 8*(3*y - 2).*(12*y.^2 - 16*y + 4).*x.^3 + (48 - 72*y).*x.^2 + (48*y - 32).*x)./w.^3) .* (y>0.5); d2Fduv(2,:,:) = (16*x.*y.*(y - 1).*(2*x.^2.*y.^2 + 2*y - 1)./w.^3) .* (y<0.5) + ... (-(8*x.*(4*y.^2 - 5*y + 2))./w.^2 + (16*x.*(3*y - 2).*(2*y.^2 - 1))./w.^3) .* (y>0.5); d2Fduv(3,:,:) = (-(8*(x - 1).*(4*x.^3.*y.^4 - 6*x.^2.*y.^3 + 6*x.^2.*y.^2 + 12*x.*y.^3 - 6*x.*y.^2 + 3*y - 1))./w.^3) .* (y<0.5) + ... ((8*(x - 1).*(y - 1).*(12*x.^3.*y.^3 - 28*x.^3.*y.^2 + 20*x.^3.*y - 4*x.^3 + 6*x.^2.*y.^2 - 12*x.^2.*y + 6*x.^2 - 12*x.*y.^2 + 18*x.*y - 6*x + 1))./w.^3) .* (y>0.5); assert (F, pnt, 1e3*eps) assert (dFdu, jac{1}, 1e3*eps) assert (dFdv, jac{2}, 1e3*eps) assert (d2Fduu, hess{1,1}, 1e3*eps) assert (d2Fduv, hess{1,2}, 1e3*eps) assert (d2Fduv, hess{2,1}, 1e3*eps) assert (d2Fdvv, hess{2,2}, 1e3*eps) ***** test knots = {[0 0 0 1 1 1], [0 0 0 0.5 1 1 1]}; coefs = ones (4,3,4); coefs(1,:,:) = reshape ([0 0 0 0; 1 1 1 1; 2 2 4 2], 1, 3, 4); coefs(2,:,:) = reshape ([0 1 2 3; 0 1 2 3; 0 1 4 3], 1, 3, 4); coefs(3,:,:) = reshape ([0 1 0 0; 0 0 0 0; 0 0 0 0], 1, 3, 4); coefs(4,:,:) = reshape ([1 1 1 1; 1 1 1 1; 1 1 2 1], 1, 3, 4); nrb = nrbmak (coefs, knots); nrb = nrbdegelev (nrbextrude (nrb, [0.4 0.6 2]), [0 0 1]); nrb.coefs(4,2,3,3) = 1.5; [dnrb, dnrb2] = nrbderiv (nrb); X = linspace (0, 1, 4); Y = linspace (0, 1, 4); Z = linspace (0, 1, 4); [pnt, jac, hess] = nrbdeval (nrb, dnrb, dnrb2, {X Y Z}); [y, x, z] = meshgrid (X, Y, Z); w = (-2*x.^2.*y.^2.*z.^2 + 2*x.^2.*y.^2 + 2*x.*y.^2.*z.^2 + 1) .* (y < 0.5) + ... (6*x.^2.*y.^2.*z.^2 - 6*x.^2.*y.^2 - 8*x.^2.*y.*z.^2 + 8*x.^2.*y + 2*x.^2.*z.^2 - 2*x.^2 - 6*x.*y.^2.*z.^2 + 8*x.*y.*z.^2 - 2*x.*z.^2 + 1) .* (y > 0.5); F = zeros ([3,size(x)]); F(1,:,:,:) = ((10*x + 20*x.^2.*y.^2 + z.*(4*x.^2.*y.^2 + 2))./(5*w)) .* (y<0.5) + ... (60*x.^2.*y.^2 - 10*x + z.*(12*x.^2.*y.^2 - 16*x.^2.*y + 4*x.^2 - 2) - 80*x.^2.*y + 20*x.^2)./(-5*w) .* (y > 0.5); F(2,:,:,:) = ((20*y + 20*x.^2.*y.^2 + z.*(6*x.^2.*y.^2 + 3) - 10*y.^2)./(5*w)).*(y<0.5) + ... ((60*x.^2.*y.^2 + z.*(18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 - 3) - 80*x.^2.*y + 20*x.^2 - 10*y.^2 - 5)./(-5*w)).*(y>0.5); F(3,:,:,:) = ((4*y - 6*x.^2.*y.^2 + z.*(4*x.^2.*y.^2 + 2) - 8*x.*y + 12*x.*y.^2 + 4*x.^2.*y - 6*y.^2)./w) .* (y<0.5) + ... ((2*z - 4*y - 4*x + 2*x.^2.*y.^2 + 8*x.*y - 4*x.*y.^2 - 4*x.^2.*y - 4*x.^2.*z + 2*x.^2 + 2*y.^2 + 16*x.^2.*y.*z - 12*x.^2.*y.^2.*z + 2)./w) .* (y>0.5); dFdu = zeros ([3,size(x)]); dFdu(1,:,:,:) = ((x.*((8*y.^2.*z.^3)/5 + 8*y.^2) - (4*y.^2.*z.^3)/5 + x.^2.*(z.^2.*(8*y.^4 + 4*y.^2) + (8*y.^4.*z.^3)/5 - 4*y.^2) + 2)./w.^2).*(y<0.5) + ... ((z.^3.*(x.^2.*((72*y.^4)/5 - (192*y.^3)/5 + (176*y.^2)/5 - (64*y)/5 + 8/5) - (16*y)/5 - x.*((24*y.^2)/5 - (32*y)/5 + 8/5) + (12*y.^2)/5 + 4/5) - x.*(24*y.^2 - 32*y + 8) + x.^2.*(12*y.^2 - 16*y + 4) + x.^2.*z.^2.*(72*y.^4 - 192*y.^3 + 164*y.^2 - 48*y + 4) + 2)./w.^2).*(y>0.5); dFdu(2,:,:,:) = ((z.^2.*(8*x.^2.*y.^4 - y.^2.*(8*y - 4*y.^2) + (2*x.*y.^2.*(40*y - 20*y.^2))/5) + z.^3.*((12*x.^2.*y.^4)/5 + (12*x.*y.^2)/5 - (6*y.^2)/5) + (2*x.*y.^2.*(20*y.^2 - 40*y + 20))/5)./w.^2).*(y<0.5) + ... (((2*(3*y.^2 - 4*y + 1).*(18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 - 6*x + 3).*z.^3)/5 + (2*(3*y.^2 - 4*y + 1).*(60*x.^2.*y.^2 - 80*x.^2.*y + 20*x.^2 - 20*x.*y.^2 - 10*x + 10*y.^2 + 5).*z.^2)/5 - (2*(10*x - 20*x.*y.^2).*(3*y.^2 - 4*y + 1))/5)./w.^2).*(y>0.5); dFdu(3,:,:,:) = ((4*y.*(3*y - 2) + z.^3.*(8*x.^2.*y.^4 + 8*x.*y.^2 - 4*y.^2) - z.^2.*(4*y.*(2*y.^2 - 3*y.^3).*x.^2 - 4*y.*(4*y.^2 - 6*y.^3).*x + 4*y.*(2*y.^2 - 3*y.^3)) + 4*x.^2.*y.*(4*y.^2 - 6*y.^3) - 4*x.*y.*(- 6*y.^3 + 4*y.^2 + 3*y - 2)) ./w.^2).*(y<0.5) + ... ((z.^2.*(4*(y - 1).*(3*y.^3 - 7*y.^2 + 5*y - 1).*x.^2 - 4*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2).*x + 4*(y - 1).*(3*y.^3 - 7*y.^2 + 5*y - 1)) - 4*(y - 1).^2 + z.^3.*(4*(y - 1).*(18*y.^3 - 30*y.^2 + 14*y - 2).*x.^2 - 4*(6*y - 2).*(y - 1).*x + 4*(3*y - 1).*(y - 1)) + 4*x.*(y - 1).*(6*y.^3 - 14*y.^2 + 11*y - 3) - 4*x.^2.*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2))./w.^2) .* (y > 0.5); dFdv = zeros ([3,size(x)]); dFdv(1,:,:,:) = ((8*x.*y.*(x - 1).*(z.^3 + 5*x.*z.^2 - 5*x))/5./w.^2).*(y<0.5) + ... (-(8*x.*(3*y - 2).*(x - 1).*(z.^3 + 5*x.*z.^2 - 5*x))/5./w.^2).*(y>0.5); dFdv(2,:,:,:) = (-((8*x.*z.^2 - x.^2.*(8*z.^2 - 8)).*y.^2 + ((12*x.*z.^3)/5 - x.^2.*((12*z.^3)/5 + 8) + 4).*y - 4)./w.^2).*(y<0.5) + ... ((4*y + z.^3.*(x.*((36*y)/5 - 24/5) - x.^2.*((36*y)/5 - 24/5)) + z.^2.*(x.*(16*y.^2 + 4*y - 8) - x.^2.*(16*y.^2 + 4*y - 8)) + x.^2.*(16*y.^2 - 20*y + 8))./w.^2).*(y>0.5); dFdv(3,:,:,:) = ((4*(x - 1).^2 - y.*(4*(3*x - 3).*(x - 1) - 8*x.*z.^3.*(x - 1)) + y.^2.*(4*(x - 1).*(2*x.^3 - 4*x.^2 + 2*x).*z.^2 + 4*(2*x.^2 - 2*x.^3).*(x - 1)))./w.^2).*(y<0.5) + ... ((y.^2.*(4*(x - 1).*(2*x.^3 - 4*x.^2 + 2*x).*z.^2 + 4*(2*x.^2 - 2*x.^3).*(x - 1)) - 4*(x - 1).*(2*x.^3 - 2*x.^2 + x - 1) - y.*(24*x.*(x - 1).*z.^3 + 4*(x - 1).*(4*x.^3 - 8*x.^2 + 4*x).*z.^2 - 4*(x - 1).*(4*x.^3 - 4*x.^2 + x - 1)) + 16*x.*z.^3.*(x - 1) + 4*z.^2.*(x - 1).*(2*x.^3 - 4*x.^2 + 2*x))./w.^2).*(y>0.5); dFdw = zeros ([3,size(x)]); dFdw(1,:,:,:) = ((4*x.^2.*y.^2 + 2)./(- 10*x.^2.*y.^2.*z.^2 + 10*x.^2.*y.^2 + 10*x.*y.^2.*z.^2 + 5) - ((20*x.*y.^2.*z - 20*x.^2.*y.^2.*z).*(10*x + 20*x.^2.*y.^2 + z.*(4*x.^2.*y.^2 + 2)))./(5*w).^2).*(y<0.5) + ... ((12*x.^2.*y.^2 - 16*x.^2.*y + 4*x.^2 - 2)./(- 30*x.^2.*y.^2.*z.^2 + 30*x.^2.*y.^2 + 40*x.^2.*y.*z.^2 - 40*x.^2.*y - 10*x.^2.*z.^2 + 10*x.^2 + 30*x.*y.^2.*z.^2 - 40*x.*y.*z.^2 + 10*x.*z.^2 - 5) - ((60*x.^2.*y.^2 - 10*x + z.*(12*x.^2.*y.^2 - 16*x.^2.*y + 4*x.^2 - 2) - 80*x.^2.*y + 20*x.^2).*(- 60*z.*x.^2.*y.^2 + 80*z.*x.^2.*y - 20*z.*x.^2 + 60*z.*x.*y.^2 - 80*z.*x.*y + 20*z.*x))./(5*w).^2).*(y>0.5); dFdw(2,:,:,:) = ((6*x.^2.*y.^2 + 3)./(- 10*x.^2.*y.^2.*z.^2 + 10*x.^2.*y.^2 + 10*x.*y.^2.*z.^2 + 5) - ((20*x.*y.^2.*z - 20*x.^2.*y.^2.*z).*(20*y + 20*x.^2.*y.^2 + z.*(6*x.^2.*y.^2 + 3) - 10*y.^2))./(5*w).^2).*(y<0.5) + ... ((18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 - 3)./(- 30*x.^2.*y.^2.*z.^2 + 30*x.^2.*y.^2 + 40*x.^2.*y.*z.^2 - 40*x.^2.*y - 10*x.^2.*z.^2 + 10*x.^2 + 30*x.*y.^2.*z.^2 - 40*x.*y.*z.^2 + 10*x.*z.^2 - 5) - ((- 60*z.*x.^2.*y.^2 + 80*z.*x.^2.*y - 20*z.*x.^2 + 60*z.*x.*y.^2 - 80*z.*x.*y + 20*z.*x).*(60*x.^2.*y.^2 + z.*(18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 - 3) - 80*x.^2.*y + 20*x.^2 - 10*y.^2 - 5))./(5*w).^2).*(y>0.5); dFdw(3,:,:,:) = ((4*x.^2.*y.^2 + 2)./(2*x.^2.*y.^2 - z.^2.*(2*x.^2.*y.^2 - 2*x.*y.^2) + 1) + (2*z.*(2*x.^2.*y.^2 - 2*x.*y.^2).*(4*y - 6*x.^2.*y.^2 + z.*(4*x.^2.*y.^2 + 2) - 8*x.*y + 12*x.*y.^2 + 4*x.^2.*y - 6*y.^2))./w.^2).*(y<0.5) + ... ((12*x.^2.*y.^2 - 16*x.^2.*y + 4*x.^2 - 2)./(6*x.^2.*y.^2 + z.^2.*(- 6*x.^2.*y.^2 + 8*x.^2.*y - 2*x.^2 + 6*x.*y.^2 - 8*x.*y + 2*x) - 8*x.^2.*y + 2*x.^2 - 1) + (2*z.*(- 6*x.^2.*y.^2 + 8*x.^2.*y - 2*x.^2 + 6*x.*y.^2 - 8*x.*y + 2*x).*(2*z - 4*y - 4*x + 2*x.^2.*y.^2 + 8*x.*y - 4*x.*y.^2 - 4*x.^2.*y - 4*x.^2.*z + 2*x.^2 + 2*y.^2 + 16*x.^2.*y.*z - 12*x.^2.*y.^2.*z + 2))./w.^2).*(y>0.5); d2Fduu = zeros ([3, size(x)]); d2Fduu(1,:,:,:) = (((8*y.^2.*z.^3)/5 + 2*x.*(z.^2.*(8*y.^4 + 4*y.^2) + (8*y.^4.*z.^3)/5 - 4*y.^2) + 8*y.^2)./w.^2 - (2*(2*y.^2.*z.^2 + 4*x.*y.^2 - 4*x.*y.^2.*z.^2).*(x.*((8*y.^2.*z.^3)/5 + 8*y.^2) - (4*y.^2.*z.^3)/5 + x.^2.*(z.^2.*(8*y.^4 + 4*y.^2) + (8*y.^4.*z.^3)/5 - 4*y.^2) + 2))./w.^3).*(y<0.5) + ... ((32*y + 2*x.*(12*y.^2 - 16*y + 4) + z.^3.*((32*y)/5 + 2*x.*((72*y.^4)/5 - (192*y.^3)/5 + (176*y.^2)/5 - (64*y)/5 + 8/5) - (24*y.^2)/5 - 8/5) - 24*y.^2 + 2*x.*z.^2.*(72*y.^4 - 192*y.^3 + 164*y.^2 - 48*y + 4) - 8)./w.^2 - (2*(z.^3.*(x.^2.*((72*y.^4)/5 - (192*y.^3)/5 + (176*y.^2)/5 - (64*y)/5 + 8/5) - (16*y)/5 - x.*((24*y.^2)/5 - (32*y)/5 + 8/5) + (12*y.^2)/5 + 4/5) - x.*(24*y.^2 - 32*y + 8) + x.^2.*(12*y.^2 - 16*y + 4) + x.^2.*z.^2.*(72*y.^4 - 192*y.^3 + 164*y.^2 - 48*y + 4) + 2).*(4*x + 6*y.^2.*z.^2 - 16*x.*y + 12*x.*y.^2 - 4*x.*z.^2 - 8*y.*z.^2 + 2*z.^2 + 16*x.*y.*z.^2 - 12*x.*y.^2.*z.^2))./(-w).^3).*(y>0.5); d2Fduu(2,:,:,:) = ((z.^3.*((24*x.*y.^4)/5 + (12*y.^2)/5) + (2*y.^2.*(20*y.^2 - 40*y + 20))/5 + z.^2.*((2*y.^2.*(40*y - 20*y.^2))/5 + 16*x.*y.^4))./w.^2 - (2*(z.^2.*(8*x.^2.*y.^4 - y.^2.*(8*y - 4*y.^2) + (2*x.*y.^2.*(40*y - 20*y.^2))/5) + z.^3.*((12*x.^2.*y.^4)/5 + (12*x.*y.^2)/5 - (6*y.^2)/5) + (2*x.*y.^2.*(20*y.^2 - 40*y + 20))/5).*(2*y.^2.*z.^2 + 4*x.*y.^2 - 4*x.*y.^2.*z.^2))./w.^3).*(y<0.5) + ... (((2*(3*y.^2 - 4*y + 1).*(36*x.*y.^2 - 48*x.*y + 12*x - 6).*z.^3)/5 - (2*(3*y.^2 - 4*y + 1).*(160*x.*y - 40*x - 120*x.*y.^2 + 20*y.^2 + 10).*z.^2)/5 + (2*(20*y.^2 - 10).*(3*y.^2 - 4*y + 1))/5)./w.^2 - (2*((2*(3*y.^2 - 4*y + 1).*(18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 - 6*x + 3).*z.^3)/5 + (2*(3*y.^2 - 4*y + 1).*(60*x.^2.*y.^2 - 80*x.^2.*y + 20*x.^2 - 20*x.*y.^2 - 10*x + 10*y.^2 + 5).*z.^2)/5 - (2*(10*x - 20*x.*y.^2).*(3*y.^2 - 4*y + 1))/5).*(4*x + 6*y.^2.*z.^2 - 16*x.*y + 12*x.*y.^2 - 4*x.*z.^2 - 8*y.*z.^2 + 2*z.^2 + 16*x.*y.*z.^2 - 12*x.*y.^2.*z.^2))./(-w).^3).*(y>0.5); d2Fduu(3,:,:,:) = (((16*x.*y.^4 + 8*y.^2).*z.^3 + (4*y.*(4*y.^2 - 6*y.^3) - 8*x.*y.*(2*y.^2 - 3*y.^3)).*z.^2 - 4*y.*(- 6*y.^3 + 4*y.^2 + 3*y - 2) + 8*x.*y.*(4*y.^2 - 6*y.^3))./w.^2 - (2*(2*y.^2.*z.^2 + 4*x.*y.^2 - 4*x.*y.^2.*z.^2).*(4*y.*(3*y - 2) + z.^3.*(8*x.^2.*y.^4 + 8*x.*y.^2 - 4*y.^2) - z.^2.*(4*y.*(2*y.^2 - 3*y.^3).*x.^2 - 4*y.*(4*y.^2 - 6*y.^3).*x + 4*y.*(2*y.^2 - 3*y.^3)) + 4*x.^2.*y.*(4*y.^2 - 6*y.^3) - 4*x.*y.*(- 6*y.^3 + 4*y.^2 + 3*y - 2)))./w.^3).*(y<0.5) + ... (-((4*(6*y - 2).*(y - 1) - 8*x.*(y - 1).*(18*y.^3 - 30*y.^2 + 14*y - 2)).*z.^3 + (4*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2) - 8*x.*(y - 1).*(3*y.^3 - 7*y.^2 + 5*y - 1)).*z.^2 - 4*(y - 1).*(6*y.^3 - 14*y.^2 + 11*y - 3) + 8*x.*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2))./w.^2 - (2*(z.^2.*(4*(y - 1).*(3*y.^3 - 7*y.^2 + 5*y - 1).*x.^2 - 4*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2).*x + 4*(y - 1).*(3*y.^3 - 7*y.^2 + 5*y - 1)) - 4*(y - 1).^2 + z.^3.*(4*(y - 1).*(18*y.^3 - 30*y.^2 + 14*y - 2).*x.^2 - 4*(6*y - 2).*(y - 1).*x + 4*(3*y - 1).*(y - 1)) + 4*x.*(y - 1).*(6*y.^3 - 14*y.^2 + 11*y - 3) - 4*x.^2.*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2)).*(4*x + 6*y.^2.*z.^2 - 16*x.*y + 12*x.*y.^2 - 4*x.*z.^2 - 8*y.*z.^2 + 2*z.^2 + 16*x.*y.*z.^2 - 12*x.*y.^2.*z.^2))./(-w).^3) .* (y>0.5); d2Fduv = zeros ([3, size(x)]); d2Fduv(1,:,:,:) = ((((8.*x.^2.*(6.*z.^3 - 6.*z.^5))/5 + (8.*x.^4.*(10.*z.^4 - 20.*z.^2 + 10))/5 - (8.*x.^3.*(- 4.*z.^5 + 10.*z.^4 + 4.*z.^3 - 30.*z.^2 + 20))/5 + (16.*x.*z.^5)/5).*y.^3 + ((8.*x.*(2.*z.^3 - 10.*z.^2 + 10))/5 + (8.*x.^2.*(15.*z.^2 - 15))/5 - (8.*z.^3)/5).*y)./w.^3) .* (y<0.5) + ... (-(x.^4.*((8.*(3.*y - 2).*(30.*y.^2 - 40.*y + 10).*z.^4)/5 - (8.*(3.*y - 2).*(60.*y.^2 - 80.*y + 20).*z.^2)/5 + (8.*(3.*y - 2).*(30.*y.^2 - 40.*y + 10))/5) - x.^3.*(- (8.*(3.*y - 2).*(12.*y.^2 - 16.*y + 4).*z.^5)/5 + (8.*(3.*y - 2).*(30.*y.^2 - 40.*y + 10).*z.^4)/5 + (8.*(3.*y - 2).*(12.*y.^2 - 16.*y + 4).*z.^3)/5 - (8.*(3.*y - 2).*(90.*y.^2 - 120.*y + 30).*z.^2)/5 + (8.*(3.*y - 2).*(60.*y.^2 - 80.*y + 20))/5) + z.^3.*((24.*y)/5 - 16/5) - x.^2.*((8.*(3.*y - 2).*(18.*y.^2 - 24.*y + 6).*z.^5)/5 - (8.*(3.*y - 2).*(18.*y.^2 - 24.*y + 6).*z.^3)/5 + (72.*y - 48).*z.^2 - 72.*y + 48) + x.*((8.*(3.*y - 2).*(6.*y.^2 - 8.*y + 2).*z.^5)/5 + (32/5 - (48.*y)/5).*z.^3 + (48.*y - 32).*z.^2 - 48.*y + 32))./(-w).^3) .* (y>0.5); d2Fduv(2,:,:,:) = ((((4.*x.^2.*(60.*z.^2 - 60.*z.^4))/5 + (4.*x.^3.*(40.*z.^4 - 80.*z.^2 + 40))/5 + 16.*x.*z.^4).*y.^4 + ((4.*x.^2.*(18.*z.^3 - 18.*z.^5))/5 + (4.*x.^3.*(12.*z.^5 - 12.*z.^3 + 40.*z.^2 - 40))/5 + (4.*x.*(6.*z.^5 - 40.*z.^2 + 40))/5 + 16.*z.^2).*y.^3 + ((4.*x.*(60.*z.^2 - 60))/5 - 24.*z.^2).*y.^2 + ((4.*x.*(6.*z.^3 + 20))/5 - (12.*z.^3)/5).*y)./w.^3) .* (y<0.5) + ... ((z.^3.*(((432.*y.^3)/5 - (864.*y.^2)/5 + (528.*y)/5 - 96/5).*x.^3 + (- (648.*y.^3)/5 + (1296.*y.^2)/5 - (792.*y)/5 + 144/5).*x.^2 + ((72.*y)/5 - 48/5).*x - (36.*y)/5 + 24/5) - x.^3.*(192.*y.^4 - 496.*y.^3 + 480.*y.^2 - 208.*y + 32) + z.^4.*((- 192.*y.^4 + 208.*y.^3 + 96.*y.^2 - 144.*y + 32).*x.^3 + (288.*y.^4 - 312.*y.^3 - 144.*y.^2 + 216.*y - 48).*x.^2 + (- 96.*y.^4 + 104.*y.^3 + 48.*y.^2 - 72.*y + 16).*x) + x.*(- 96.*y.^3 + 96.*y.^2 + 8.*y - 16) + z.^2.*(x.^2.*(- 288.*y.^4 + 312.*y.^3 + 144.*y.^2 - 216.*y + 48) - 20.*y - x.^3.*(- 384.*y.^4 + 704.*y.^3 - 384.*y.^2 + 64.*y) + x.*(96.*y.^3 - 96.*y.^2 + 40.*y - 16) + 48.*y.^2 - 48.*y.^3 + 8) - z.^5.*(((432.*y.^3)/5 - (864.*y.^2)/5 + (528.*y)/5 - 96/5).*x.^3 + (- (648.*y.^3)/5 + (1296.*y.^2)/5 - (792.*y)/5 + 144/5).*x.^2 + ((216.*y.^3)/5 - (432.*y.^2)/5 + (264.*y)/5 - 48/5).*x))./(-w).^3) .* (y>0.5); d2Fduv(3,:,:,:) = (((x.^2.*(48.*z.^2 - 48.*z.^4) - x.^4.*(16.*z.^4 - 48.*z.^2 + 32) + x.^3.*(48.*z.^4 - 96.*z.^2 + 32) + 16.*x.*z.^4).*y.^4 + (x.^2.*(- 48.*z.^5 + 48.*z.^3 + 144.*z.^2 - 144) - x.^3.*(- 32.*z.^5 + 32.*z.^3 + 48.*z.^2 - 48) + x.*(16.*z.^5 - 144.*z.^2 + 96) + 48.*z.^2).*y.^3 + (x.*(96.*z.^2 - 48) + x.^3.*(48.*z.^2 - 48) - x.^2.*(120.*z.^2 - 96) - 24.*z.^2).*y.^2 + (x.*(16.*z.^3 - 24) - 8.*z.^3 + 24).*y + 8.*x - 8)./w.^3) .* (y<0.5) + ... ((8.*y - x.^4.*(96.*y.^4 - 320.*y.^3 + 384.*y.^2 - 192.*y + 32) + x.^3.*(96.*y.^4 - 368.*y.^3 + 528.*y.^2 - 336.*y + 80) + z.^3.*((288.*y.^3 - 576.*y.^2 + 352.*y - 64).*x.^3 + (- 432.*y.^3 + 864.*y.^2 - 528.*y + 96).*x.^2 + (48.*y - 32).*x - 24.*y + 16) - x.*(96.*y.^3 - 240.*y.^2 + 200.*y - 56) - z.^4.*((48.*y.^4 - 160.*y.^3 + 192.*y.^2 - 96.*y + 16).*x.^4 + (- 144.*y.^4 + 480.*y.^3 - 576.*y.^2 + 288.*y - 48).*x.^3 + (144.*y.^4 - 480.*y.^3 + 576.*y.^2 - 288.*y + 48).*x.^2 + (- 48.*y.^4 + 160.*y.^3 - 192.*y.^2 + 96.*y - 16).*x) + z.^2.*(x.^4.*(144.*y.^4 - 480.*y.^3 + 576.*y.^2 - 288.*y + 48) - 96.*y + x.^2.*(144.*y.^4 - 624.*y.^3 + 984.*y.^2 - 672.*y + 168) - x.^3.*(288.*y.^4 - 1008.*y.^3 + 1296.*y.^2 - 720.*y + 144) + x.*(144.*y.^3 - 384.*y.^2 + 336.*y - 96) + 120.*y.^2 - 48.*y.^3 + 24) - z.^5.*((288.*y.^3 - 576.*y.^2 + 352.*y - 64).*x.^3 + (- 432.*y.^3 + 864.*y.^2 - 528.*y + 96).*x.^2 + (144.*y.^3 - 288.*y.^2 + 176.*y - 32).*x) + x.^2.*(144.*y.^3 - 384.*y.^2 + 336.*y - 96) - 8)./(-w).^3) .* (y>0.5); d2Fduw = zeros ([3, size(x)]); d2Fduw(1,:,:,:) = ((x.^2.*((24.*y.^4.*z.^2)/5 + 2.*z.*(8.*y.^4 + 4.*y.^2)) - (12.*y.^2.*z.^2)/5 + (24.*x.*y.^2.*z.^2)/5)./w.^2 - (2.*(4.*x.*y.^2.*z - 4.*x.^2.*y.^2.*z).*(x.*((8.*y.^2.*z.^3)/5 + 8.*y.^2) - (4.*y.^2.*z.^3)/5 + x.^2.*(z.^2.*(8.*y.^4 + 4.*y.^2) + (8.*y.^4.*z.^3)/5 - 4.*y.^2) + 2))./w.^3) .* (y<0.5) + ... (-((- (4.*(3.*y - 1).*(y - 1).*(36.*y.^4 - 96.*y.^3 + 88.*y.^2 - 32.*y + 4).*x.^4)/5 + (4.*(3.*y - 1).*(y - 1).*(36.*y.^4 - 96.*y.^3 + 100.*y.^2 - 48.*y + 8).*x.^3)/5 - (4.*(3.*y - 1).*(y - 1).*(18.*y.^2 - 24.*y + 6).*x.^2)/5 + (4.*(3.*y - 1).*(y - 1).*(6.*y.^2 - 8.*y + 2).*x)/5).*z.^4 + ((4.*x.^3.*(3.*y - 1).*(y - 1).*(360.*y.^4 - 960.*y.^3 + 820.*y.^2 - 240.*y + 20))/5 - (4.*x.^4.*(3.*y - 1).*(y - 1).*(360.*y.^4 - 960.*y.^3 + 820.*y.^2 - 240.*y + 20))/5).*z.^3 + (- (4.*(3.*y - 1).*(y - 1).*(108.*y.^4 - 288.*y.^3 + 264.*y.^2 - 96.*y + 12).*x.^4)/5 + (4.*(3.*y - 1).*(y - 1).*(36.*y.^2 - 48.*y + 12).*x.^3)/5 - (24.*(3.*y - 1).*(y - 1).*x)/5 + (12.*(3.*y - 1).*(y - 1))/5).*z.^2 + (- (4.*(3.*y - 1).*(y - 1).*(360.*y.^4 - 960.*y.^3 + 940.*y.^2 - 400.*y + 60).*x.^4)/5 + (4.*(3.*y - 1).*(y - 1).*(360.*y.^2 - 480.*y + 120).*x.^3)/5 - (4.*(3.*y - 1).*(y - 1).*(180.*y.^2 - 240.*y + 90).*x.^2)/5 + 16.*(3.*y - 1).*(y - 1).*x).*z)./(-w).^3) .* (y>0.5); d2Fduw(2,:,:,:) = ((2.*z.*(8.*x.^2.*y.^4 - y.^2.*(8.*y - 4.*y.^2) + (2.*x.*y.^2.*(40.*y - 20.*y.^2))/5) + 3.*z.^2.*((12.*x.^2.*y.^4)/5 + (12.*x.*y.^2)/5 - (6.*y.^2)/5))./w.^2 - (2.*(4.*x.*y.^2.*z - 4.*x.^2.*y.^2.*z).*(z.^2.*(8.*x.^2.*y.^4 - y.^2.*(8.*y - 4.*y.^2) + (2.*x.*y.^2.*(40.*y - 20.*y.^2))/5) + z.^3.*((12.*x.^2.*y.^4)/5 + (12.*x.*y.^2)/5 - (6.*y.^2)/5) + (2.*x.*y.^2.*(20.*y.^2 - 40.*y + 20))/5))./w.^3) .* (y<0.5) + ... (((6.*(3.*y.^2 - 4.*y + 1).*(18.*x.^2.*y.^2 - 24.*x.^2.*y + 6.*x.^2 - 6.*x + 3).*z.^2)/5 + (4.*(3.*y.^2 - 4.*y + 1).*(60.*x.^2.*y.^2 - 80.*x.^2.*y + 20.*x.^2 - 20.*x.*y.^2 - 10.*x + 10.*y.^2 + 5).*z)/5)./w.^2 - (2.*((2.*(3.*y.^2 - 4.*y + 1).*(18.*x.^2.*y.^2 - 24.*x.^2.*y + 6.*x.^2 - 6.*x + 3).*z.^3)/5 + (2.*(3.*y.^2 - 4.*y + 1).*(60.*x.^2.*y.^2 - 80.*x.^2.*y + 20.*x.^2 - 20.*x.*y.^2 - 10.*x + 10.*y.^2 + 5).*z.^2)/5 - (2.*(10.*x - 20.*x.*y.^2).*(3.*y.^2 - 4.*y + 1))/5).*(- 12.*z.*x.^2.*y.^2 + 16.*z.*x.^2.*y - 4.*z.*x.^2 + 12.*z.*x.*y.^2 - 16.*z.*x.*y + 4.*z.*x))./(-w).^3) .* (y>0.5); d2Fduw(3,:,:,:) = (- (2.*z.*(4.*y.*(2.*y.^2 - 3.*y.^3).*x.^2 - 4.*y.*(4.*y.^2 - 6.*y.^3).*x + 4.*y.*(2.*y.^2 - 3.*y.^3)) - 3.*z.^2.*(8.*x.^2.*y.^4 + 8.*x.*y.^2 - 4.*y.^2))./w.^2 - (2.*(4.*x.*y.^2.*z - 4.*x.^2.*y.^2.*z).*(4.*y.*(3.*y - 2) + z.^3.*(8.*x.^2.*y.^4 + 8.*x.*y.^2 - 4.*y.^2) - z.^2.*(4.*y.*(2.*y.^2 - 3.*y.^3).*x.^2 - 4.*y.*(4.*y.^2 - 6.*y.^3).*x + 4.*y.*(2.*y.^2 - 3.*y.^3)) + 4.*x.^2.*y.*(4.*y.^2 - 6.*y.^3) - 4.*x.*y.*(- 6.*y.^3 + 4.*y.^2 + 3.*y - 2)))./w.^3) .* (y<0.5) + ... ((2.*z.*(4.*(y - 1).*(3.*y.^3 - 7.*y.^2 + 5.*y - 1).*x.^2 - 4.*(y - 1).*(6.*y.^3 - 14.*y.^2 + 10.*y - 2).*x + 4.*(y - 1).*(3.*y.^3 - 7.*y.^2 + 5.*y - 1)) + 3.*z.^2.*(4.*(y - 1).*(18.*y.^3 - 30.*y.^2 + 14.*y - 2).*x.^2 - 4.*(6.*y - 2).*(y - 1).*x + 4.*(3.*y - 1).*(y - 1)))./w.^2 - (2.*(z.^2.*(4.*(y - 1).*(3.*y.^3 - 7.*y.^2 + 5.*y - 1).*x.^2 - 4.*(y - 1).*(6.*y.^3 - 14.*y.^2 + 10.*y - 2).*x + 4.*(y - 1).*(3.*y.^3 - 7.*y.^2 + 5.*y - 1)) - 4.*(y - 1).^2 + z.^3.*(4.*(y - 1).*(18.*y.^3 - 30.*y.^2 + 14.*y - 2).*x.^2 - 4.*(6.*y - 2).*(y - 1).*x + 4.*(3.*y - 1).*(y - 1)) + 4.*x.*(y - 1).*(6.*y.^3 - 14.*y.^2 + 11.*y - 3) - 4.*x.^2.*(y - 1).*(6.*y.^3 - 14.*y.^2 + 10.*y - 2)).*(- 12.*z.*x.^2.*y.^2 + 16.*z.*x.^2.*y - 4.*z.*x.^2 + 12.*z.*x.*y.^2 - 16.*z.*x.*y + 4.*z.*x))./(-w).^3) .* (y>0.5); d2Fdvv = zeros ([3, size(x)]); d2Fdvv(1,:,:,:) = (-(8.*x.*(x - 1).*(z.^3 + 5.*x.*z.^2 - 5.*x).*(- 6.*x.^2.*y.^2.*z.^2 + 6.*x.^2.*y.^2 + 6.*x.*y.^2.*z.^2 - 1))/5./w.^3) .* (y<0.5) + ... ((8.*x.*(x - 1).*(z.^3 + 5.*x.*z.^2 - 5.*x).*(- 54.*x.^2.*y.^2.*z.^2 + 54.*x.^2.*y.^2 + 72.*x.^2.*y.*z.^2 - 72.*x.^2.*y - 26.*x.^2.*z.^2 + 26.*x.^2 + 54.*x.*y.^2.*z.^2 - 72.*x.*y.*z.^2 + 26.*x.*z.^2 + 3))/5./(-w).^3) .* (y>0.5); d2Fdvv(2,:,:,:) = ((2.*((8.*x.*z.^2 - x.^2.*(8.*z.^2 - 8)).*y.^2 + ((12.*x.*z.^3)/5 - x.^2.*((12.*z.^3)/5 + 8) + 4).*y - 4).*(- 4.*y.*x.^2.*z.^2 + 4.*y.*x.^2 + 4.*y.*x.*z.^2))./w.^3 - ((12.*x.*z.^3)/5 + 2.*y.*(8.*x.*z.^2 - x.^2.*(8.*z.^2 - 8)) - x.^2.*((12.*z.^3)/5 + 8) + 4)./w.^2) .* (y<0.5) + ... ((z.^2.*(x.*(32.*y + 4) - x.^2.*(32.*y + 4)) + x.^2.*(32.*y - 20) + z.^3.*((36.*x)/5 - (36.*x.^2)/5) + 4)./w.^2 - (2.*(4.*y + z.^3.*(x.*((36.*y)/5 - 24/5) - x.^2.*((36.*y)/5 - 24/5)) + z.^2.*(x.*(16.*y.^2 + 4.*y - 8) - x.^2.*(16.*y.^2 + 4.*y - 8)) + x.^2.*(16.*y.^2 - 20.*y + 8)).*(8.*x.^2.*z.^2 + 12.*x.^2.*y - 8.*x.*z.^2 - 8.*x.^2 + 12.*x.*y.*z.^2 - 12.*x.^2.*y.*z.^2))./(-w).^3) .* (y>0.5); d2Fdvv(3,:,:,:) = ((2.*y.*(4.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x).*z.^2 + 4.*(2.*x.^2 - 2.*x.^3).*(x - 1)) - 4.*(3.*x - 3).*(x - 1) + 8.*x.*z.^3.*(x - 1))./w.^2 - (2.*(4.*(x - 1).^2 - y.*(4.*(3.*x - 3).*(x - 1) - 8.*x.*z.^3.*(x - 1)) + y.^2.*(4.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x).*z.^2 + 4.*(2.*x.^2 - 2.*x.^3).*(x - 1))).*(- 4.*y.*x.^2.*z.^2 + 4.*y.*x.^2 + 4.*y.*x.*z.^2))./w.^3) .* (y<0.5) + ... ((4.*(x - 1).*(4.*x.^3 - 4.*x.^2 + x - 1) + 2.*y.*(4.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x).*z.^2 + 4.*(2.*x.^2 - 2.*x.^3).*(x - 1)) - 24.*x.*z.^3.*(x - 1) - 4.*z.^2.*(x - 1).*(4.*x.^3 - 8.*x.^2 + 4.*x))./w.^2 - (2.*(y.^2.*(4.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x).*z.^2 + 4.*(2.*x.^2 - 2.*x.^3).*(x - 1)) - 4.*(x - 1).*(2.*x.^3 - 2.*x.^2 + x - 1) - y.*(24.*x.*(x - 1).*z.^3 + 4.*(x - 1).*(4.*x.^3 - 8.*x.^2 + 4.*x).*z.^2 - 4.*(x - 1).*(4.*x.^3 - 4.*x.^2 + x - 1)) + 16.*x.*z.^3.*(x - 1) + 4.*z.^2.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x)).*(8.*x.^2.*z.^2 + 12.*x.^2.*y - 8.*x.*z.^2 - 8.*x.^2 + 12.*x.*y.*z.^2 - 12.*x.^2.*y.*z.^2))./(-w).^3) .* (y>0.5); d2Fdvw = zeros ([3, size(x)]); d2Fdvw(1,:,:,:) = (((8.*x.*z.*(x - 1).*(20.*x.^3.*z.^2 - 20.*x.^3 + 2.*x.^2.*z.^3 - 20.*x.^2.*z.^2 + 6.*x.^2.*z + 40.*x.^2 - 2.*x.*z.^3).*y.^3)/5 + (8.*x.*z.*(10.*x + 3.*z).*(x - 1).*y)/5)./w.^3) .* (y<0.5) + ... (((8.*x.*(3.*y - 2).*(x - 1).*(- 6.*x.^2.*y.^2 + 8.*x.^2.*y - 2.*x.^2 + 6.*x.*y.^2 - 8.*x.*y + 2.*x).*z.^4)/5 + (8.*x.*(3.*y - 2).*(x - 1).*(- 60.*x.^3.*y.^2 + 80.*x.^3.*y - 20.*x.^3 + 60.*x.^2.*y.^2 - 80.*x.^2.*y + 20.*x.^2).*z.^3)/5 - (8.*x.*(3.*y - 2).*(x - 1).*(18.*x.^2.*y.^2 - 24.*x.^2.*y + 6.*x.^2 - 3).*z.^2)/5 + (8.*x.*(3.*y - 2).*(x - 1).*(60.*x.^3.*y.^2 - 80.*x.^3.*y + 20.*x.^3 - 120.*x.^2.*y.^2 + 160.*x.^2.*y - 40.*x.^2 + 10.*x).*z)/5)./(-w).^3) .* (y>0.5); d2Fdvw(2,:,:,:) = ((4.*x.*y.*z.*(x - 1).*(40.*x.^2.*y.^3.*z.^2 - 40.*x.^2.*y.^3 + 6.*x.^2.*y.^2.*z.^3 + 18.*x.^2.*y.^2.*z + 80.*x.^2.*y.^2 - 40.*x.*y.^3.*z.^2 - 6.*x.*y.^2.*z.^3 - 40.*y.^2 + 60.*y + 9.*z))/5./w.^3) .* (y<0.5) + ... (-((4.*x.*(x - 1).*(54.*x.^2.*y.^3 - 108.*x.^2.*y.^2 + 66.*x.^2.*y - 12.*x.^2 - 54.*x.*y.^3 + 108.*x.*y.^2 - 66.*x.*y + 12.*x).*z.^4)/5 + (4.*x.*(x - 1).*(240.*x.^2.*y.^4 - 260.*x.^2.*y.^3 - 120.*x.^2.*y.^2 + 180.*x.^2.*y - 40.*x.^2 - 240.*x.*y.^4 + 260.*x.*y.^3 + 120.*x.*y.^2 - 180.*x.*y + 40.*x).*z.^3)/5 - (4.*x.*(x - 1).*(- 162.*x.^2.*y.^3 + 324.*x.^2.*y.^2 - 198.*x.^2.*y + 36.*x.^2 + 27.*y - 18).*z.^2)/5 - (4.*x.*(x - 1).*(240.*x.^2.*y.^4 - 980.*x.^2.*y.^3 + 1320.*x.^2.*y.^2 - 700.*x.^2.*y + 120.*x.^2 + 120.*y.^3 - 120.*y.^2 + 50.*y - 20).*z)/5)./(-w).^3) .* (y>0.5); d2Fdvw(3,:,:,:) = (-(y.^3.*(8.*x.*z.*(x - 1).*(12.*x.^2 - 24.*x + 12) - 48.*x.^3.*z.^2.*(x - 1) + 8.*x.*z.^4.*(2.*x - 2.*x.^2).*(x - 1)) + y.^4.*(8.*x.*(x - 1).*(- 4.*x.^4 + 12.*x.^3 - 12.*x.^2 + 4.*x).*z.^3 + 8.*x.*(x - 1).*(4.*x.^4 - 8.*x.^3 + 4.*x.^2).*z) - 24.*x.*y.*z.^2.*(x - 1) - 8.*x.*y.^2.*z.*(x - 1).*(6.*x.^2 - 12.*x + 6))./w.^3) .* (y<0.5) + ... ((8.*z.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x) - y.*(72.*x.*(x - 1).*z.^2 + 8.*(x - 1).*(4.*x.^3 - 8.*x.^2 + 4.*x).*z) + 48.*x.*z.^2.*(x - 1) + 8.*y.^2.*z.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x))./w.^2 - (2.*(y.^2.*(4.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x).*z.^2 + 4.*(2.*x.^2 - 2.*x.^3).*(x - 1)) - 4.*(x - 1).*(2.*x.^3 - 2.*x.^2 + x - 1) - y.*(24.*x.*(x - 1).*z.^3 + 4.*(x - 1).*(4.*x.^3 - 8.*x.^2 + 4.*x).*z.^2 - 4.*(x - 1).*(4.*x.^3 - 4.*x.^2 + x - 1)) + 16.*x.*z.^3.*(x - 1) + 4.*z.^2.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x)).*(- 12.*z.*x.^2.*y.^2 + 16.*z.*x.^2.*y - 4.*z.*x.^2 + 12.*z.*x.*y.^2 - 16.*z.*x.*y + 4.*z.*x))./(-w).^3) .* (y>0.5); d2Fdww = zeros ([3, size(x)]); d2Fdww(1,:,:,:) = ((32.*x.*y.^2.*(2.*x.^2.*y.^2 + 1).*(x - 1).*(5.*x + z + 10.*x.^2.*y.^2 + 2.*x.^2.*y.^2.*z))./(5.*w.^3) - (8.*x.*y.^2.*(x - 1).*(15.*x + z + 30.*x.^2.*y.^2 + 2.*x.^2.*y.^2.*z))/5./w.^2) .* (y<0.5) + ... (((8.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(36.*x.^4.*y.^4 - 96.*x.^4.*y.^3 + 88.*x.^4.*y.^2 - 32.*x.^4.*y + 4.*x.^4 - 36.*x.^3.*y.^4 + 96.*x.^3.*y.^3 - 88.*x.^3.*y.^2 + 32.*x.^3.*y - 4.*x.^3 - 6.*x.^2.*y.^2 + 8.*x.^2.*y - 2.*x.^2 + 6.*x.*y.^2 - 8.*x.*y + 2.*x).*z.^3)/5 + (8.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(540.*x.^4.*y.^4 - 1440.*x.^4.*y.^3 + 1320.*x.^4.*y.^2 - 480.*x.^4.*y + 60.*x.^4 - 540.*x.^3.*y.^4 + 1440.*x.^3.*y.^3 - 1410.*x.^3.*y.^2 + 600.*x.^3.*y - 90.*x.^3 + 90.*x.^2.*y.^2 - 120.*x.^2.*y + 30.*x.^2).*z.^2)/5 + (8.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(108.*x.^4.*y.^4 - 288.*x.^4.*y.^3 + 264.*x.^4.*y.^2 - 96.*x.^4.*y + 12.*x.^4 - 36.*x.^2.*y.^2 + 48.*x.^2.*y - 12.*x.^2 + 3).*z)/5 + (8.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(180.*x.^4.*y.^4 - 480.*x.^4.*y.^3 + 440.*x.^4.*y.^2 - 160.*x.^4.*y + 20.*x.^4 - 30.*x.^3.*y.^2 + 40.*x.^3.*y - 10.*x.^3 - 30.*x.^2.*y.^2 + 40.*x.^2.*y - 10.*x.^2 + 5.*x))/5)./(-w).^3) .* (y>0.5); d2Fdww(2,:,:,:) = ((16.*x.*y.^2.*(2.*x.^2.*y.^2 + 1).*(x - 1).*(20.*y + 3.*z + 20.*x.^2.*y.^2 - 10.*y.^2 + 6.*x.^2.*y.^2.*z))./(5.*w.^3) - (12.*x.*y.^2.*(x - 1).*(20.*y + z + 20.*x.^2.*y.^2 - 10.*y.^2 + 2.*x.^2.*y.^2.*z))/5./w.^2) .* (y<0.5) + ... (((4.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(108.*x.^4.*y.^4 - 288.*x.^4.*y.^3 + 264.*x.^4.*y.^2 - 96.*x.^4.*y + 12.*x.^4 - 108.*x.^3.*y.^4 + 288.*x.^3.*y.^3 - 264.*x.^3.*y.^2 + 96.*x.^3.*y - 12.*x.^3 - 18.*x.^2.*y.^2 + 24.*x.^2.*y - 6.*x.^2 + 18.*x.*y.^2 - 24.*x.*y + 6.*x).*z.^3)/5 + (4.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(1080.*x.^4.*y.^4 - 2880.*x.^4.*y.^3 + 2640.*x.^4.*y.^2 - 960.*x.^4.*y + 120.*x.^4 - 1080.*x.^3.*y.^4 + 2880.*x.^3.*y.^3 - 2640.*x.^3.*y.^2 + 960.*x.^3.*y - 120.*x.^3 - 180.*x.^2.*y.^4 + 240.*x.^2.*y.^3 - 150.*x.^2.*y.^2 + 120.*x.^2.*y - 30.*x.^2 + 180.*x.*y.^4 - 240.*x.*y.^3 + 150.*x.*y.^2 - 120.*x.*y + 30.*x).*z.^2)/5 + (4.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(324.*x.^4.*y.^4 - 864.*x.^4.*y.^3 + 792.*x.^4.*y.^2 - 288.*x.^4.*y + 36.*x.^4 - 108.*x.^2.*y.^2 + 144.*x.^2.*y - 36.*x.^2 + 9).*z)/5 + (4.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(360.*x.^4.*y.^4 - 960.*x.^4.*y.^3 + 880.*x.^4.*y.^2 - 320.*x.^4.*y + 40.*x.^4 - 60.*x.^2.*y.^4 + 80.*x.^2.*y.^3 - 110.*x.^2.*y.^2 + 120.*x.^2.*y - 30.*x.^2 + 10.*y.^2 + 5))/5)./(-w).^3) .* (y>0.5); d2Fdww(3,:,:,:) = ((32.*x.*y.^2.*(2.*x.^2.*y.^2 + 1).*(x - 1).*(2.*y + z - 3.*x.^2.*y.^2 - 4.*x.*y + 6.*x.*y.^2 + 2.*x.^2.*y - 3.*y.^2 + 2.*x.^2.*y.^2.*z))./w.^3 - (8.*x.*y.^2.*(x - 1).*(6.*y + z - 9.*x.^2.*y.^2 - 12.*x.*y + 18.*x.*y.^2 + 6.*x.^2.*y - 9.*y.^2 + 2.*x.^2.*y.^2.*z))./w.^2) .* (y<0.5) + ... ((2.*(- 6.*x.^2.*y.^2 + 8.*x.^2.*y - 2.*x.^2 + 6.*x.*y.^2 - 8.*x.*y + 2.*x).*(2.*z - 4.*y - 4.*x + 2.*x.^2.*y.^2 + 8.*x.*y - 4.*x.*y.^2 - 4.*x.^2.*y - 4.*x.^2.*z + 2.*x.^2 + 2.*y.^2 + 16.*x.^2.*y.*z - 12.*x.^2.*y.^2.*z + 2))./w.^2 - (8.*z.^2.*(- 6.*x.^2.*y.^2 + 8.*x.^2.*y - 2.*x.^2 + 6.*x.*y.^2 - 8.*x.*y + 2.*x).^2.*(2.*z - 4.*y - 4.*x + 2.*x.^2.*y.^2 + 8.*x.*y - 4.*x.*y.^2 - 4.*x.^2.*y - 4.*x.^2.*z + 2.*x.^2 + 2.*y.^2 + 16.*x.^2.*y.*z - 12.*x.^2.*y.^2.*z + 2))./(-w).^3 - (4.*z.*(12.*x.^2.*y.^2 - 16.*x.^2.*y + 4.*x.^2 - 2).*(- 6.*x.^2.*y.^2 + 8.*x.^2.*y - 2.*x.^2 + 6.*x.*y.^2 - 8.*x.*y + 2.*x))./w.^2) .* (y>0.5); assert (F, pnt, 1e3*eps) assert (dFdu, jac{1}, 1e3*eps) assert (dFdv, jac{2}, 1e3*eps) assert (dFdw, jac{3}, 1e3*eps) assert (d2Fduu, hess{1,1}, 1e3*eps) assert (d2Fduv, hess{1,2}, 1e3*eps) assert (d2Fduw, hess{1,3}, 1e3*eps) assert (d2Fduv, hess{2,1}, 1e3*eps) assert (d2Fdvv, hess{2,2}, 1e3*eps) assert (d2Fdvw, hess{2,3}, 1e3*eps) assert (d2Fduw, hess{3,1}, 1e3*eps) assert (d2Fdvw, hess{3,2}, 1e3*eps) assert (d2Fdww, hess{3,3}, 1e3*eps) ***** test nrb = nrbextrude (nrb4surf ([0 0], [1 0], [0 1], [1 1]), [0 0 1]); nrb = nrbdegelev (nrb, [1 1 1]); nrb.coefs (4,2,2,2) = 1.1; [dnrb, dnrb2] = nrbderiv (nrb); X = linspace (0, 1, 24); Y = linspace (0, 1, 24); Z = linspace (0, 1, 24); [pnt, jac, hess] = nrbdeval (nrb, dnrb, dnrb2, {X Y Z}); [y, x, z] = meshgrid (X, Y, Z); F = zeros ([3, size(x)]); F(1,:,:,:) = (5.*x)./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5); F(2,:,:,:) = (5.*y)./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5); F(3,:,:,:) = (5.*z)./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5); dFdu = zeros ([3, size(x)]); dFdu(1,:,:,:) = ((z.*(20.*y - 20.*y.^2) - z.^2.*(20.*y - 20.*y.^2)).*x.^2 + 25)./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^2; dFdu(2,:,:,:) = (y.^2.*(5.*z.*(8.*x - 4) - 5.*z.^2.*(8.*x - 4)) - y.^3.*(5.*z.*(8.*x - 4) - 5.*z.^2.*(8.*x - 4)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdu(3,:,:,:) = (z.^2.*(5.*y.*(8.*x - 4) - 5.*y.^2.*(8.*x - 4)) - z.^3.*(5.*y.*(8.*x - 4) - 5.*y.^2.*(8.*x - 4)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdv = zeros ([3, size(x)]); dFdv(1,:,:,:) = (x.^2.*(5.*z.*(8.*y - 4) - 5.*z.^2.*(8.*y - 4)) - x.^3.*(5.*z.*(8.*y - 4) - 5.*z.^2.*(8.*y - 4)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdv(2,:,:,:) = ((z.*(20.*x - 20.*x.^2) - z.^2.*(20.*x - 20.*x.^2)).*y.^2 + 25)./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^2; dFdv(3,:,:,:) = (z.^2.*(5.*x.*(8.*y - 4) - 5.*x.^2.*(8.*y - 4)) - z.^3.*(5.*x.*(8.*y - 4) - 5.*x.^2.*(8.*y - 4)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdw = zeros ([3, size(x)]); dFdw(1,:,:,:) = (x.^2.*(y.*(40.*z - 20) - y.^2.*(40.*z - 20)) - x.^3.*(y.*(40.*z - 20) - y.^2.*(40.*z - 20)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdw(2,:,:,:) = (y.^2.*(x.*(40.*z - 20) - x.^2.*(40.*z - 20)) - y.^3.*(x.*(40.*z - 20) - x.^2.*(40.*z - 20)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdw(3,:,:,:) = ((y.*(20.*x - 20.*x.^2) - y.^2.*(20.*x - 20.*x.^2)).*z.^2 + 25)./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^2; d2Fduu = zeros ([3, size(x)]); d2Fduu(1,:,:,:) = (40.*y.*z.*(y - 1).*(z - 1).*(4.*x.^3.*y.^2.*z.^2 - 4.*x.^3.*y.^2.*z - 4.*x.^3.*y.*z.^2 + 4.*x.^3.*y.*z + 15.*x - 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduu(2,:,:,:) = (40.*y.^2.*z.*(y - 1).*(z - 1).*(4.*y.^2.*z.^2 - 4.*y.^2.*z - 4.*y.*z.^2 + 4.*y.*z + 5) - 40.*x.*y.^2.*z.*(y - 1).*(z - 1).*(12.*y.^2.*z.^2 - 12.*y.^2.*z - 12.*y.*z.^2 + 12.*y.*z) + 40.*x.^2.*y.^2.*z.*(y - 1).*(z - 1).*(12.*y.^2.*z.^2 - 12.*y.^2.*z - 12.*y.*z.^2 + 12.*y.*z))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduu(3,:,:,:) = (40.*y.*z.^2.*(y - 1).*(z - 1).*(4.*y.^2.*z.^2 - 4.*y.^2.*z - 4.*y.*z.^2 + 4.*y.*z + 5) - 40.*x.*y.*z.^2.*(y - 1).*(z - 1).*(12.*y.^2.*z.^2 - 12.*y.^2.*z - 12.*y.*z.^2 + 12.*y.*z) + 40.*x.^2.*y.*z.^2.*(y - 1).*(z - 1).*(12.*y.^2.*z.^2 - 12.*y.^2.*z - 12.*y.*z.^2 + 12.*y.*z))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduv = zeros ([3, size(x)]); d2Fduv(1,:,:,:) = (20.*x.*z.*(2.*y - 1).*(z - 1).*(4.*x.^3.*y.^2.*z.^2 - 4.*x.^3.*y.^2.*z - 4.*x.^3.*y.*z.^2 + 4.*x.^3.*y.*z - 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 15.*x - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduv(2,:,:,:) = (20.*y.*z.*(2.*x - 1).*(z - 1).*(4.*x.^2.*y.^3.*z.^2 - 4.*x.^2.*y.^3.*z - 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z - 4.*x.*y.^3.*z.^2 + 4.*x.*y.^3.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z + 15.*y - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduv(3,:,:,:) = (20.*z.^2.*(2.*x - 1).*(2.*y - 1).*(z - 1).*(4.*x.^2.*y.^2.*z.^2 - 4.*x.^2.*y.^2.*z - 4.*x.^2.*y.*z.^2 + 4.*x.^2.*y.*z - 4.*x.*y.^2.*z.^2 + 4.*x.*y.^2.*z + 4.*x.*y.*z.^2 - 4.*x.*y.*z + 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduw = zeros ([3, size(x)]); d2Fduw(1,:,:,:) = (20.*x.*y.*(2.*z - 1).*(y - 1).*(4.*x.^3.*y.^2.*z.^2 - 4.*x.^3.*y.^2.*z - 4.*x.^3.*y.*z.^2 + 4.*x.^3.*y.*z - 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 15.*x - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduw(2,:,:,:) = (20.*y.^2.*(2.*x - 1).*(2.*z - 1).*(y - 1).*(4.*x.^2.*y.^2.*z.^2 - 4.*x.^2.*y.^2.*z - 4.*x.^2.*y.*z.^2 + 4.*x.^2.*y.*z - 4.*x.*y.^2.*z.^2 + 4.*x.*y.^2.*z + 4.*x.*y.*z.^2 - 4.*x.*y.*z + 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduw(3,:,:,:) = (20.*y.*z.*(2.*x - 1).*(y - 1).*(4.*x.^2.*y.^2.*z.^3 - 4.*x.^2.*y.^2.*z.^2 - 4.*x.^2.*y.*z.^3 + 4.*x.^2.*y.*z.^2 - 4.*x.*y.^2.*z.^3 + 4.*x.*y.^2.*z.^2 + 4.*x.*y.*z.^3 - 4.*x.*y.*z.^2 + 15.*z - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvv = zeros ([3, size(x)]); d2Fdvv(1,:,:,:) = (40.*x.^2.*z.*(x - 1).*(z - 1).*(4.*x.^2.*z.^2 - 4.*x.^2.*z - 4.*x.*z.^2 + 4.*x.*z + 5) + 40.*x.^2.*y.^2.*z.*(x - 1).*(z - 1).*(12.*x.^2.*z.^2 - 12.*x.^2.*z - 12.*x.*z.^2 + 12.*x.*z) - 40.*x.^2.*y.*z.*(x - 1).*(z - 1).*(12.*x.^2.*z.^2 - 12.*x.^2.*z - 12.*x.*z.^2 + 12.*x.*z))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvv(2,:,:,:) = (40.*x.*z.*(x - 1).*(z - 1).*(4.*x.^2.*y.^3.*z.^2 - 4.*x.^2.*y.^3.*z - 4.*x.*y.^3.*z.^2 + 4.*x.*y.^3.*z + 15.*y - 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvv(3,:,:,:) = (40.*x.*z.^2.*(x - 1).*(z - 1).*(4.*x.^2.*z.^2 - 4.*x.^2.*z - 4.*x.*z.^2 + 4.*x.*z + 5) + 40.*x.*y.^2.*z.^2.*(x - 1).*(z - 1).*(12.*x.^2.*z.^2 - 12.*x.^2.*z - 12.*x.*z.^2 + 12.*x.*z) - 40.*x.*y.*z.^2.*(x - 1).*(z - 1).*(12.*x.^2.*z.^2 - 12.*x.^2.*z - 12.*x.*z.^2 + 12.*x.*z))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvw = zeros ([3, size(x)]); d2Fdvw(1,:,:,:) = (20.*x.^2.*(2.*y - 1).*(2.*z - 1).*(x - 1).*(4.*x.^2.*y.^2.*z.^2 - 4.*x.^2.*y.^2.*z - 4.*x.^2.*y.*z.^2 + 4.*x.^2.*y.*z - 4.*x.*y.^2.*z.^2 + 4.*x.*y.^2.*z + 4.*x.*y.*z.^2 - 4.*x.*y.*z + 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvw(2,:,:,:) = (20.*x.*y.*(2.*z - 1).*(x - 1).*(4.*x.^2.*y.^3.*z.^2 - 4.*x.^2.*y.^3.*z - 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z - 4.*x.*y.^3.*z.^2 + 4.*x.*y.^3.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z + 15.*y - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvw(3,:,:,:) = (20.*x.*z.*(2.*y - 1).*(x - 1).*(4.*x.^2.*y.^2.*z.^3 - 4.*x.^2.*y.^2.*z.^2 - 4.*x.^2.*y.*z.^3 + 4.*x.^2.*y.*z.^2 - 4.*x.*y.^2.*z.^3 + 4.*x.*y.^2.*z.^2 + 4.*x.*y.*z.^3 - 4.*x.*y.*z.^2 + 15.*z - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdww = zeros ([3, size(x)]); d2Fdww(1,:,:,:) = (40.*x.^2.*y.*(x - 1).*(y - 1).*(4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y + 5) + 40.*x.^2.*y.*z.^2.*(x - 1).*(y - 1).*(12.*x.^2.*y.^2 - 12.*x.^2.*y - 12.*x.*y.^2 + 12.*x.*y) - 40.*x.^2.*y.*z.*(x - 1).*(y - 1).*(12.*x.^2.*y.^2 - 12.*x.^2.*y - 12.*x.*y.^2 + 12.*x.*y))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdww(2,:,:,:) = (40.*x.*y.^2.*(x - 1).*(y - 1).*(4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y + 5) + 40.*x.*y.^2.*z.^2.*(x - 1).*(y - 1).*(12.*x.^2.*y.^2 - 12.*x.^2.*y - 12.*x.*y.^2 + 12.*x.*y) - 40.*x.*y.^2.*z.*(x - 1).*(y - 1).*(12.*x.^2.*y.^2 - 12.*x.^2.*y - 12.*x.*y.^2 + 12.*x.*y))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdww(3,:,:,:) = (40.*x.*y.*(x - 1).*(y - 1).*(4.*x.^2.*y.^2.*z.^3 - 4.*x.^2.*y.*z.^3 - 4.*x.*y.^2.*z.^3 + 4.*x.*y.*z.^3 + 15.*z - 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; ***** test knots = [0 0 0 0.5 1 1 1]; coefs(1,:) = [0 2 4 2]; coefs(2,:) = [0 2 2 0]; coefs(3,:) = [0 4 2 0]; coefs(4,:) = [1 2 2 1]; nrb = nrbmak (coefs, knots); [dnrb, dnrb2] = nrbderiv (nrb); x = linspace (0, 1, 10); [pnt, jac, hess] = nrbdeval (nrb, dnrb, dnrb2, x); w = -4*x.^2 + 4*x + 1; F = zeros (3,numel(x)); DF = zeros (3, numel(x)); D2F = zeros (3, numel(x)); F(1,:) = (-4*x.*(x-2)./w) .* (x<0.5) + ((4*x - 5)./w + 3) .* (x>0.5); F(2,:) = (2-2./w); F(3,:) = (-4*x.*(5*x-4)./w) .* (x<0.5) + (-4*(x.^2 - 1)./w) .* (x>0.5); DF(1,:) = (8*(2*x.^2-x+1)./w.^2) .* (x<0.5) + (8*(2*x-3).*(x-1)./w.^2) .* (x>0.5); DF(2,:) = -8*(2*x-1)./w.^2; DF(3,:) = -(8*(2*x.^2+5*x-2)./w.^2) .* (x<0.5) - (8*(2*x.^2-3*x+2)./w.^2) .* (x>0.5); D2F(1,:) = 8*(16*x.^3-12*x.^2+24*x-9)./w.^3 .* (x<0.5) + 8*(16*x.^3-60*x.^2+72*x-29)./w.^3 .* (x>0.5); D2F(2,:) = -16*(12*x.^2-12*x+5)./w.^3; D2F(3,:) = -8*(16*x.^3+60*x.^2-48*x+21)./w.^3 .* (x<0.5) -8*(16*x.^3-36*x.^2+48*x-19)./w.^3 .* (x>0.5); assert (F, pnt, 1e3*eps) assert (DF, jac, 1e3*eps) assert (D2F, hess, 1e3*eps) ***** test knots = {[0 0 0 1 1 1], [0 0 0 0.5 1 1 1]}; coefs = ones (4,3,4); coefs(1,:,:) = reshape ([0 0 0 0; 1 1 1 1; 2 2 4 2], 1, 3, 4); coefs(2,:,:) = reshape ([0 1 2 3; 0 1 2 3; 0 1 4 3], 1, 3, 4); coefs(3,:,:) = reshape ([0 1 0 0; 0 0 0 0; 0 0 0 0], 1, 3, 4); coefs(4,:,:) = reshape ([1 1 1 1; 1 1 1 1; 1 1 2 1], 1, 3, 4); nrb = nrbmak (coefs, knots); [dnrb, dnrb2] = nrbderiv (nrb); X = linspace (0, 1, 4); Y = linspace (0, 1, 4); [pnt, jac, hess] = nrbdeval (nrb, dnrb, dnrb2, {X Y}); [y, x] = meshgrid (X, Y); w = (2*x.^2.*y.^2 + 1) .* (y < 0.5) + (-6*x.^2.*y.^2 + 8*x.^2.*y - 2*x.^2 + 1) .* (y > 0.5); F = zeros ([3,size(x)]); F(1,:,:) = ((2*x - 2) ./w + 2) .* (y<0.5) + (2 + (2*x-2)./w) .* (y > 0.5); F(2,:,:) = (2 - (2*(y-1).^2)./w).*(y<0.5) + ... ((-12*x.^2.*y.^2 + 16*x.^2.*y - 4*x.^2 + 2*y.^2 + 1)./w).*(y>0.5); F(3,:,:) = (-2*y.*(3*y - 2).*(x - 1).^2./w) .* (y<0.5) + ... (2*(x - 1).^2.*(y - 1).^2./w) .* (y>0.5); dFdu = zeros ([3,size(x)]); dFdu(1,:,:) = (((8*x - 4*x.^2).*y.^2 + 2)./w.^2).*(y<0.5) + ... (((12*y.^2 - 16*y + 4).*x.^2 + (-24*y.^2 + 32*y - 8).*x + 2)./w.^2).*(y>0.5); dFdu(2,:,:) = (8*x.*y.^2.*(y - 1).^2./w.^2).*(y<0.5) + ... ((4*x.*(3*y - 1).*(2*y.^2 - 1).*(y - 1))./w.^2).*(y>0.5); dFdu(3,:,:) = (-4*y.*(2.*x.*y.^2 + 1).*(3*y - 2).*(x - 1)./w.^2).*(y<0.5) + ... ((-4*(x - 1).*(y - 1).^2.*(6*x.*y.^2 - 8*x.*y + 2*x - 1))./w.^2).*(y>0.5); dFdv = zeros ([3,size(x)]); dFdv(1,:,:) = (-8*x.^2.*y.*(x - 1)./w.^2).*(y<0.5) + ... (8*x.^2.*(3*y - 2).*(x - 1)./w.^2).*(y>0.5); dFdv(2,:,:) = (-4*(2*y.*x.^2 + 1).*(y - 1)./w.^2).*(y<0.5) + ... (((16*y.^2 - 20*y + 8).*x.^2 + 4*y)./w.^2).*(y>0.5); dFdv(3,:,:) = (-4*(x - 1).^2.*(2*x.^2.*y.^2 + 3*y - 1)./w.^2).*(y<0.5) + ... (4*(x - 1).^2.*(y - 1).*(2*x.^2 - 2*x.^2.*y + 1)./w.^2).*(y>0.5); d2Fduu = zeros ([3, size(x)]); d2Fduu(1,:,:) = (-((48*x.^2 - 16*x.^3).*y.^4 + (24*x - 8).*y.^2)./w.^3).*(y<0.5) + ... (((32*(3*y - 1).*(x - 1).*(y - 1))-(8*(3*y - 1).*(x - 3).*(y - 1).*w))./w.^3).*(y>0.5); d2Fduu(2,:,:) = (-(8*y.^2.*(6*x.^2.*y.^2 - 1).*(y - 1).^2)./w.^3).*(y<0.5) + ... ((4*(3*y - 1).*(2*y.^2 - 1).*(y - 1).*(18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 + 1))./w.^3).*(y>0.5); d2Fduu(3,:,:) = ((4*y.*(3*y - 2).*(8*x.^3.*y.^4 - 12*x.^2.*y.^4 + 6*x.^2.*y.^2 - 12*x.*y.^2 + 2*y.^2 - 1))./w.^3).*(y<0.5) + ... ((4*(y - 1).^2.*(6*y.^2 - 8*y + 3) - 4*x.^3.*(y - 1).^2.*(72*y.^4 - 192*y.^3 + 176*y.^2 - 64*y + 8) + 4*x.^2.*(y - 1).^2.*(108*y.^4 - 288*y.^3 + 282*y.^2 - 120*y + 18) - 4*x.*(y - 1).^2.*(36*y.^2 - 48*y + 12))./w.^3) .* (y>0.5); d2Fdvv = zeros ([3, size(x)]); d2Fdvv(1,:,:) = (8*x.^2.*(6*x.^2.*y.^2 - 1).*(x - 1)./w.^3) .* (y<0.5) + ... (8*x.^2.*(x - 1).*(54*x.^2.*y.^2 - 72*x.^2.*y + 26*x.^2 + 3)./w.^3) .* (y>0.5); d2Fdvv(2,:,:) = (-((48*y.^2 - 32*y.^3).*x.^4 + (- 24*y.^2 + 48*y - 8).*x.^2 + 4)./w.^3) .*(y<0.5) + ... (((192*y.^3 - 360*y.^2 + 288*y - 88).*x.^4 + (72*y.^2 - 28).*x.^2 + 4)./w.^3) .* (y>0.5); d2Fdvv(3,:,:) = (4*(x - 1).^2.*(8*x.^4.*y.^3 + 18*x.^2.*y.^2 - 12*x.^2.*y - 3))./w.^3 .* (y<0.5) + ... ((4*(x - 1).^2.*(24*x.^4 + 18*x.^2 + 1) + 4*y.^2.*(72*x.^4 + 18*x.^2).*(x - 1).^2 - 96*x.^4.*y.^3.*(x - 1).^2 - 4*y.*(72*x.^4 + 36*x.^2).*(x - 1).^2)./w.^3) .* (y>0.5); d2Fduv = zeros ([3, size(x)]); d2Fduv(1,:,:) = (-(y.^3.*(32*x.^3 - 16*x.^4) - y.*(16*x - 24*x.^2))./w.^3) .* (y<0.5) + ... (-(-8*(3*y - 2).*(6*y.^2 - 8*y + 2).*x.^4 + 8*(3*y - 2).*(12*y.^2 - 16*y + 4).*x.^3 + (48 - 72*y).*x.^2 + (48*y - 32).*x)./w.^3) .* (y>0.5); d2Fduv(2,:,:) = (16*x.*y.*(y - 1).*(2*x.^2.*y.^2 + 2*y - 1)./w.^3) .* (y<0.5) + ... (-(8*x.*(4*y.^2 - 5*y + 2))./w.^2 + (16*x.*(3*y - 2).*(2*y.^2 - 1))./w.^3) .* (y>0.5); d2Fduv(3,:,:) = (-(8*(x - 1).*(4*x.^3.*y.^4 - 6*x.^2.*y.^3 + 6*x.^2.*y.^2 + 12*x.*y.^3 - 6*x.*y.^2 + 3*y - 1))./w.^3) .* (y<0.5) + ... ((8*(x - 1).*(y - 1).*(12*x.^3.*y.^3 - 28*x.^3.*y.^2 + 20*x.^3.*y - 4*x.^3 + 6*x.^2.*y.^2 - 12*x.^2.*y + 6*x.^2 - 12*x.*y.^2 + 18*x.*y - 6*x + 1))./w.^3) .* (y>0.5); assert (F, pnt, 1e3*eps) assert (dFdu, jac{1}, 1e3*eps) assert (dFdv, jac{2}, 1e3*eps) assert (d2Fduu, hess{1,1}, 1e3*eps) assert (d2Fduv, hess{1,2}, 1e3*eps) assert (d2Fduv, hess{2,1}, 1e3*eps) assert (d2Fdvv, hess{2,2}, 1e3*eps) ***** test knots = {[0 0 0 1 1 1], [0 0 0 0.5 1 1 1]}; coefs = ones (4,3,4); coefs(1,:,:) = reshape ([0 0 0 0; 1 1 1 1; 2 2 4 2], 1, 3, 4); coefs(2,:,:) = reshape ([0 1 2 3; 0 1 2 3; 0 1 4 3], 1, 3, 4); coefs(3,:,:) = reshape ([0 1 0 0; 0 0 0 0; 0 0 0 0], 1, 3, 4); coefs(4,:,:) = reshape ([1 1 1 1; 1 1 1 1; 1 1 2 1], 1, 3, 4); nrb = nrbmak (coefs, knots); nrb = nrbdegelev (nrbextrude (nrb, [0.4 0.6 2]), [0 0 1]); nrb.coefs(4,2,3,3) = 1.5; [dnrb, dnrb2] = nrbderiv (nrb); X = linspace (0, 1, 4); Y = linspace (0, 1, 4); Z = linspace (0, 1, 4); [pnt, jac, hess] = nrbdeval (nrb, dnrb, dnrb2, {X Y Z}); [y, x, z] = meshgrid (X, Y, Z); w = (-2*x.^2.*y.^2.*z.^2 + 2*x.^2.*y.^2 + 2*x.*y.^2.*z.^2 + 1) .* (y < 0.5) + ... (6*x.^2.*y.^2.*z.^2 - 6*x.^2.*y.^2 - 8*x.^2.*y.*z.^2 + 8*x.^2.*y + 2*x.^2.*z.^2 - 2*x.^2 - 6*x.*y.^2.*z.^2 + 8*x.*y.*z.^2 - 2*x.*z.^2 + 1) .* (y > 0.5); F = zeros ([3,size(x)]); F(1,:,:,:) = ((10*x + 20*x.^2.*y.^2 + z.*(4*x.^2.*y.^2 + 2))./(5*w)) .* (y<0.5) + ... (60*x.^2.*y.^2 - 10*x + z.*(12*x.^2.*y.^2 - 16*x.^2.*y + 4*x.^2 - 2) - 80*x.^2.*y + 20*x.^2)./(-5*w) .* (y > 0.5); F(2,:,:,:) = ((20*y + 20*x.^2.*y.^2 + z.*(6*x.^2.*y.^2 + 3) - 10*y.^2)./(5*w)).*(y<0.5) + ... ((60*x.^2.*y.^2 + z.*(18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 - 3) - 80*x.^2.*y + 20*x.^2 - 10*y.^2 - 5)./(-5*w)).*(y>0.5); F(3,:,:,:) = ((4*y - 6*x.^2.*y.^2 + z.*(4*x.^2.*y.^2 + 2) - 8*x.*y + 12*x.*y.^2 + 4*x.^2.*y - 6*y.^2)./w) .* (y<0.5) + ... ((2*z - 4*y - 4*x + 2*x.^2.*y.^2 + 8*x.*y - 4*x.*y.^2 - 4*x.^2.*y - 4*x.^2.*z + 2*x.^2 + 2*y.^2 + 16*x.^2.*y.*z - 12*x.^2.*y.^2.*z + 2)./w) .* (y>0.5); dFdu = zeros ([3,size(x)]); dFdu(1,:,:,:) = ((x.*((8*y.^2.*z.^3)/5 + 8*y.^2) - (4*y.^2.*z.^3)/5 + x.^2.*(z.^2.*(8*y.^4 + 4*y.^2) + (8*y.^4.*z.^3)/5 - 4*y.^2) + 2)./w.^2).*(y<0.5) + ... ((z.^3.*(x.^2.*((72*y.^4)/5 - (192*y.^3)/5 + (176*y.^2)/5 - (64*y)/5 + 8/5) - (16*y)/5 - x.*((24*y.^2)/5 - (32*y)/5 + 8/5) + (12*y.^2)/5 + 4/5) - x.*(24*y.^2 - 32*y + 8) + x.^2.*(12*y.^2 - 16*y + 4) + x.^2.*z.^2.*(72*y.^4 - 192*y.^3 + 164*y.^2 - 48*y + 4) + 2)./w.^2).*(y>0.5); dFdu(2,:,:,:) = ((z.^2.*(8*x.^2.*y.^4 - y.^2.*(8*y - 4*y.^2) + (2*x.*y.^2.*(40*y - 20*y.^2))/5) + z.^3.*((12*x.^2.*y.^4)/5 + (12*x.*y.^2)/5 - (6*y.^2)/5) + (2*x.*y.^2.*(20*y.^2 - 40*y + 20))/5)./w.^2).*(y<0.5) + ... (((2*(3*y.^2 - 4*y + 1).*(18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 - 6*x + 3).*z.^3)/5 + (2*(3*y.^2 - 4*y + 1).*(60*x.^2.*y.^2 - 80*x.^2.*y + 20*x.^2 - 20*x.*y.^2 - 10*x + 10*y.^2 + 5).*z.^2)/5 - (2*(10*x - 20*x.*y.^2).*(3*y.^2 - 4*y + 1))/5)./w.^2).*(y>0.5); dFdu(3,:,:,:) = ((4*y.*(3*y - 2) + z.^3.*(8*x.^2.*y.^4 + 8*x.*y.^2 - 4*y.^2) - z.^2.*(4*y.*(2*y.^2 - 3*y.^3).*x.^2 - 4*y.*(4*y.^2 - 6*y.^3).*x + 4*y.*(2*y.^2 - 3*y.^3)) + 4*x.^2.*y.*(4*y.^2 - 6*y.^3) - 4*x.*y.*(- 6*y.^3 + 4*y.^2 + 3*y - 2)) ./w.^2).*(y<0.5) + ... ((z.^2.*(4*(y - 1).*(3*y.^3 - 7*y.^2 + 5*y - 1).*x.^2 - 4*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2).*x + 4*(y - 1).*(3*y.^3 - 7*y.^2 + 5*y - 1)) - 4*(y - 1).^2 + z.^3.*(4*(y - 1).*(18*y.^3 - 30*y.^2 + 14*y - 2).*x.^2 - 4*(6*y - 2).*(y - 1).*x + 4*(3*y - 1).*(y - 1)) + 4*x.*(y - 1).*(6*y.^3 - 14*y.^2 + 11*y - 3) - 4*x.^2.*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2))./w.^2) .* (y > 0.5); dFdv = zeros ([3,size(x)]); dFdv(1,:,:,:) = ((8*x.*y.*(x - 1).*(z.^3 + 5*x.*z.^2 - 5*x))/5./w.^2).*(y<0.5) + ... (-(8*x.*(3*y - 2).*(x - 1).*(z.^3 + 5*x.*z.^2 - 5*x))/5./w.^2).*(y>0.5); dFdv(2,:,:,:) = (-((8*x.*z.^2 - x.^2.*(8*z.^2 - 8)).*y.^2 + ((12*x.*z.^3)/5 - x.^2.*((12*z.^3)/5 + 8) + 4).*y - 4)./w.^2).*(y<0.5) + ... ((4*y + z.^3.*(x.*((36*y)/5 - 24/5) - x.^2.*((36*y)/5 - 24/5)) + z.^2.*(x.*(16*y.^2 + 4*y - 8) - x.^2.*(16*y.^2 + 4*y - 8)) + x.^2.*(16*y.^2 - 20*y + 8))./w.^2).*(y>0.5); dFdv(3,:,:,:) = ((4*(x - 1).^2 - y.*(4*(3*x - 3).*(x - 1) - 8*x.*z.^3.*(x - 1)) + y.^2.*(4*(x - 1).*(2*x.^3 - 4*x.^2 + 2*x).*z.^2 + 4*(2*x.^2 - 2*x.^3).*(x - 1)))./w.^2).*(y<0.5) + ... ((y.^2.*(4*(x - 1).*(2*x.^3 - 4*x.^2 + 2*x).*z.^2 + 4*(2*x.^2 - 2*x.^3).*(x - 1)) - 4*(x - 1).*(2*x.^3 - 2*x.^2 + x - 1) - y.*(24*x.*(x - 1).*z.^3 + 4*(x - 1).*(4*x.^3 - 8*x.^2 + 4*x).*z.^2 - 4*(x - 1).*(4*x.^3 - 4*x.^2 + x - 1)) + 16*x.*z.^3.*(x - 1) + 4*z.^2.*(x - 1).*(2*x.^3 - 4*x.^2 + 2*x))./w.^2).*(y>0.5); dFdw = zeros ([3,size(x)]); dFdw(1,:,:,:) = ((4*x.^2.*y.^2 + 2)./(- 10*x.^2.*y.^2.*z.^2 + 10*x.^2.*y.^2 + 10*x.*y.^2.*z.^2 + 5) - ((20*x.*y.^2.*z - 20*x.^2.*y.^2.*z).*(10*x + 20*x.^2.*y.^2 + z.*(4*x.^2.*y.^2 + 2)))./(5*w).^2).*(y<0.5) + ... ((12*x.^2.*y.^2 - 16*x.^2.*y + 4*x.^2 - 2)./(- 30*x.^2.*y.^2.*z.^2 + 30*x.^2.*y.^2 + 40*x.^2.*y.*z.^2 - 40*x.^2.*y - 10*x.^2.*z.^2 + 10*x.^2 + 30*x.*y.^2.*z.^2 - 40*x.*y.*z.^2 + 10*x.*z.^2 - 5) - ((60*x.^2.*y.^2 - 10*x + z.*(12*x.^2.*y.^2 - 16*x.^2.*y + 4*x.^2 - 2) - 80*x.^2.*y + 20*x.^2).*(- 60*z.*x.^2.*y.^2 + 80*z.*x.^2.*y - 20*z.*x.^2 + 60*z.*x.*y.^2 - 80*z.*x.*y + 20*z.*x))./(5*w).^2).*(y>0.5); dFdw(2,:,:,:) = ((6*x.^2.*y.^2 + 3)./(- 10*x.^2.*y.^2.*z.^2 + 10*x.^2.*y.^2 + 10*x.*y.^2.*z.^2 + 5) - ((20*x.*y.^2.*z - 20*x.^2.*y.^2.*z).*(20*y + 20*x.^2.*y.^2 + z.*(6*x.^2.*y.^2 + 3) - 10*y.^2))./(5*w).^2).*(y<0.5) + ... ((18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 - 3)./(- 30*x.^2.*y.^2.*z.^2 + 30*x.^2.*y.^2 + 40*x.^2.*y.*z.^2 - 40*x.^2.*y - 10*x.^2.*z.^2 + 10*x.^2 + 30*x.*y.^2.*z.^2 - 40*x.*y.*z.^2 + 10*x.*z.^2 - 5) - ((- 60*z.*x.^2.*y.^2 + 80*z.*x.^2.*y - 20*z.*x.^2 + 60*z.*x.*y.^2 - 80*z.*x.*y + 20*z.*x).*(60*x.^2.*y.^2 + z.*(18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 - 3) - 80*x.^2.*y + 20*x.^2 - 10*y.^2 - 5))./(5*w).^2).*(y>0.5); dFdw(3,:,:,:) = ((4*x.^2.*y.^2 + 2)./(2*x.^2.*y.^2 - z.^2.*(2*x.^2.*y.^2 - 2*x.*y.^2) + 1) + (2*z.*(2*x.^2.*y.^2 - 2*x.*y.^2).*(4*y - 6*x.^2.*y.^2 + z.*(4*x.^2.*y.^2 + 2) - 8*x.*y + 12*x.*y.^2 + 4*x.^2.*y - 6*y.^2))./w.^2).*(y<0.5) + ... ((12*x.^2.*y.^2 - 16*x.^2.*y + 4*x.^2 - 2)./(6*x.^2.*y.^2 + z.^2.*(- 6*x.^2.*y.^2 + 8*x.^2.*y - 2*x.^2 + 6*x.*y.^2 - 8*x.*y + 2*x) - 8*x.^2.*y + 2*x.^2 - 1) + (2*z.*(- 6*x.^2.*y.^2 + 8*x.^2.*y - 2*x.^2 + 6*x.*y.^2 - 8*x.*y + 2*x).*(2*z - 4*y - 4*x + 2*x.^2.*y.^2 + 8*x.*y - 4*x.*y.^2 - 4*x.^2.*y - 4*x.^2.*z + 2*x.^2 + 2*y.^2 + 16*x.^2.*y.*z - 12*x.^2.*y.^2.*z + 2))./w.^2).*(y>0.5); d2Fduu = zeros ([3, size(x)]); d2Fduu(1,:,:,:) = (((8*y.^2.*z.^3)/5 + 2*x.*(z.^2.*(8*y.^4 + 4*y.^2) + (8*y.^4.*z.^3)/5 - 4*y.^2) + 8*y.^2)./w.^2 - (2*(2*y.^2.*z.^2 + 4*x.*y.^2 - 4*x.*y.^2.*z.^2).*(x.*((8*y.^2.*z.^3)/5 + 8*y.^2) - (4*y.^2.*z.^3)/5 + x.^2.*(z.^2.*(8*y.^4 + 4*y.^2) + (8*y.^4.*z.^3)/5 - 4*y.^2) + 2))./w.^3).*(y<0.5) + ... ((32*y + 2*x.*(12*y.^2 - 16*y + 4) + z.^3.*((32*y)/5 + 2*x.*((72*y.^4)/5 - (192*y.^3)/5 + (176*y.^2)/5 - (64*y)/5 + 8/5) - (24*y.^2)/5 - 8/5) - 24*y.^2 + 2*x.*z.^2.*(72*y.^4 - 192*y.^3 + 164*y.^2 - 48*y + 4) - 8)./w.^2 - (2*(z.^3.*(x.^2.*((72*y.^4)/5 - (192*y.^3)/5 + (176*y.^2)/5 - (64*y)/5 + 8/5) - (16*y)/5 - x.*((24*y.^2)/5 - (32*y)/5 + 8/5) + (12*y.^2)/5 + 4/5) - x.*(24*y.^2 - 32*y + 8) + x.^2.*(12*y.^2 - 16*y + 4) + x.^2.*z.^2.*(72*y.^4 - 192*y.^3 + 164*y.^2 - 48*y + 4) + 2).*(4*x + 6*y.^2.*z.^2 - 16*x.*y + 12*x.*y.^2 - 4*x.*z.^2 - 8*y.*z.^2 + 2*z.^2 + 16*x.*y.*z.^2 - 12*x.*y.^2.*z.^2))./(-w).^3).*(y>0.5); d2Fduu(2,:,:,:) = ((z.^3.*((24*x.*y.^4)/5 + (12*y.^2)/5) + (2*y.^2.*(20*y.^2 - 40*y + 20))/5 + z.^2.*((2*y.^2.*(40*y - 20*y.^2))/5 + 16*x.*y.^4))./w.^2 - (2*(z.^2.*(8*x.^2.*y.^4 - y.^2.*(8*y - 4*y.^2) + (2*x.*y.^2.*(40*y - 20*y.^2))/5) + z.^3.*((12*x.^2.*y.^4)/5 + (12*x.*y.^2)/5 - (6*y.^2)/5) + (2*x.*y.^2.*(20*y.^2 - 40*y + 20))/5).*(2*y.^2.*z.^2 + 4*x.*y.^2 - 4*x.*y.^2.*z.^2))./w.^3).*(y<0.5) + ... (((2*(3*y.^2 - 4*y + 1).*(36*x.*y.^2 - 48*x.*y + 12*x - 6).*z.^3)/5 - (2*(3*y.^2 - 4*y + 1).*(160*x.*y - 40*x - 120*x.*y.^2 + 20*y.^2 + 10).*z.^2)/5 + (2*(20*y.^2 - 10).*(3*y.^2 - 4*y + 1))/5)./w.^2 - (2*((2*(3*y.^2 - 4*y + 1).*(18*x.^2.*y.^2 - 24*x.^2.*y + 6*x.^2 - 6*x + 3).*z.^3)/5 + (2*(3*y.^2 - 4*y + 1).*(60*x.^2.*y.^2 - 80*x.^2.*y + 20*x.^2 - 20*x.*y.^2 - 10*x + 10*y.^2 + 5).*z.^2)/5 - (2*(10*x - 20*x.*y.^2).*(3*y.^2 - 4*y + 1))/5).*(4*x + 6*y.^2.*z.^2 - 16*x.*y + 12*x.*y.^2 - 4*x.*z.^2 - 8*y.*z.^2 + 2*z.^2 + 16*x.*y.*z.^2 - 12*x.*y.^2.*z.^2))./(-w).^3).*(y>0.5); d2Fduu(3,:,:,:) = (((16*x.*y.^4 + 8*y.^2).*z.^3 + (4*y.*(4*y.^2 - 6*y.^3) - 8*x.*y.*(2*y.^2 - 3*y.^3)).*z.^2 - 4*y.*(- 6*y.^3 + 4*y.^2 + 3*y - 2) + 8*x.*y.*(4*y.^2 - 6*y.^3))./w.^2 - (2*(2*y.^2.*z.^2 + 4*x.*y.^2 - 4*x.*y.^2.*z.^2).*(4*y.*(3*y - 2) + z.^3.*(8*x.^2.*y.^4 + 8*x.*y.^2 - 4*y.^2) - z.^2.*(4*y.*(2*y.^2 - 3*y.^3).*x.^2 - 4*y.*(4*y.^2 - 6*y.^3).*x + 4*y.*(2*y.^2 - 3*y.^3)) + 4*x.^2.*y.*(4*y.^2 - 6*y.^3) - 4*x.*y.*(- 6*y.^3 + 4*y.^2 + 3*y - 2)))./w.^3).*(y<0.5) + ... (-((4*(6*y - 2).*(y - 1) - 8*x.*(y - 1).*(18*y.^3 - 30*y.^2 + 14*y - 2)).*z.^3 + (4*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2) - 8*x.*(y - 1).*(3*y.^3 - 7*y.^2 + 5*y - 1)).*z.^2 - 4*(y - 1).*(6*y.^3 - 14*y.^2 + 11*y - 3) + 8*x.*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2))./w.^2 - (2*(z.^2.*(4*(y - 1).*(3*y.^3 - 7*y.^2 + 5*y - 1).*x.^2 - 4*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2).*x + 4*(y - 1).*(3*y.^3 - 7*y.^2 + 5*y - 1)) - 4*(y - 1).^2 + z.^3.*(4*(y - 1).*(18*y.^3 - 30*y.^2 + 14*y - 2).*x.^2 - 4*(6*y - 2).*(y - 1).*x + 4*(3*y - 1).*(y - 1)) + 4*x.*(y - 1).*(6*y.^3 - 14*y.^2 + 11*y - 3) - 4*x.^2.*(y - 1).*(6*y.^3 - 14*y.^2 + 10*y - 2)).*(4*x + 6*y.^2.*z.^2 - 16*x.*y + 12*x.*y.^2 - 4*x.*z.^2 - 8*y.*z.^2 + 2*z.^2 + 16*x.*y.*z.^2 - 12*x.*y.^2.*z.^2))./(-w).^3) .* (y>0.5); d2Fduv = zeros ([3, size(x)]); d2Fduv(1,:,:,:) = ((((8.*x.^2.*(6.*z.^3 - 6.*z.^5))/5 + (8.*x.^4.*(10.*z.^4 - 20.*z.^2 + 10))/5 - (8.*x.^3.*(- 4.*z.^5 + 10.*z.^4 + 4.*z.^3 - 30.*z.^2 + 20))/5 + (16.*x.*z.^5)/5).*y.^3 + ((8.*x.*(2.*z.^3 - 10.*z.^2 + 10))/5 + (8.*x.^2.*(15.*z.^2 - 15))/5 - (8.*z.^3)/5).*y)./w.^3) .* (y<0.5) + ... (-(x.^4.*((8.*(3.*y - 2).*(30.*y.^2 - 40.*y + 10).*z.^4)/5 - (8.*(3.*y - 2).*(60.*y.^2 - 80.*y + 20).*z.^2)/5 + (8.*(3.*y - 2).*(30.*y.^2 - 40.*y + 10))/5) - x.^3.*(- (8.*(3.*y - 2).*(12.*y.^2 - 16.*y + 4).*z.^5)/5 + (8.*(3.*y - 2).*(30.*y.^2 - 40.*y + 10).*z.^4)/5 + (8.*(3.*y - 2).*(12.*y.^2 - 16.*y + 4).*z.^3)/5 - (8.*(3.*y - 2).*(90.*y.^2 - 120.*y + 30).*z.^2)/5 + (8.*(3.*y - 2).*(60.*y.^2 - 80.*y + 20))/5) + z.^3.*((24.*y)/5 - 16/5) - x.^2.*((8.*(3.*y - 2).*(18.*y.^2 - 24.*y + 6).*z.^5)/5 - (8.*(3.*y - 2).*(18.*y.^2 - 24.*y + 6).*z.^3)/5 + (72.*y - 48).*z.^2 - 72.*y + 48) + x.*((8.*(3.*y - 2).*(6.*y.^2 - 8.*y + 2).*z.^5)/5 + (32/5 - (48.*y)/5).*z.^3 + (48.*y - 32).*z.^2 - 48.*y + 32))./(-w).^3) .* (y>0.5); d2Fduv(2,:,:,:) = ((((4.*x.^2.*(60.*z.^2 - 60.*z.^4))/5 + (4.*x.^3.*(40.*z.^4 - 80.*z.^2 + 40))/5 + 16.*x.*z.^4).*y.^4 + ((4.*x.^2.*(18.*z.^3 - 18.*z.^5))/5 + (4.*x.^3.*(12.*z.^5 - 12.*z.^3 + 40.*z.^2 - 40))/5 + (4.*x.*(6.*z.^5 - 40.*z.^2 + 40))/5 + 16.*z.^2).*y.^3 + ((4.*x.*(60.*z.^2 - 60))/5 - 24.*z.^2).*y.^2 + ((4.*x.*(6.*z.^3 + 20))/5 - (12.*z.^3)/5).*y)./w.^3) .* (y<0.5) + ... ((z.^3.*(((432.*y.^3)/5 - (864.*y.^2)/5 + (528.*y)/5 - 96/5).*x.^3 + (- (648.*y.^3)/5 + (1296.*y.^2)/5 - (792.*y)/5 + 144/5).*x.^2 + ((72.*y)/5 - 48/5).*x - (36.*y)/5 + 24/5) - x.^3.*(192.*y.^4 - 496.*y.^3 + 480.*y.^2 - 208.*y + 32) + z.^4.*((- 192.*y.^4 + 208.*y.^3 + 96.*y.^2 - 144.*y + 32).*x.^3 + (288.*y.^4 - 312.*y.^3 - 144.*y.^2 + 216.*y - 48).*x.^2 + (- 96.*y.^4 + 104.*y.^3 + 48.*y.^2 - 72.*y + 16).*x) + x.*(- 96.*y.^3 + 96.*y.^2 + 8.*y - 16) + z.^2.*(x.^2.*(- 288.*y.^4 + 312.*y.^3 + 144.*y.^2 - 216.*y + 48) - 20.*y - x.^3.*(- 384.*y.^4 + 704.*y.^3 - 384.*y.^2 + 64.*y) + x.*(96.*y.^3 - 96.*y.^2 + 40.*y - 16) + 48.*y.^2 - 48.*y.^3 + 8) - z.^5.*(((432.*y.^3)/5 - (864.*y.^2)/5 + (528.*y)/5 - 96/5).*x.^3 + (- (648.*y.^3)/5 + (1296.*y.^2)/5 - (792.*y)/5 + 144/5).*x.^2 + ((216.*y.^3)/5 - (432.*y.^2)/5 + (264.*y)/5 - 48/5).*x))./(-w).^3) .* (y>0.5); d2Fduv(3,:,:,:) = (((x.^2.*(48.*z.^2 - 48.*z.^4) - x.^4.*(16.*z.^4 - 48.*z.^2 + 32) + x.^3.*(48.*z.^4 - 96.*z.^2 + 32) + 16.*x.*z.^4).*y.^4 + (x.^2.*(- 48.*z.^5 + 48.*z.^3 + 144.*z.^2 - 144) - x.^3.*(- 32.*z.^5 + 32.*z.^3 + 48.*z.^2 - 48) + x.*(16.*z.^5 - 144.*z.^2 + 96) + 48.*z.^2).*y.^3 + (x.*(96.*z.^2 - 48) + x.^3.*(48.*z.^2 - 48) - x.^2.*(120.*z.^2 - 96) - 24.*z.^2).*y.^2 + (x.*(16.*z.^3 - 24) - 8.*z.^3 + 24).*y + 8.*x - 8)./w.^3) .* (y<0.5) + ... ((8.*y - x.^4.*(96.*y.^4 - 320.*y.^3 + 384.*y.^2 - 192.*y + 32) + x.^3.*(96.*y.^4 - 368.*y.^3 + 528.*y.^2 - 336.*y + 80) + z.^3.*((288.*y.^3 - 576.*y.^2 + 352.*y - 64).*x.^3 + (- 432.*y.^3 + 864.*y.^2 - 528.*y + 96).*x.^2 + (48.*y - 32).*x - 24.*y + 16) - x.*(96.*y.^3 - 240.*y.^2 + 200.*y - 56) - z.^4.*((48.*y.^4 - 160.*y.^3 + 192.*y.^2 - 96.*y + 16).*x.^4 + (- 144.*y.^4 + 480.*y.^3 - 576.*y.^2 + 288.*y - 48).*x.^3 + (144.*y.^4 - 480.*y.^3 + 576.*y.^2 - 288.*y + 48).*x.^2 + (- 48.*y.^4 + 160.*y.^3 - 192.*y.^2 + 96.*y - 16).*x) + z.^2.*(x.^4.*(144.*y.^4 - 480.*y.^3 + 576.*y.^2 - 288.*y + 48) - 96.*y + x.^2.*(144.*y.^4 - 624.*y.^3 + 984.*y.^2 - 672.*y + 168) - x.^3.*(288.*y.^4 - 1008.*y.^3 + 1296.*y.^2 - 720.*y + 144) + x.*(144.*y.^3 - 384.*y.^2 + 336.*y - 96) + 120.*y.^2 - 48.*y.^3 + 24) - z.^5.*((288.*y.^3 - 576.*y.^2 + 352.*y - 64).*x.^3 + (- 432.*y.^3 + 864.*y.^2 - 528.*y + 96).*x.^2 + (144.*y.^3 - 288.*y.^2 + 176.*y - 32).*x) + x.^2.*(144.*y.^3 - 384.*y.^2 + 336.*y - 96) - 8)./(-w).^3) .* (y>0.5); d2Fduw = zeros ([3, size(x)]); d2Fduw(1,:,:,:) = ((x.^2.*((24.*y.^4.*z.^2)/5 + 2.*z.*(8.*y.^4 + 4.*y.^2)) - (12.*y.^2.*z.^2)/5 + (24.*x.*y.^2.*z.^2)/5)./w.^2 - (2.*(4.*x.*y.^2.*z - 4.*x.^2.*y.^2.*z).*(x.*((8.*y.^2.*z.^3)/5 + 8.*y.^2) - (4.*y.^2.*z.^3)/5 + x.^2.*(z.^2.*(8.*y.^4 + 4.*y.^2) + (8.*y.^4.*z.^3)/5 - 4.*y.^2) + 2))./w.^3) .* (y<0.5) + ... (-((- (4.*(3.*y - 1).*(y - 1).*(36.*y.^4 - 96.*y.^3 + 88.*y.^2 - 32.*y + 4).*x.^4)/5 + (4.*(3.*y - 1).*(y - 1).*(36.*y.^4 - 96.*y.^3 + 100.*y.^2 - 48.*y + 8).*x.^3)/5 - (4.*(3.*y - 1).*(y - 1).*(18.*y.^2 - 24.*y + 6).*x.^2)/5 + (4.*(3.*y - 1).*(y - 1).*(6.*y.^2 - 8.*y + 2).*x)/5).*z.^4 + ((4.*x.^3.*(3.*y - 1).*(y - 1).*(360.*y.^4 - 960.*y.^3 + 820.*y.^2 - 240.*y + 20))/5 - (4.*x.^4.*(3.*y - 1).*(y - 1).*(360.*y.^4 - 960.*y.^3 + 820.*y.^2 - 240.*y + 20))/5).*z.^3 + (- (4.*(3.*y - 1).*(y - 1).*(108.*y.^4 - 288.*y.^3 + 264.*y.^2 - 96.*y + 12).*x.^4)/5 + (4.*(3.*y - 1).*(y - 1).*(36.*y.^2 - 48.*y + 12).*x.^3)/5 - (24.*(3.*y - 1).*(y - 1).*x)/5 + (12.*(3.*y - 1).*(y - 1))/5).*z.^2 + (- (4.*(3.*y - 1).*(y - 1).*(360.*y.^4 - 960.*y.^3 + 940.*y.^2 - 400.*y + 60).*x.^4)/5 + (4.*(3.*y - 1).*(y - 1).*(360.*y.^2 - 480.*y + 120).*x.^3)/5 - (4.*(3.*y - 1).*(y - 1).*(180.*y.^2 - 240.*y + 90).*x.^2)/5 + 16.*(3.*y - 1).*(y - 1).*x).*z)./(-w).^3) .* (y>0.5); d2Fduw(2,:,:,:) = ((2.*z.*(8.*x.^2.*y.^4 - y.^2.*(8.*y - 4.*y.^2) + (2.*x.*y.^2.*(40.*y - 20.*y.^2))/5) + 3.*z.^2.*((12.*x.^2.*y.^4)/5 + (12.*x.*y.^2)/5 - (6.*y.^2)/5))./w.^2 - (2.*(4.*x.*y.^2.*z - 4.*x.^2.*y.^2.*z).*(z.^2.*(8.*x.^2.*y.^4 - y.^2.*(8.*y - 4.*y.^2) + (2.*x.*y.^2.*(40.*y - 20.*y.^2))/5) + z.^3.*((12.*x.^2.*y.^4)/5 + (12.*x.*y.^2)/5 - (6.*y.^2)/5) + (2.*x.*y.^2.*(20.*y.^2 - 40.*y + 20))/5))./w.^3) .* (y<0.5) + ... (((6.*(3.*y.^2 - 4.*y + 1).*(18.*x.^2.*y.^2 - 24.*x.^2.*y + 6.*x.^2 - 6.*x + 3).*z.^2)/5 + (4.*(3.*y.^2 - 4.*y + 1).*(60.*x.^2.*y.^2 - 80.*x.^2.*y + 20.*x.^2 - 20.*x.*y.^2 - 10.*x + 10.*y.^2 + 5).*z)/5)./w.^2 - (2.*((2.*(3.*y.^2 - 4.*y + 1).*(18.*x.^2.*y.^2 - 24.*x.^2.*y + 6.*x.^2 - 6.*x + 3).*z.^3)/5 + (2.*(3.*y.^2 - 4.*y + 1).*(60.*x.^2.*y.^2 - 80.*x.^2.*y + 20.*x.^2 - 20.*x.*y.^2 - 10.*x + 10.*y.^2 + 5).*z.^2)/5 - (2.*(10.*x - 20.*x.*y.^2).*(3.*y.^2 - 4.*y + 1))/5).*(- 12.*z.*x.^2.*y.^2 + 16.*z.*x.^2.*y - 4.*z.*x.^2 + 12.*z.*x.*y.^2 - 16.*z.*x.*y + 4.*z.*x))./(-w).^3) .* (y>0.5); d2Fduw(3,:,:,:) = (- (2.*z.*(4.*y.*(2.*y.^2 - 3.*y.^3).*x.^2 - 4.*y.*(4.*y.^2 - 6.*y.^3).*x + 4.*y.*(2.*y.^2 - 3.*y.^3)) - 3.*z.^2.*(8.*x.^2.*y.^4 + 8.*x.*y.^2 - 4.*y.^2))./w.^2 - (2.*(4.*x.*y.^2.*z - 4.*x.^2.*y.^2.*z).*(4.*y.*(3.*y - 2) + z.^3.*(8.*x.^2.*y.^4 + 8.*x.*y.^2 - 4.*y.^2) - z.^2.*(4.*y.*(2.*y.^2 - 3.*y.^3).*x.^2 - 4.*y.*(4.*y.^2 - 6.*y.^3).*x + 4.*y.*(2.*y.^2 - 3.*y.^3)) + 4.*x.^2.*y.*(4.*y.^2 - 6.*y.^3) - 4.*x.*y.*(- 6.*y.^3 + 4.*y.^2 + 3.*y - 2)))./w.^3) .* (y<0.5) + ... ((2.*z.*(4.*(y - 1).*(3.*y.^3 - 7.*y.^2 + 5.*y - 1).*x.^2 - 4.*(y - 1).*(6.*y.^3 - 14.*y.^2 + 10.*y - 2).*x + 4.*(y - 1).*(3.*y.^3 - 7.*y.^2 + 5.*y - 1)) + 3.*z.^2.*(4.*(y - 1).*(18.*y.^3 - 30.*y.^2 + 14.*y - 2).*x.^2 - 4.*(6.*y - 2).*(y - 1).*x + 4.*(3.*y - 1).*(y - 1)))./w.^2 - (2.*(z.^2.*(4.*(y - 1).*(3.*y.^3 - 7.*y.^2 + 5.*y - 1).*x.^2 - 4.*(y - 1).*(6.*y.^3 - 14.*y.^2 + 10.*y - 2).*x + 4.*(y - 1).*(3.*y.^3 - 7.*y.^2 + 5.*y - 1)) - 4.*(y - 1).^2 + z.^3.*(4.*(y - 1).*(18.*y.^3 - 30.*y.^2 + 14.*y - 2).*x.^2 - 4.*(6.*y - 2).*(y - 1).*x + 4.*(3.*y - 1).*(y - 1)) + 4.*x.*(y - 1).*(6.*y.^3 - 14.*y.^2 + 11.*y - 3) - 4.*x.^2.*(y - 1).*(6.*y.^3 - 14.*y.^2 + 10.*y - 2)).*(- 12.*z.*x.^2.*y.^2 + 16.*z.*x.^2.*y - 4.*z.*x.^2 + 12.*z.*x.*y.^2 - 16.*z.*x.*y + 4.*z.*x))./(-w).^3) .* (y>0.5); d2Fdvv = zeros ([3, size(x)]); d2Fdvv(1,:,:,:) = (-(8.*x.*(x - 1).*(z.^3 + 5.*x.*z.^2 - 5.*x).*(- 6.*x.^2.*y.^2.*z.^2 + 6.*x.^2.*y.^2 + 6.*x.*y.^2.*z.^2 - 1))/5./w.^3) .* (y<0.5) + ... ((8.*x.*(x - 1).*(z.^3 + 5.*x.*z.^2 - 5.*x).*(- 54.*x.^2.*y.^2.*z.^2 + 54.*x.^2.*y.^2 + 72.*x.^2.*y.*z.^2 - 72.*x.^2.*y - 26.*x.^2.*z.^2 + 26.*x.^2 + 54.*x.*y.^2.*z.^2 - 72.*x.*y.*z.^2 + 26.*x.*z.^2 + 3))/5./(-w).^3) .* (y>0.5); d2Fdvv(2,:,:,:) = ((2.*((8.*x.*z.^2 - x.^2.*(8.*z.^2 - 8)).*y.^2 + ((12.*x.*z.^3)/5 - x.^2.*((12.*z.^3)/5 + 8) + 4).*y - 4).*(- 4.*y.*x.^2.*z.^2 + 4.*y.*x.^2 + 4.*y.*x.*z.^2))./w.^3 - ((12.*x.*z.^3)/5 + 2.*y.*(8.*x.*z.^2 - x.^2.*(8.*z.^2 - 8)) - x.^2.*((12.*z.^3)/5 + 8) + 4)./w.^2) .* (y<0.5) + ... ((z.^2.*(x.*(32.*y + 4) - x.^2.*(32.*y + 4)) + x.^2.*(32.*y - 20) + z.^3.*((36.*x)/5 - (36.*x.^2)/5) + 4)./w.^2 - (2.*(4.*y + z.^3.*(x.*((36.*y)/5 - 24/5) - x.^2.*((36.*y)/5 - 24/5)) + z.^2.*(x.*(16.*y.^2 + 4.*y - 8) - x.^2.*(16.*y.^2 + 4.*y - 8)) + x.^2.*(16.*y.^2 - 20.*y + 8)).*(8.*x.^2.*z.^2 + 12.*x.^2.*y - 8.*x.*z.^2 - 8.*x.^2 + 12.*x.*y.*z.^2 - 12.*x.^2.*y.*z.^2))./(-w).^3) .* (y>0.5); d2Fdvv(3,:,:,:) = ((2.*y.*(4.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x).*z.^2 + 4.*(2.*x.^2 - 2.*x.^3).*(x - 1)) - 4.*(3.*x - 3).*(x - 1) + 8.*x.*z.^3.*(x - 1))./w.^2 - (2.*(4.*(x - 1).^2 - y.*(4.*(3.*x - 3).*(x - 1) - 8.*x.*z.^3.*(x - 1)) + y.^2.*(4.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x).*z.^2 + 4.*(2.*x.^2 - 2.*x.^3).*(x - 1))).*(- 4.*y.*x.^2.*z.^2 + 4.*y.*x.^2 + 4.*y.*x.*z.^2))./w.^3) .* (y<0.5) + ... ((4.*(x - 1).*(4.*x.^3 - 4.*x.^2 + x - 1) + 2.*y.*(4.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x).*z.^2 + 4.*(2.*x.^2 - 2.*x.^3).*(x - 1)) - 24.*x.*z.^3.*(x - 1) - 4.*z.^2.*(x - 1).*(4.*x.^3 - 8.*x.^2 + 4.*x))./w.^2 - (2.*(y.^2.*(4.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x).*z.^2 + 4.*(2.*x.^2 - 2.*x.^3).*(x - 1)) - 4.*(x - 1).*(2.*x.^3 - 2.*x.^2 + x - 1) - y.*(24.*x.*(x - 1).*z.^3 + 4.*(x - 1).*(4.*x.^3 - 8.*x.^2 + 4.*x).*z.^2 - 4.*(x - 1).*(4.*x.^3 - 4.*x.^2 + x - 1)) + 16.*x.*z.^3.*(x - 1) + 4.*z.^2.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x)).*(8.*x.^2.*z.^2 + 12.*x.^2.*y - 8.*x.*z.^2 - 8.*x.^2 + 12.*x.*y.*z.^2 - 12.*x.^2.*y.*z.^2))./(-w).^3) .* (y>0.5); d2Fdvw = zeros ([3, size(x)]); d2Fdvw(1,:,:,:) = (((8.*x.*z.*(x - 1).*(20.*x.^3.*z.^2 - 20.*x.^3 + 2.*x.^2.*z.^3 - 20.*x.^2.*z.^2 + 6.*x.^2.*z + 40.*x.^2 - 2.*x.*z.^3).*y.^3)/5 + (8.*x.*z.*(10.*x + 3.*z).*(x - 1).*y)/5)./w.^3) .* (y<0.5) + ... (((8.*x.*(3.*y - 2).*(x - 1).*(- 6.*x.^2.*y.^2 + 8.*x.^2.*y - 2.*x.^2 + 6.*x.*y.^2 - 8.*x.*y + 2.*x).*z.^4)/5 + (8.*x.*(3.*y - 2).*(x - 1).*(- 60.*x.^3.*y.^2 + 80.*x.^3.*y - 20.*x.^3 + 60.*x.^2.*y.^2 - 80.*x.^2.*y + 20.*x.^2).*z.^3)/5 - (8.*x.*(3.*y - 2).*(x - 1).*(18.*x.^2.*y.^2 - 24.*x.^2.*y + 6.*x.^2 - 3).*z.^2)/5 + (8.*x.*(3.*y - 2).*(x - 1).*(60.*x.^3.*y.^2 - 80.*x.^3.*y + 20.*x.^3 - 120.*x.^2.*y.^2 + 160.*x.^2.*y - 40.*x.^2 + 10.*x).*z)/5)./(-w).^3) .* (y>0.5); d2Fdvw(2,:,:,:) = ((4.*x.*y.*z.*(x - 1).*(40.*x.^2.*y.^3.*z.^2 - 40.*x.^2.*y.^3 + 6.*x.^2.*y.^2.*z.^3 + 18.*x.^2.*y.^2.*z + 80.*x.^2.*y.^2 - 40.*x.*y.^3.*z.^2 - 6.*x.*y.^2.*z.^3 - 40.*y.^2 + 60.*y + 9.*z))/5./w.^3) .* (y<0.5) + ... (-((4.*x.*(x - 1).*(54.*x.^2.*y.^3 - 108.*x.^2.*y.^2 + 66.*x.^2.*y - 12.*x.^2 - 54.*x.*y.^3 + 108.*x.*y.^2 - 66.*x.*y + 12.*x).*z.^4)/5 + (4.*x.*(x - 1).*(240.*x.^2.*y.^4 - 260.*x.^2.*y.^3 - 120.*x.^2.*y.^2 + 180.*x.^2.*y - 40.*x.^2 - 240.*x.*y.^4 + 260.*x.*y.^3 + 120.*x.*y.^2 - 180.*x.*y + 40.*x).*z.^3)/5 - (4.*x.*(x - 1).*(- 162.*x.^2.*y.^3 + 324.*x.^2.*y.^2 - 198.*x.^2.*y + 36.*x.^2 + 27.*y - 18).*z.^2)/5 - (4.*x.*(x - 1).*(240.*x.^2.*y.^4 - 980.*x.^2.*y.^3 + 1320.*x.^2.*y.^2 - 700.*x.^2.*y + 120.*x.^2 + 120.*y.^3 - 120.*y.^2 + 50.*y - 20).*z)/5)./(-w).^3) .* (y>0.5); d2Fdvw(3,:,:,:) = (-(y.^3.*(8.*x.*z.*(x - 1).*(12.*x.^2 - 24.*x + 12) - 48.*x.^3.*z.^2.*(x - 1) + 8.*x.*z.^4.*(2.*x - 2.*x.^2).*(x - 1)) + y.^4.*(8.*x.*(x - 1).*(- 4.*x.^4 + 12.*x.^3 - 12.*x.^2 + 4.*x).*z.^3 + 8.*x.*(x - 1).*(4.*x.^4 - 8.*x.^3 + 4.*x.^2).*z) - 24.*x.*y.*z.^2.*(x - 1) - 8.*x.*y.^2.*z.*(x - 1).*(6.*x.^2 - 12.*x + 6))./w.^3) .* (y<0.5) + ... ((8.*z.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x) - y.*(72.*x.*(x - 1).*z.^2 + 8.*(x - 1).*(4.*x.^3 - 8.*x.^2 + 4.*x).*z) + 48.*x.*z.^2.*(x - 1) + 8.*y.^2.*z.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x))./w.^2 - (2.*(y.^2.*(4.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x).*z.^2 + 4.*(2.*x.^2 - 2.*x.^3).*(x - 1)) - 4.*(x - 1).*(2.*x.^3 - 2.*x.^2 + x - 1) - y.*(24.*x.*(x - 1).*z.^3 + 4.*(x - 1).*(4.*x.^3 - 8.*x.^2 + 4.*x).*z.^2 - 4.*(x - 1).*(4.*x.^3 - 4.*x.^2 + x - 1)) + 16.*x.*z.^3.*(x - 1) + 4.*z.^2.*(x - 1).*(2.*x.^3 - 4.*x.^2 + 2.*x)).*(- 12.*z.*x.^2.*y.^2 + 16.*z.*x.^2.*y - 4.*z.*x.^2 + 12.*z.*x.*y.^2 - 16.*z.*x.*y + 4.*z.*x))./(-w).^3) .* (y>0.5); d2Fdww = zeros ([3, size(x)]); d2Fdww(1,:,:,:) = ((32.*x.*y.^2.*(2.*x.^2.*y.^2 + 1).*(x - 1).*(5.*x + z + 10.*x.^2.*y.^2 + 2.*x.^2.*y.^2.*z))./(5.*w.^3) - (8.*x.*y.^2.*(x - 1).*(15.*x + z + 30.*x.^2.*y.^2 + 2.*x.^2.*y.^2.*z))/5./w.^2) .* (y<0.5) + ... (((8.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(36.*x.^4.*y.^4 - 96.*x.^4.*y.^3 + 88.*x.^4.*y.^2 - 32.*x.^4.*y + 4.*x.^4 - 36.*x.^3.*y.^4 + 96.*x.^3.*y.^3 - 88.*x.^3.*y.^2 + 32.*x.^3.*y - 4.*x.^3 - 6.*x.^2.*y.^2 + 8.*x.^2.*y - 2.*x.^2 + 6.*x.*y.^2 - 8.*x.*y + 2.*x).*z.^3)/5 + (8.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(540.*x.^4.*y.^4 - 1440.*x.^4.*y.^3 + 1320.*x.^4.*y.^2 - 480.*x.^4.*y + 60.*x.^4 - 540.*x.^3.*y.^4 + 1440.*x.^3.*y.^3 - 1410.*x.^3.*y.^2 + 600.*x.^3.*y - 90.*x.^3 + 90.*x.^2.*y.^2 - 120.*x.^2.*y + 30.*x.^2).*z.^2)/5 + (8.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(108.*x.^4.*y.^4 - 288.*x.^4.*y.^3 + 264.*x.^4.*y.^2 - 96.*x.^4.*y + 12.*x.^4 - 36.*x.^2.*y.^2 + 48.*x.^2.*y - 12.*x.^2 + 3).*z)/5 + (8.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(180.*x.^4.*y.^4 - 480.*x.^4.*y.^3 + 440.*x.^4.*y.^2 - 160.*x.^4.*y + 20.*x.^4 - 30.*x.^3.*y.^2 + 40.*x.^3.*y - 10.*x.^3 - 30.*x.^2.*y.^2 + 40.*x.^2.*y - 10.*x.^2 + 5.*x))/5)./(-w).^3) .* (y>0.5); d2Fdww(2,:,:,:) = ((16.*x.*y.^2.*(2.*x.^2.*y.^2 + 1).*(x - 1).*(20.*y + 3.*z + 20.*x.^2.*y.^2 - 10.*y.^2 + 6.*x.^2.*y.^2.*z))./(5.*w.^3) - (12.*x.*y.^2.*(x - 1).*(20.*y + z + 20.*x.^2.*y.^2 - 10.*y.^2 + 2.*x.^2.*y.^2.*z))/5./w.^2) .* (y<0.5) + ... (((4.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(108.*x.^4.*y.^4 - 288.*x.^4.*y.^3 + 264.*x.^4.*y.^2 - 96.*x.^4.*y + 12.*x.^4 - 108.*x.^3.*y.^4 + 288.*x.^3.*y.^3 - 264.*x.^3.*y.^2 + 96.*x.^3.*y - 12.*x.^3 - 18.*x.^2.*y.^2 + 24.*x.^2.*y - 6.*x.^2 + 18.*x.*y.^2 - 24.*x.*y + 6.*x).*z.^3)/5 + (4.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(1080.*x.^4.*y.^4 - 2880.*x.^4.*y.^3 + 2640.*x.^4.*y.^2 - 960.*x.^4.*y + 120.*x.^4 - 1080.*x.^3.*y.^4 + 2880.*x.^3.*y.^3 - 2640.*x.^3.*y.^2 + 960.*x.^3.*y - 120.*x.^3 - 180.*x.^2.*y.^4 + 240.*x.^2.*y.^3 - 150.*x.^2.*y.^2 + 120.*x.^2.*y - 30.*x.^2 + 180.*x.*y.^4 - 240.*x.*y.^3 + 150.*x.*y.^2 - 120.*x.*y + 30.*x).*z.^2)/5 + (4.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(324.*x.^4.*y.^4 - 864.*x.^4.*y.^3 + 792.*x.^4.*y.^2 - 288.*x.^4.*y + 36.*x.^4 - 108.*x.^2.*y.^2 + 144.*x.^2.*y - 36.*x.^2 + 9).*z)/5 + (4.*x.*(3.*y - 1).*(x - 1).*(y - 1).*(360.*x.^4.*y.^4 - 960.*x.^4.*y.^3 + 880.*x.^4.*y.^2 - 320.*x.^4.*y + 40.*x.^4 - 60.*x.^2.*y.^4 + 80.*x.^2.*y.^3 - 110.*x.^2.*y.^2 + 120.*x.^2.*y - 30.*x.^2 + 10.*y.^2 + 5))/5)./(-w).^3) .* (y>0.5); d2Fdww(3,:,:,:) = ((32.*x.*y.^2.*(2.*x.^2.*y.^2 + 1).*(x - 1).*(2.*y + z - 3.*x.^2.*y.^2 - 4.*x.*y + 6.*x.*y.^2 + 2.*x.^2.*y - 3.*y.^2 + 2.*x.^2.*y.^2.*z))./w.^3 - (8.*x.*y.^2.*(x - 1).*(6.*y + z - 9.*x.^2.*y.^2 - 12.*x.*y + 18.*x.*y.^2 + 6.*x.^2.*y - 9.*y.^2 + 2.*x.^2.*y.^2.*z))./w.^2) .* (y<0.5) + ... ((2.*(- 6.*x.^2.*y.^2 + 8.*x.^2.*y - 2.*x.^2 + 6.*x.*y.^2 - 8.*x.*y + 2.*x).*(2.*z - 4.*y - 4.*x + 2.*x.^2.*y.^2 + 8.*x.*y - 4.*x.*y.^2 - 4.*x.^2.*y - 4.*x.^2.*z + 2.*x.^2 + 2.*y.^2 + 16.*x.^2.*y.*z - 12.*x.^2.*y.^2.*z + 2))./w.^2 - (8.*z.^2.*(- 6.*x.^2.*y.^2 + 8.*x.^2.*y - 2.*x.^2 + 6.*x.*y.^2 - 8.*x.*y + 2.*x).^2.*(2.*z - 4.*y - 4.*x + 2.*x.^2.*y.^2 + 8.*x.*y - 4.*x.*y.^2 - 4.*x.^2.*y - 4.*x.^2.*z + 2.*x.^2 + 2.*y.^2 + 16.*x.^2.*y.*z - 12.*x.^2.*y.^2.*z + 2))./(-w).^3 - (4.*z.*(12.*x.^2.*y.^2 - 16.*x.^2.*y + 4.*x.^2 - 2).*(- 6.*x.^2.*y.^2 + 8.*x.^2.*y - 2.*x.^2 + 6.*x.*y.^2 - 8.*x.*y + 2.*x))./w.^2) .* (y>0.5); assert (F, pnt, 1e3*eps) assert (dFdu, jac{1}, 1e3*eps) assert (dFdv, jac{2}, 1e3*eps) assert (dFdw, jac{3}, 1e3*eps) assert (d2Fduu, hess{1,1}, 1e3*eps) assert (d2Fduv, hess{1,2}, 1e3*eps) assert (d2Fduw, hess{1,3}, 1e3*eps) assert (d2Fduv, hess{2,1}, 1e3*eps) assert (d2Fdvv, hess{2,2}, 1e3*eps) assert (d2Fdvw, hess{2,3}, 1e3*eps) assert (d2Fduw, hess{3,1}, 1e3*eps) assert (d2Fdvw, hess{3,2}, 1e3*eps) assert (d2Fdww, hess{3,3}, 1e3*eps) ***** test nrb = nrbextrude (nrb4surf ([0 0], [1 0], [0 1], [1 1]), [0 0 1]); nrb = nrbdegelev (nrb, [1 1 1]); nrb.coefs (4,2,2,2) = 1.1; [dnrb, dnrb2] = nrbderiv (nrb); X = linspace (0, 1, 24); Y = linspace (0, 1, 24); Z = linspace (0, 1, 24); [pnt, jac, hess] = nrbdeval (nrb, dnrb, dnrb2, {X Y Z}); [y, x, z] = meshgrid (X, Y, Z); F = zeros ([3, size(x)]); F(1,:,:,:) = (5.*x)./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5); F(2,:,:,:) = (5.*y)./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5); F(3,:,:,:) = (5.*z)./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5); dFdu = zeros ([3, size(x)]); dFdu(1,:,:,:) = ((z.*(20.*y - 20.*y.^2) - z.^2.*(20.*y - 20.*y.^2)).*x.^2 + 25)./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^2; dFdu(2,:,:,:) = (y.^2.*(5.*z.*(8.*x - 4) - 5.*z.^2.*(8.*x - 4)) - y.^3.*(5.*z.*(8.*x - 4) - 5.*z.^2.*(8.*x - 4)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdu(3,:,:,:) = (z.^2.*(5.*y.*(8.*x - 4) - 5.*y.^2.*(8.*x - 4)) - z.^3.*(5.*y.*(8.*x - 4) - 5.*y.^2.*(8.*x - 4)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdv = zeros ([3, size(x)]); dFdv(1,:,:,:) = (x.^2.*(5.*z.*(8.*y - 4) - 5.*z.^2.*(8.*y - 4)) - x.^3.*(5.*z.*(8.*y - 4) - 5.*z.^2.*(8.*y - 4)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdv(2,:,:,:) = ((z.*(20.*x - 20.*x.^2) - z.^2.*(20.*x - 20.*x.^2)).*y.^2 + 25)./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^2; dFdv(3,:,:,:) = (z.^2.*(5.*x.*(8.*y - 4) - 5.*x.^2.*(8.*y - 4)) - z.^3.*(5.*x.*(8.*y - 4) - 5.*x.^2.*(8.*y - 4)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdw = zeros ([3, size(x)]); dFdw(1,:,:,:) = (x.^2.*(y.*(40.*z - 20) - y.^2.*(40.*z - 20)) - x.^3.*(y.*(40.*z - 20) - y.^2.*(40.*z - 20)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdw(2,:,:,:) = (y.^2.*(x.*(40.*z - 20) - x.^2.*(40.*z - 20)) - y.^3.*(x.*(40.*z - 20) - x.^2.*(40.*z - 20)))./((- 4.*x.^2.*y.^2 + 4.*x.^2.*y + 4.*x.*y.^2 - 4.*x.*y).*z.^2 + (4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y).*z + 5).^2; dFdw(3,:,:,:) = ((y.*(20.*x - 20.*x.^2) - y.^2.*(20.*x - 20.*x.^2)).*z.^2 + 25)./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^2; d2Fduu = zeros ([3, size(x)]); d2Fduu(1,:,:,:) = (40.*y.*z.*(y - 1).*(z - 1).*(4.*x.^3.*y.^2.*z.^2 - 4.*x.^3.*y.^2.*z - 4.*x.^3.*y.*z.^2 + 4.*x.^3.*y.*z + 15.*x - 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduu(2,:,:,:) = (40.*y.^2.*z.*(y - 1).*(z - 1).*(4.*y.^2.*z.^2 - 4.*y.^2.*z - 4.*y.*z.^2 + 4.*y.*z + 5) - 40.*x.*y.^2.*z.*(y - 1).*(z - 1).*(12.*y.^2.*z.^2 - 12.*y.^2.*z - 12.*y.*z.^2 + 12.*y.*z) + 40.*x.^2.*y.^2.*z.*(y - 1).*(z - 1).*(12.*y.^2.*z.^2 - 12.*y.^2.*z - 12.*y.*z.^2 + 12.*y.*z))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduu(3,:,:,:) = (40.*y.*z.^2.*(y - 1).*(z - 1).*(4.*y.^2.*z.^2 - 4.*y.^2.*z - 4.*y.*z.^2 + 4.*y.*z + 5) - 40.*x.*y.*z.^2.*(y - 1).*(z - 1).*(12.*y.^2.*z.^2 - 12.*y.^2.*z - 12.*y.*z.^2 + 12.*y.*z) + 40.*x.^2.*y.*z.^2.*(y - 1).*(z - 1).*(12.*y.^2.*z.^2 - 12.*y.^2.*z - 12.*y.*z.^2 + 12.*y.*z))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduv = zeros ([3, size(x)]); d2Fduv(1,:,:,:) = (20.*x.*z.*(2.*y - 1).*(z - 1).*(4.*x.^3.*y.^2.*z.^2 - 4.*x.^3.*y.^2.*z - 4.*x.^3.*y.*z.^2 + 4.*x.^3.*y.*z - 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 15.*x - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduv(2,:,:,:) = (20.*y.*z.*(2.*x - 1).*(z - 1).*(4.*x.^2.*y.^3.*z.^2 - 4.*x.^2.*y.^3.*z - 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z - 4.*x.*y.^3.*z.^2 + 4.*x.*y.^3.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z + 15.*y - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduv(3,:,:,:) = (20.*z.^2.*(2.*x - 1).*(2.*y - 1).*(z - 1).*(4.*x.^2.*y.^2.*z.^2 - 4.*x.^2.*y.^2.*z - 4.*x.^2.*y.*z.^2 + 4.*x.^2.*y.*z - 4.*x.*y.^2.*z.^2 + 4.*x.*y.^2.*z + 4.*x.*y.*z.^2 - 4.*x.*y.*z + 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduw = zeros ([3, size(x)]); d2Fduw(1,:,:,:) = (20.*x.*y.*(2.*z - 1).*(y - 1).*(4.*x.^3.*y.^2.*z.^2 - 4.*x.^3.*y.^2.*z - 4.*x.^3.*y.*z.^2 + 4.*x.^3.*y.*z - 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 15.*x - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduw(2,:,:,:) = (20.*y.^2.*(2.*x - 1).*(2.*z - 1).*(y - 1).*(4.*x.^2.*y.^2.*z.^2 - 4.*x.^2.*y.^2.*z - 4.*x.^2.*y.*z.^2 + 4.*x.^2.*y.*z - 4.*x.*y.^2.*z.^2 + 4.*x.*y.^2.*z + 4.*x.*y.*z.^2 - 4.*x.*y.*z + 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fduw(3,:,:,:) = (20.*y.*z.*(2.*x - 1).*(y - 1).*(4.*x.^2.*y.^2.*z.^3 - 4.*x.^2.*y.^2.*z.^2 - 4.*x.^2.*y.*z.^3 + 4.*x.^2.*y.*z.^2 - 4.*x.*y.^2.*z.^3 + 4.*x.*y.^2.*z.^2 + 4.*x.*y.*z.^3 - 4.*x.*y.*z.^2 + 15.*z - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvv = zeros ([3, size(x)]); d2Fdvv(1,:,:,:) = (40.*x.^2.*z.*(x - 1).*(z - 1).*(4.*x.^2.*z.^2 - 4.*x.^2.*z - 4.*x.*z.^2 + 4.*x.*z + 5) + 40.*x.^2.*y.^2.*z.*(x - 1).*(z - 1).*(12.*x.^2.*z.^2 - 12.*x.^2.*z - 12.*x.*z.^2 + 12.*x.*z) - 40.*x.^2.*y.*z.*(x - 1).*(z - 1).*(12.*x.^2.*z.^2 - 12.*x.^2.*z - 12.*x.*z.^2 + 12.*x.*z))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvv(2,:,:,:) = (40.*x.*z.*(x - 1).*(z - 1).*(4.*x.^2.*y.^3.*z.^2 - 4.*x.^2.*y.^3.*z - 4.*x.*y.^3.*z.^2 + 4.*x.*y.^3.*z + 15.*y - 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvv(3,:,:,:) = (40.*x.*z.^2.*(x - 1).*(z - 1).*(4.*x.^2.*z.^2 - 4.*x.^2.*z - 4.*x.*z.^2 + 4.*x.*z + 5) + 40.*x.*y.^2.*z.^2.*(x - 1).*(z - 1).*(12.*x.^2.*z.^2 - 12.*x.^2.*z - 12.*x.*z.^2 + 12.*x.*z) - 40.*x.*y.*z.^2.*(x - 1).*(z - 1).*(12.*x.^2.*z.^2 - 12.*x.^2.*z - 12.*x.*z.^2 + 12.*x.*z))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvw = zeros ([3, size(x)]); d2Fdvw(1,:,:,:) = (20.*x.^2.*(2.*y - 1).*(2.*z - 1).*(x - 1).*(4.*x.^2.*y.^2.*z.^2 - 4.*x.^2.*y.^2.*z - 4.*x.^2.*y.*z.^2 + 4.*x.^2.*y.*z - 4.*x.*y.^2.*z.^2 + 4.*x.*y.^2.*z + 4.*x.*y.*z.^2 - 4.*x.*y.*z + 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvw(2,:,:,:) = (20.*x.*y.*(2.*z - 1).*(x - 1).*(4.*x.^2.*y.^3.*z.^2 - 4.*x.^2.*y.^3.*z - 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z - 4.*x.*y.^3.*z.^2 + 4.*x.*y.^3.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z + 15.*y - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdvw(3,:,:,:) = (20.*x.*z.*(2.*y - 1).*(x - 1).*(4.*x.^2.*y.^2.*z.^3 - 4.*x.^2.*y.^2.*z.^2 - 4.*x.^2.*y.*z.^3 + 4.*x.^2.*y.*z.^2 - 4.*x.*y.^2.*z.^3 + 4.*x.*y.^2.*z.^2 + 4.*x.*y.*z.^3 - 4.*x.*y.*z.^2 + 15.*z - 10))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdww = zeros ([3, size(x)]); d2Fdww(1,:,:,:) = (40.*x.^2.*y.*(x - 1).*(y - 1).*(4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y + 5) + 40.*x.^2.*y.*z.^2.*(x - 1).*(y - 1).*(12.*x.^2.*y.^2 - 12.*x.^2.*y - 12.*x.*y.^2 + 12.*x.*y) - 40.*x.^2.*y.*z.*(x - 1).*(y - 1).*(12.*x.^2.*y.^2 - 12.*x.^2.*y - 12.*x.*y.^2 + 12.*x.*y))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdww(2,:,:,:) = (40.*x.*y.^2.*(x - 1).*(y - 1).*(4.*x.^2.*y.^2 - 4.*x.^2.*y - 4.*x.*y.^2 + 4.*x.*y + 5) + 40.*x.*y.^2.*z.^2.*(x - 1).*(y - 1).*(12.*x.^2.*y.^2 - 12.*x.^2.*y - 12.*x.*y.^2 + 12.*x.*y) - 40.*x.*y.^2.*z.*(x - 1).*(y - 1).*(12.*x.^2.*y.^2 - 12.*x.^2.*y - 12.*x.*y.^2 + 12.*x.*y))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; d2Fdww(3,:,:,:) = (40.*x.*y.*(x - 1).*(y - 1).*(4.*x.^2.*y.^2.*z.^3 - 4.*x.^2.*y.*z.^3 - 4.*x.*y.^2.*z.^3 + 4.*x.*y.*z.^3 + 15.*z - 5))./(- 4.*x.^2.*y.^2.*z.^2 + 4.*x.^2.*y.^2.*z + 4.*x.^2.*y.*z.^2 - 4.*x.^2.*y.*z + 4.*x.*y.^2.*z.^2 - 4.*x.*y.^2.*z - 4.*x.*y.*z.^2 + 4.*x.*y.*z + 5).^3; 8 tests, 8 passed, 0 known failure, 0 skipped [inst/curvederivcpts.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/curvederivcpts.m ***** test line = nrbmak([0.0 1.5; 0.0 3.0],[0.0 0.0 1.0 1.0]); pk = curvederivcpts (line.number-1, line.order-1, line.knots,... line.coefs(1,:), 2); assert (pk, [0 3/2; 3/2 0], 100*eps); 1 test, 1 passed, 0 known failure, 0 skipped [inst/nrbunclamp.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbunclamp.m ***** demo crv = nrbcirc (1,[],0,2*pi/3); crv = nrbdegelev (crv, 2); figure nrbctrlplot (crv); hold on nrbctrlplot (nrbtform (nrbunclamp (crv, 1), vectrans([-0.4, -0.4]))); nrbctrlplot (nrbtform (nrbunclamp (crv, 2), vectrans([-0.8, -0.8]))); nrbctrlplot (nrbtform (nrbunclamp (crv, 3), vectrans([-1.6, -1.6]))); title ('Original curve and unclamped versions') ***** test crv = nrbdegelev (nrbtestcrv,2); x = linspace (0, 1, 100); F = nrbeval (crv, x); ucrv = nrbunclamp (crv, 0); assert (F, nrbeval(ucrv, x)); ucrv = nrbunclamp (crv, 1); assert (F, nrbeval(ucrv, x), 1e-14); ucrv = nrbunclamp (crv, 2); assert (F, nrbeval(ucrv, x), 1e-14); ucrv = nrbunclamp (crv, 3); assert (F, nrbeval(ucrv, x), 1e-14); 1 test, 1 passed, 0 known failure, 0 skipped [inst/surfderiveval.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/surfderiveval.m ***** shared srf ***** test k = [0 0 0 1 1 1]; c = [0 1/2 1]; [coef(2,:,:), coef(1,:,:)] = meshgrid (c, c); srf = nrbmak (coef, {k, k}); skl = surfderiveval (srf.number(1)-1, ... srf.order(1)-1, ... srf.knots{1}, ... srf.number(2)-1, ... srf.order(2)-1, ... srf.knots{2},... squeeze(srf.coefs(1,:,:)), .5, .5, 1) ; assert (skl, [.5 0; 1 0]) ***** test srf = nrbkntins (srf, {[], rand(1,2)}); skl = surfderiveval (srf.number(1)-1,... srf.order(1)-1, ... srf.knots{1},... srf.number(2)-1,... srf.order(2)-1, ... srf.knots{2},... squeeze(srf.coefs(1,:,:)), .5, .5, 1) ; assert (skl, [.5 0; 1 0], 100*eps) 2 tests, 2 passed, 0 known failure, 0 skipped [inst/aveknt.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/aveknt.m ***** test knt = [0 0 0 0.5 1 1 1]; pts = aveknt (knt, 3); assert (pts - [0 1/4 3/4 1] < 1e-14) ***** test knt = {[0 0 0 0.5 1 1 1] [0 0 0 0 1/3 2/3 1 1 1 1]}; pts = aveknt (knt, [3 4]); assert (pts{1} - [0 1/4 3/4 1] < 1e-14); assert (pts{2} - [0 1/9 1/3 2/3 8/9 1] < 1e-14); ***** test nrb = nrb4surf([0 0], [1 0], [0 1], [1 1]); nrb = nrbkntins (nrbdegelev (nrb, [1 2]), {[1/2] [1/3 2/3]}); pts = aveknt (nrb); assert (pts{1} - [0 1/4 3/4 1] < 1e-14); assert (pts{2} - [0 1/9 1/3 2/3 8/9 1] < 1e-14); 3 tests, 3 passed, 0 known failure, 0 skipped [inst/nrbtransp.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbtransp.m ***** demo srf = nrb4surf([0 0 0], [1 0 1], [0 1 1], [1 1 2]); nrbplot(srf,[20 5]); title('Plane surface and its transposed (translated)') hold on srf.coefs(3,:,:) = srf.coefs(3,:,:) + 10; srf = nrbtransp(srf); nrbplot(srf,[20 5]); hold off ***** test srf = nrbrevolve(nrbline([1 0],[2 0]), [0 0 0], [0 0 1], pi/2); srft = nrbtransp(srf); assert (srf.number, fliplr(srft.number)); assert (srf.order, fliplr(srft.order)); assert (srf.knots, fliplr(srft.knots)); assert (srf.coefs, permute(srft.coefs, [1 3 2])); 1 test, 1 passed, 0 known failure, 0 skipped [inst/nrbeval.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbeval.m ***** demo srf = nrbtestsrf; p = nrbeval(srf,{linspace(0.0,1.0,20) linspace(0.0,1.0,20)}); h = surf(squeeze(p(1,:,:)),squeeze(p(2,:,:)),squeeze(p(3,:,:))); title('Test surface.'); hold off ***** test knots{1} = [0 0 0 1 1 1]; knots{2} = [0 0 0 .5 1 1 1]; knots{3} = [0 0 0 0 1 1 1 1]; cx = [0 0.5 1]; nx = length(cx); cy = [0 0.25 0.75 1]; ny = length(cy); cz = [0 1/3 2/3 1]; nz = length(cz); coefs(1,:,:,:) = repmat(reshape(cx,nx,1,1),[1 ny nz]); coefs(2,:,:,:) = repmat(reshape(cy,1,ny,1),[nx 1 nz]); coefs(3,:,:,:) = repmat(reshape(cz,1,1,nz),[nx ny 1]); coefs(4,:,:,:) = 1; nurbs = nrbmak(coefs, knots); x = rand(5,1); y = rand(5,1); z = rand(5,1); tt = [x y z]'; points = nrbeval(nurbs,tt); assert(points,tt,1e-10) ***** test knots{1} = [0 0 0 1 1 1]; knots{2} = [0 0 0 0 1 1 1 1]; knots{3} = [0 0 1 1]; cx = [0 0 1]; nx = length(cx); cy = [0 0 0 1]; ny = length(cy); cz = [0 1]; nz = length(cz); coefs(1,:,:,:) = repmat(reshape(cx,nx,1,1),[1 ny nz]); coefs(2,:,:,:) = repmat(reshape(cy,1,ny,1),[nx 1 nz]); coefs(3,:,:,:) = repmat(reshape(cz,1,1,nz),[nx ny 1]); coefs(4,:,:,:) = 1; nurbs = nrbmak(coefs, knots); x = rand(5,1); y = rand(5,1); z = rand(5,1); tt = [x y z]'; points = nrbeval(nurbs,tt); assert(points,[x.^2 y.^3 z]',1e-10); ***** test knots{1} = [0 0 0 1 1 1]; knots{2} = [0 0 0 0 1 1 1 1]; knots{3} = [0 0 1 1]; cx = [0 0 1]; nx = length(cx); cy = [0 0 0 1]; ny = length(cy); cz = [0 1]; nz = length(cz); coefs(1,:,:,:) = repmat(reshape(cx,nx,1,1),[1 ny nz]); coefs(2,:,:,:) = repmat(reshape(cy,1,ny,1),[nx 1 nz]); coefs(3,:,:,:) = repmat(reshape(cz,1,1,nz),[nx ny 1]); coefs(4,:,:,:) = 1; coefs = coefs([2 1 3 4],:,:,:); nurbs = nrbmak(coefs, knots); x = rand(5,1); y = rand(5,1); z = rand(5,1); tt = [x y z]'; points = nrbeval(nurbs,tt); [y.^3 x.^2 z]'; assert(points,[y.^3 x.^2 z]',1e-10); 3 tests, 3 passed, 0 known failure, 0 skipped [inst/nrbmeasure.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbmeasure.m ***** test c = nrbcirc (1, [0 0], 0, pi/3); l = nrbmeasure(c, 0, 1, 1e-7); assert (l, pi/3, 1e-7) ***** test c = nrbcirc (1, [0 0], 0, pi/2); s = zeros (1, 100); e = linspace (0, 1, 100); for ii = 1:100 l(ii) = nrbmeasure (c, s(ii), e(ii), 1e-7); endfor xx = nrbeval (c, e); theta = atan2 (xx(2,:), xx(1,:)); assert (l, theta, 1e-7) ***** test c = nrbcirc (1, [0 0], 0, pi/2); s = 0; e = linspace (0, 1, 100); for ii = 1:100 l(ii) = nrbmeasure (c, s, e(ii), 1e-7); endfor l2 = nrbmeasure (c, s, e, 1e-7); assert (l, l2, eps) 3 tests, 3 passed, 0 known failure, 0 skipped [inst/nrbeval_der_p.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbeval_der_p.m ***** test %% 1D nrb = nrbkntins (nrbcirc (1, [0 0], 0, pi/2), .5); u = 0:.1:.9; index = 1:nrb.number; e = zeros (numel (u), numel (index), 1); for jj = 1:numel (index) deltap = .1 * rand (3, 1); nrb2 = nrbmodp (nrb, deltap, index(jj)); der_ex = nrbeval_der_p (nrb, index(jj), u); p2 = nrbeval (nrb2, u); p1 = nrbeval (nrb, u); der_fd = (p2 - p1) ./ deltap; e(:,jj) = sqrt (sum ((repmat (der_ex, 3, 1) - der_fd).^2, 1)); end assert (max(e(:)) < 1.e-8); ***** test %% 2D crv = nrbline([1 0], [2 0]); nrb = nrbtransp (nrbrevolve (crv, [], [0 0 1], pi/2)); new_knots = linspace (1/9, 8/9, 8); nrb = nrbkntins (nrb, {new_knots, new_knots}); u = 0:.1:.9; v = u; e = zeros (nrb.number(1) * nrb.number(2), numel (u), numel (v)); for index = 1:prod(nrb.number) deltap = .1 * rand (3, 1); nrb2 = nrbmodp (nrb, deltap, index); der_ex = nrbeval_der_p (nrb, index, {u v}); p2 = nrbeval (nrb2, {u v}); p1 = nrbeval (nrb, {u v}); der_fd = (p2 - p1) ./ deltap; der_ex = reshape (repmat (der_ex, 3, 1), size(der_fd)); e(index,:,:) = sqrt (sum ((der_ex - der_fd).^2, 1)); end assert (max(e(:)) < 1.e-8) ***** test %% 3D crv = nrbline([1 0], [2 0]); nrb = nrbtransp (nrbrevolve (crv, [], [0 0 1], pi/2)); nrb = nrbextrude (nrb, [0 0 1]); u = 0:.1:.9; v = u; w = u; e = zeros (nrb.number(1) * nrb.number(2) * nrb.number(3), numel(u), numel(v), numel(w)); for index = 1:prod(nrb.number) deltap = .1 * rand (3, 1); nrb2 = nrbmodp (nrb, deltap, index); der_ex = nrbeval_der_p (nrb, index, {u v w}); p2 = nrbeval (nrb2, {u v w}); p1 = nrbeval (nrb, {u v w}); der_fd = (p2 - p1) ./ deltap; der_ex = reshape (repmat (der_ex, 3, 1), size (der_fd)); e(index,:,:,:) = sqrt (sum ((der_ex - der_fd).^2, 1)); end assert (max (e(:)) < 1.e-8); 3 tests, 3 passed, 0 known failure, 0 skipped [inst/nrbeval_der_w.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbeval_der_w.m ***** test % 1D nrb = nrbkntins (nrbcirc (1, [0 0], 0, pi/2), .5); u = linspace (0, 1, 11); delta_w = .01; n = nrb.number; der_ex = zeros (3, numel (u), n); der_fd = zeros (3, numel (u), n); for iw = 1:n new_w1 = nrb.coefs (4, iw) + delta_w; new_w2 = nrb.coefs (4, iw) - delta_w; nrb1 = nrbmodw (nrb, new_w1, iw); nrb2 = nrbmodw (nrb, new_w2, iw); der_ex(:,:,iw) = nrbeval_der_w (nrb, iw, u); p2 = nrbeval (nrb2, u); p1 = nrbeval (nrb1, u); der_fd(:,:,iw) = -(p2 - p1) ./ (2*delta_w); end error = max (abs (der_ex(:) - der_fd(:))); assert (error < 1.e-4) ***** test %2D crv = nrbline([1 0], [2 0]); nrb = nrbtransp (nrbrevolve (crv, [], [0 0 1], pi/2)); new_knots = linspace (1/9, 8/9, 8); nrb = nrbkntins (nrb, {new_knots, new_knots}); u = linspace (0, 1, 5); v = u; delta_w = .01; n = nrb.number(1) * nrb.number(2); der_ex = zeros (3, numel(u)* numel(v), n); der_fd = zeros (3, numel(u)* numel(v), n); for iw = 1:prod(nrb.number) new_w1 = nrb.coefs (4, iw) + delta_w; new_w2 = nrb.coefs (4, iw) - delta_w; nrb1 = nrbmodw (nrb, new_w1, iw); nrb2 = nrbmodw (nrb, new_w2, iw); der_ex(:,:,iw) = nrbeval_der_w (nrb, iw, {u v}); p2 = nrbeval (nrb2, {u v}); p1 = nrbeval (nrb1, {u v}); der_fd(:,:,iw) = reshape (-(p2 - p1) ./ (2*delta_w), 3, []); end error = max (abs (der_ex(:) - der_fd(:))); assert (error < 1.e-5) ***** test % 3D crv = nrbline([1 0], [2 0]); nrb = nrbtransp (nrbrevolve (crv, [], [0 0 1], pi/2)); nrb = nrbextrude (nrb, [0 0 1]); u = 0:.33:.99; v = 0:.1:.9; w = [.25 .5 .75]; delta_w = .01; n = nrb.number(1) * nrb.number(2) * nrb.number(3); der_ex = zeros (3, numel(u)*numel(v)*numel(w), n); der_fd = zeros (3, numel(u)*numel(v)*numel(w), n); for iw = 1:prod(nrb.number) new_w1 = nrb.coefs (4, iw) + delta_w; new_w2 = nrb.coefs (4, iw) - delta_w; nrb1 = nrbmodw (nrb, new_w1, iw); nrb2 = nrbmodw (nrb, new_w2, iw); der_ex(:,:,iw) = nrbeval_der_w (nrb, iw, {u v w}); p2 = nrbeval (nrb2, {u v w}); p1 = nrbeval (nrb1, {u v w}); der_fd(:,:,iw) = reshape (-(p2 - p1) ./ (2*delta_w), 3, []); end error = max (max (squeeze (max (abs (der_ex - der_fd))))); assert (error < 1.e-4) 3 tests, 3 passed, 0 known failure, 0 skipped [inst/basisfun.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/basisfun.m ***** test n = 3; U = [0 0 0 1/2 1 1 1]; p = 2; u = linspace (0, 1, 10); s = findspan (n, p, u, U); Bref = [1.00000 0.00000 0.00000 0.60494 0.37037 0.02469 0.30864 0.59259 0.09877 0.11111 0.66667 0.22222 0.01235 0.59259 0.39506 0.39506 0.59259 0.01235 0.22222 0.66667 0.11111 0.09877 0.59259 0.30864 0.02469 0.37037 0.60494 0.00000 0.00000 1.00000]; B = basisfun (s, u, p, U); assert (B, Bref, 1e-5); 1 test, 1 passed, 0 known failure, 0 skipped [inst/nrbpermute.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbpermute.m ***** demo vol = nrbrevolve (nrb4surf ([1 0], [2 0], [1 1], [2 1]), [0 0 0], [0 1 0], pi/8); nrbplot(vol,[5 10 20]); title('NURBS volume and the same after reordering the directions') hold on vol.coefs(1,:,:) = vol.coefs(1,:,:) + 2; vol = nrbpermute(vol,[2 3 1]); nrbplot(vol,[5 10 20]); hold off ***** test vol = nrbrevolve (nrb4surf ([1 0], [2 0], [1 1], [2 1]), [0 0 0], [0 1 0], pi/8); perm1 = [1 3 2]; perm2 = [2 1 3]; vol2 = nrbpermute (vol, perm1); vol3 = nrbpermute (vol, perm2); assert (vol.number(perm1), vol2.number) assert (vol.order(perm1), vol2.order) assert ({vol.knots{perm1}}, vol2.knots) assert (permute(vol.coefs, [1, perm1+1]), vol2.coefs) assert (vol.number(perm2), vol3.number) assert (vol.order(perm2), vol3.order) assert ({vol.knots{perm2}}, vol3.knots) assert (permute(vol.coefs, [1, perm2+1]), vol3.coefs) 1 test, 1 passed, 0 known failure, 0 skipped [inst/nrbbasisfun.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/nrbbasisfun.m ***** demo U = [0 0 0 0 1 1 1 1]; x = [0 1/3 2/3 1] ; y = [0 0 0 0]; w = [1 1 1 1]; nrb = nrbmak ([x;y;y;w], U); u = linspace(0, 1, 30); B = nrbbasisfun (u, nrb); xplot = sum(bsxfun(@(x,y) x.*y, B, x),2); plot(xplot, B) title('Cubic Bernstein polynomials') hold off ***** test U = [0 0 0 0 1 1 1 1]; x = [0 1/3 2/3 1] ; y = [0 0 0 0]; w = rand(1,4); nrb = nrbmak ([x;y;y;w], U); u = linspace(0, 1, 30); B = nrbbasisfun (u, nrb); xplot = sum(bsxfun(@(x,y) x.*y, B, x),2); yy = y; yy(1) = 1; nrb2 = nrbmak ([x.*w;yy;y;w], U); aux = nrbeval(nrb2,u); %figure, plot(xplot, B(:,1), aux(1,:).', w(1)*aux(2,:).') assert(B(:,1), w(1)*aux(2,:).', 1e-6) yy = y; yy(2) = 1; nrb2 = nrbmak ([x.*w;yy;y;w], U); aux = nrbeval(nrb2, u); %figure, plot(xplot, B(:,2), aux(1,:).', w(2)*aux(2,:).') assert(B(:,2), w(2)*aux(2,:).', 1e-6) yy = y; yy(3) = 1; nrb2 = nrbmak ([x.*w;yy;y;w], U); aux = nrbeval(nrb2,u); %figure, plot(xplot, B(:,3), aux(1,:).', w(3)*aux(2,:).') assert(B(:,3), w(3)*aux(2,:).', 1e-6) yy = y; yy(4) = 1; nrb2 = nrbmak ([x.*w;yy;y;w], U); aux = nrbeval(nrb2,u); %figure, plot(xplot, B(:,4), aux(1,:).', w(4)*aux(2,:).') assert(B(:,4), w(4)*aux(2,:).', 1e-6) ***** test p = 2; q = 3; m = 4; n = 5; Lx = 1; Ly = 1; nrb = nrb4surf ([0 0], [1 0], [0 1], [1 1]); nrb = nrbdegelev (nrb, [p-1, q-1]); aux1 = linspace(0,1,m); aux2 = linspace(0,1,n); nrb = nrbkntins (nrb, {aux1(2:end-1), aux2(2:end-1)}); u = rand (1, 30); v = rand (1, 10); u = u - min (u); u = u / max (u); v = v - min (v); v = v / max (v); [B, N] = nrbbasisfun ({u, v}, nrb); assert (sum(B, 2), ones(300, 1), 1e-6) assert (all (all (B<=1)), true) assert (all (all (B>=0)), true) assert (all (all (N>0)), true) assert (all (all (N <= prod (nrb.number))), true) assert (max (max (N)),prod (nrb.number)) assert (min (min (N)),1) ***** test p1 = 2; p2 = 3; p3 = 2; n1 = 4; n2 = 5; n3 = 4; Lx = 1; Ly = 1; Lz = 1; crv = nrbline([1 0], [2 0]); nrb = nrbtransp (nrbrevolve (crv, [], [0 0 1], pi/2)); nrb = nrbextrude (nrb, [0 0 1]); nrb = nrbdegelev (nrb, [p1-1, p2-2, p3-1]); aux1 = linspace(0,1,n1); aux2 = linspace(0,1,n2); aux3 = linspace(0,1,n3); nrb = nrbkntins (nrb, {aux1(2:end-1), aux2(2:end-1), aux3(2:end-1)}); u = rand (1, 12); v = rand (1, 10); w = rand (1, 15); u = u - min (u); u = u / max (u); v = v - min (v); v = v / max (v); w = w - min (w); w = w / max (w); [B, N] = nrbbasisfun ({u, v, w}, nrb); assert (all(sum(B, 2) - ones(numel(u)*numel(v)*numel(w),1) < 1e-6)) assert (all (all (B <= 1)) == true) assert (all (all (B >= 0)) == true) assert (all (all (N > 0)) == true) assert (all (all (N <= prod (nrb.number))) == true) assert (max (max (N)) == prod (nrb.number)) assert (min (min (N))== 1) 3 tests, 3 passed, 0 known failure, 0 skipped [inst/tbasisfun.m] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/inst/tbasisfun.m ***** demo U = {[0 0 1/2 1 1], [0 0 0 1 1]}; p = [3, 3]; [X, Y] = meshgrid (linspace(0, 1, 30)); u = [X(:), Y(:)]'; N = tbasisfun (u, p, U); surf (X, Y, reshape (N, size(X))) title('Basis function associated to a local knot vector') hold off ***** test U = [0 1/2 1]; p = 1; u = [0.3 0.4 0.6 0.7]; [N, Nder] = tbasisfun (u, p, U); assert (N, [0.6 0.8 0.8 0.6], 1e-12); assert (Nder, [2 2 -2 -2], 1e-12); ***** test U = {[0 1/2 1] [0 1/2 1]}; p = [1 1]; u = [0.3 0.4 0.6 0.7; 0.3 0.4 0.6 0.7]; [N, Nder] = tbasisfun (u, p, U); assert (N, [0.36 0.64 0.64 0.36], 1e-12); assert (Nder, [1.2 1.6 -1.6 -1.2; 1.2 1.6 -1.6 -1.2], 1e-12); ***** test U = {[0 1/2 1] [0 1/2 1] [0 1/2 1]}; p = [1 1 1]; u = [0.4 0.4 0.6 0.6; 0.4 0.4 0.6 0.6; 0.4 0.6 0.4 0.6]; [N, Nder] = tbasisfun (u, p, U); assert (N, [0.512 0.512 0.512 0.512], 1e-12); assert (Nder, [1.28 1.28 -1.28 -1.28; 1.28 1.28 -1.28 -1.28; 1.28 -1.28 1.28 -1.28], 1e-12); 3 tests, 3 passed, 0 known failure, 0 skipped Checking C++ files ... [src/surfderivcpts.cc] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/src/surfderivcpts.cc ***** test plane = nrbdegelev(nrb4surf([0 0], [0 1], [1 0], [1 1]), [1, 1]); pkl = surfderivcpts (plane.number(1)-1, plane.order(1)-1, plane.knots{1}, plane.number(2)-1, plane.order(2)-1, plane.knots{2}, squeeze (plane.coefs(1,:,:)), 2); pkl2 = [ 0 0 0 1 0 0 0 0 0 0 0 0 1 0 ... 0 0 0 0 0 0 0 1 0 0 0 0 0 0.5 0 ... 0 1 0 0 0 0 0 0.5 0 0 1 0 0 0 0 ... 0 0.5 0 0 1 0 0 0 0 0 1 0 0 0 0 ... 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 ... 0 0 0 0 0 0 0]'; assert (pkl(:),pkl2); 1 test, 1 passed, 0 known failure, 0 skipped [src/tbasisfun.cc] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/src/tbasisfun.cc ***** demo U = {[0 0 1/2 1 1], [0 0 0 1 1]}; p = [3, 3]; [X, Y] = meshgrid (linspace(0, 1, 30)); u = [X(:), Y(:)]'; N = tbasisfun (u, p, U); surf (X, Y, reshape (N, size(X))) title('Basis function associated to a local knot vector') hold off ***** test U = [0 1/2 1]; p = 1; u = [0.3 0.4 0.6 0.7]; [N, Nder] = tbasisfun (u, p, U); assert (N, [0.6 0.8 0.8 0.6], 1e-12); assert (Nder, [2 2 -2 -2], 1e-12); ***** test U = {[0 1/2 1] [0 1/2 1]}; p = [1 1]; u = [0.3 0.4 0.6 0.7; 0.3 0.4 0.6 0.7]; [N, Nder] = tbasisfun (u, p, U); assert (N, [0.36 0.64 0.64 0.36], 1e-12); assert (Nder, [1.2 1.6 -1.6 -1.2; 1.2 1.6 -1.6 -1.2], 1e-12); ***** test U = {[0 1/2 1] [0 1/2 1] [0 1/2 1]}; p = [1 1 1]; u = [0.4 0.4 0.6 0.6; 0.4 0.4 0.6 0.6; 0.4 0.6 0.4 0.6]; [N, Nder] = tbasisfun (u, p, U); assert (N, [0.512 0.512 0.512 0.512], 1e-12); assert (Nder, [1.28 1.28 -1.28 -1.28; 1.28 1.28 -1.28 -1.28; 1.28 -1.28 1.28 -1.28], 1e-12); 3 tests, 3 passed, 0 known failure, 0 skipped [src/nrbsurfderiveval.cc] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/src/nrbsurfderiveval.cc ***** test k = [0 0 1 1]; c = [0 1]; [coef(2,:,:), coef(1,:,:)] = meshgrid (c, c); coef(3,:,:) = coef(1,:,:); srf = nrbmak (coef, {k, k}); [u, v] = meshgrid (linspace(0,1,11)); uv = [u(:)';v(:)']; skl = nrbsurfderiveval (srf, uv, 0); assert (squeeze (skl (1:2,1,1,:)), nrbeval (srf, uv)(1:2,:), 1e3*eps) ***** test k = [0 0 1 1]; c = [0 1]; [coef(2,:,:), coef(1,:,:)] = meshgrid (c, c); coef(3,:,:) = coef(1,:,:); srf = nrbmak (coef, {k, k}); srf = nrbkntins (srf, {[], rand(2,1)}); [u, v] = meshgrid (linspace(0,1,11)); uv = [u(:)';v(:)']; skl = nrbsurfderiveval (srf, uv, 0); assert (squeeze (skl (1:2,1,1,:)), nrbeval (srf, uv)(1:2,:), 1e3*eps) ***** shared srf, uv ***** test k = [0 0 0 1 1 1]; c = [0 1/2 1]; [coef(1,:,:), coef(2,:,:)] = meshgrid (c, c); coef(3,:,:) = coef(1,:,:); srf = nrbmak (coef, {k, k}); ders= nrbderiv (srf); [u, v] = meshgrid (linspace(0,1,11)); uv = [u(:)';v(:)']; skl = nrbsurfderiveval (srf, uv, 1); [fun, der] = nrbdeval (srf, ders, uv); assert (squeeze (skl (1:2,1,1,:)), fun(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,2,1,:)), der{1}(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,1,2,:)), der{2}(1:2,:), 1e3*eps) ***** test srf = nrbdegelev (srf, [3, 1]); ders= nrbderiv (srf); [fun, der] = nrbdeval (srf, ders, uv); skl = nrbsurfderiveval (srf, uv, 1); assert (squeeze (skl (1:2,1,1,:)), fun(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,2,1,:)), der{1}(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,1,2,:)), der{2}(1:2,:), 1e3*eps) ***** shared uv ***** test k = [0 0 0 1 1 1]; c = [0 1/2 1]; [coef(2,:,:), coef(1,:,:)] = meshgrid (c, c); coef(3,:,:) = coef(1,:,:); srf = nrbmak (coef, {k, k}); ders= nrbderiv (srf); [u, v] = meshgrid (linspace(0,1,11)); uv = [u(:)';v(:)']; skl = nrbsurfderiveval (srf, uv, 1); [fun, der] = nrbdeval (srf, ders, uv); assert (squeeze (skl (1:2,1,1,:)), fun(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,2,1,:)), der{1}(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,1,2,:)), der{2}(1:2,:), 1e3*eps) ***** test p = q = 3; mcp = 5; ncp = 5; Lx = Ly = 10*rand(1); srf = nrbdegelev (nrb4surf ([0 0], [Lx, 0], [0 Ly], [Lx Ly]), [p-1, q-1]); %%srf = nrbkntins (srf, {linspace(0,1,mcp-p+2)(2:end-1), linspace(0,1,ncp-q+2)(2:end-1)}); %%srf.coefs = permute (srf.coefs, [1 3 2]); ders= nrbderiv (srf); [fun, der] = nrbdeval (srf, ders, uv); skl = nrbsurfderiveval (srf, uv, 1); assert (squeeze (skl (1:2,1,1,:)), fun(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,2,1,:)), der{1}(1:2,:), 1e3*eps) assert (squeeze (skl (1:2,1,2,:)), der{2}(1:2,:), 1e3*eps) ***** shared srf, uv, P, dPdx, d2Pdx2, c1, c2 ***** test [u, v] = meshgrid (linspace(0,1,10)); uv = [u(:)';v(:)']; c1 = nrbmak([0 1/2 1; 0 1 0],[0 0 0 1 1 1]); c1 = nrbtform (c1, vecrotx (pi/2)); c2 = nrbtform(c1, vectrans([0 1 0])); srf = nrbdegelev (nrbruled (c1, c2), [3, 1]); skl = nrbsurfderiveval (srf, uv, 2); P = squeeze(skl(:,1,1,:)); dPdx = squeeze(skl(:,2,1,:)); d2Pdx2 = squeeze(skl(:,3,1,:)); ***** assert(P(3,:), 2*(P(1,:)-P(1,:).^2),100*eps) ***** assert(dPdx(3,:), 2-4*P(1,:), 100*eps) ***** assert(d2Pdx2(3,:), -4+0*P(1,:), 100*eps) srf = nrbdegelev (nrbruled (c1, c2), [5, 6]); skl = nrbsurfderiveval (srf, uv, 2); P = squeeze(skl(:,1,1,:)); dPdx = squeeze(skl(:,2,1,:)); d2Pdx2 = squeeze(skl(:,3,1,:)); assert (squeeze (skl (1:2,1,1,:)), nrbeval (srf, uv)(1:2,:), 1e3*eps) ***** assert(P(3,:), 2*(P(1,:)-P(1,:).^2),100*eps) ***** assert(dPdx(3,:), 2-4*P(1,:), 100*eps) ***** assert(d2Pdx2(3,:), -4+0*P(1,:), 100*eps) ***** test skl = nrbsurfderiveval (srf, uv, 0); assert (squeeze (skl (1:2,1,1,:)), nrbeval (srf, uv)(1:2,:), 1e3*eps) ***** shared dPdu, d2Pdu2, P, srf, uv ***** test [u, v] = meshgrid (linspace(0,1,10)); uv = [u(:)';v(:)']; c1 = nrbmak([0 1/2 1; 0.1 1.6 1.1; 0 0 0],[0 0 0 1 1 1]); c2 = nrbmak([0 1/2 1; 0.1 1.6 1.1; 1 1 1],[0 0 0 1 1 1]); srf = nrbdegelev (nrbruled (c1, c2), [0, 1]); skl = nrbsurfderiveval (srf, uv, 2); P = squeeze(skl(:,1,1,:)); dPdu = squeeze(skl(:,2,1,:)); dPdv = squeeze(skl(:,1,2,:)); d2Pdu2 = squeeze(skl(:,3,1,:)); assert (squeeze (skl (1:2,1,1,:)), nrbeval (srf, uv)(1:2,:), 1e3*eps) ***** assert(dPdu(2,:), 3-4*P(1,:),100*eps) ***** assert(d2Pdu2(2,:), -4+0*P(1,:),100*eps) ***** test skl = nrbsurfderiveval (srf, uv, 0); assert (squeeze (skl (1:2,1,1,:)), nrbeval (srf, uv)(1:2,:), 1e3*eps) ***** test srf = nrb4surf([0 0], [1 0], [0 1], [1 1]); geo = nrbdegelev (srf, [3 3]); geo.coefs (4, 2:end-1, 2:end-1) += .1 * rand (1, geo.number(1)-2, geo.number(2)-2); geo = nrbkntins (geo, {[.1:.1:.9], [.2:.2:.8]}); [u, v] = meshgrid (linspace(0,1,10)); uv = [u(:)';v(:)']; skl = nrbsurfderiveval (geo, uv, 2); dgeo = nrbderiv (geo); [pnts, ders] = nrbdeval (geo, dgeo, uv); assert (ders{1}, squeeze(skl(:,2,1,:)), 1e-9) assert (ders{2}, squeeze(skl(:,1,2,:)), 1e-9) ***** test ku = kv = [0 0 0 1 1 1]; c(1,:,:) = [1 1 1]'*[0 0 1] - 1; c(2,:,:) = (1+[1 1 1]'*[0 1/2 1]) .* ([0 1/2 1]'*[1 1 1]); c(3,:,:) = ([1 1 1]'*[0 1/2 1]) .* ([0 1/2 1]'*[1 1 1]) ; c(4,:,:) = (1+[1 1 1]'*[0 1/2 1]); c = permute (c, [1 3 2]); geo = nrbmak (c, {ku, kv}); [u, v] = meshgrid (linspace(0,1,50)); uv = [u(:), v(:)]'; dF = nrbsurfderiveval (geo, uv, 2); assert (dF(1,1,1,:)(:), u(:)-1, 10*eps) assert (dF(2,1,1,:)(:), v(:), 10*eps) assert (dF(3,1,1,:)(:), u(:).*v(:)./(u(:)+1), 10*eps) assert (dF(1,2,1,:)(:), ones (size (u(:))), 10*eps) assert (dF(1,1,2,:)(:), zeros (size (u(:))), 10*eps) assert (dF(2,2,1,:)(:), zeros (size (u(:))), 10*eps) assert (dF(2,1,2,:)(:), ones (size (u(:))), 10*eps) assert (dF(3,1,2,:)(:), u(:)./(u(:)+1), 10*eps) assert (dF(3,2,1,:)(:), v(:)./(u(:)+1) - u(:).*v(:)./(u(:)+1).^2, 10*eps) assert (dF(1:2,3,:,:)(:), zeros (size (dF(1:2,3,:,:)(:))), 10*eps) assert (dF(1:2,:,3,:)(:), zeros (size (dF(1:2,:,3,:)(:))), 10*eps) assert (dF(3,3,1,:)(:), -2*v(:)./(u(:)+1).^3, 10*eps) assert (dF(3,1,3,:)(:), zeros (size (dF(3,1,3,:)(:))), 10*eps) ***** test ku = kv = [0 0 0 1 1 1]; c(1,:,:) = [1 1 1]'*[0 0 1] - 1; c(2,:,:) = ([1 1 1]'*[0 1/2 1]) .* ([0 1/2 1]'*[1 1 1]) ; c(4,:,:) = (1+[1 1 1]'*[0 1/2 1]); c = permute (c, [1 3 2]); geo = nrbmak (c, {ku, kv}); [u, v] = meshgrid (linspace(0,1,50)); uv = [u(:), v(:)]'; dF = nrbsurfderiveval (geo, uv, 2); assert (dF(1,1,1,:)(:), u(:)-1, 10*eps) assert (dF(3,1,1,:)(:), zeros (size (u(:))), 10*eps) assert (dF(2,1,1,:)(:), u(:).*v(:)./(u(:)+1), 10*eps) assert (dF(1,2,1,:)(:), ones (size (u(:))), 10*eps) assert (dF(1,1,2,:)(:), zeros (size (u(:))), 10*eps) assert (dF(3,2,1,:)(:), zeros (size (u(:))), 10*eps) assert (dF(3,1,2,:)(:), zeros (size (u(:))), 10*eps) assert (dF(2,1,2,:)(:), u(:)./(u(:)+1), 10*eps) assert (dF(2,2,1,:)(:), v(:)./(u(:)+1) - u(:).*v(:)./(u(:)+1).^2, 10*eps) assert (dF([1 3],3,:,:)(:), zeros (size (dF([1 3],3,:,:)(:))), 10*eps) assert (dF([1 3],:,3,:)(:), zeros (size (dF([1 3],:,3,:)(:))), 10*eps) assert (dF(2,3,1,:)(:), -2*v(:)./(u(:)+1).^3, 10*eps) assert (dF(2,1,3,:)(:), zeros (size (dF(3,1,3,:)(:))), 10*eps) ***** test crv = nrbline ([1 0], [2 0]); srf = nrbrevolve (crv, [0 0 0], [0 0 1], pi/2); srf = nrbtransp (srf); [v, u] = meshgrid (linspace (0, 1, 11)); uv = [u(:)'; v(:)']; skl = nrbsurfderiveval (srf, uv, 2); c = sqrt(2); w = @(x, y) (2 - c)*y.^2 + (c-2)*y + 1; dwdy = @(x, y) 2*(2-c)*y + c - 2; d2wdy2 = @(x, y) 2*(2-c); F1 = @(x, y) (x+1) .* ((1-y).^2 + c*y.*(1-y)) ./ w(x,y); F2 = @(x, y) (x+1) .* (y.^2 + c*y.*(1-y)) ./ w(x,y); dF1dx = @(x, y) ((1-y).^2 + c*y.*(1-y)) ./ w(x,y); dF2dx = @(x, y) (y.^2 + c*y.*(1-y)) ./ w(x,y); dF1dy = @(x, y) (x+1) .* ((2 - 2*c)*y + c - 2) ./ w(x,y) - (x+1) .* ((1-y).^2 + c*y.*(1-y)) .* dwdy(x,y) ./ w(x,y).^2; dF2dy = @(x, y) (x+1) .* ((2 - 2*c)*y + c) ./ w(x,y) - (x+1) .* (y.^2 + c*y.*(1-y)) .* dwdy(x,y) ./ w(x,y).^2; d2F1dx2 = @(x, y) zeros (size (x)); d2F2dx2 = @(x, y) zeros (size (x)); d2F1dxdy = @(x, y) ((2 - 2*c)*y + c - 2) ./ w(x,y) - ((1-y).^2 + c*y.*(1-y)) .* dwdy(x,y) ./ w(x,y).^2; d2F2dxdy = @(x, y) ((2 - 2*c)*y + c) ./ w(x,y) - (y.^2 + c*y.*(1-y)) .* dwdy(x,y) ./ w(x,y).^2; d2F1dy2 = @(x, y) (x+1)*(2 - 2*c) ./ w(x,y) - 2*(x+1) .* ((2 - 2*c)*y + c - 2) .* dwdy(x,y) ./ w(x,y).^2 - ... (x+1) .* ((1-y).^2 + c*y.*(1-y)) * d2wdy2(x,y) ./ w(x,y).^2 + ... 2 * (x+1) .* ((1-y).^2 + c*y.*(1-y)) .* w(x,y) .*dwdy(x,y).^2 ./ w(x,y).^4; d2F2dy2 = @(x, y) (x+1)*(2 - 2*c) ./ w(x,y) - 2*(x+1) .* ((2 - 2*c)*y + c) .* dwdy(x,y) ./ w(x,y).^2 - ... (x+1) .* (y.^2 + c*y.*(1-y)) * d2wdy2(x,y) ./ w(x,y).^2 + ... 2 * (x+1) .* (y.^2 + c*y.*(1-y)) .* w(x,y) .*dwdy(x,y).^2 ./ w(x,y).^4; assert ([F1(u(:),v(:)), F2(u(:),v(:))], squeeze(skl(1:2,1,1,:))', 1e2*eps); assert ([dF1dx(u(:),v(:)), dF2dx(u(:),v(:))], squeeze(skl(1:2,2,1,:))', 1e2*eps); assert ([dF1dy(u(:),v(:)), dF2dy(u(:),v(:))], squeeze(skl(1:2,1,2,:))', 1e2*eps); assert ([d2F1dx2(u(:),v(:)), d2F2dx2(u(:),v(:))], squeeze(skl(1:2,3,1,:))', 1e2*eps); assert ([d2F1dxdy(u(:),v(:)), d2F2dxdy(u(:),v(:))], squeeze(skl(1:2,2,2,:))', 1e2*eps); assert ([d2F1dy2(u(:),v(:)), d2F2dy2(u(:),v(:))], squeeze(skl(1:2,1,3,:))', 1e2*eps); ***** test knots = {[0 0 1 1] [0 0 1 1]}; coefs(:,1,1) = [0;0;0;1]; coefs(:,2,1) = [1;0;0;1]; coefs(:,1,2) = [0;1;0;1]; coefs(:,2,2) = [1;1;1;2]; srf = nrbmak (coefs, knots); [v, u] = meshgrid (linspace (0, 1, 3)); uv = [u(:)'; v(:)']; skl = nrbsurfderiveval (srf, uv, 2); w = @(x, y) x.*y + 1; F1 = @(x, y) x ./ w(x,y); F2 = @(x, y) y ./ w(x,y); F3 = @(x, y) x .* y ./ w(x,y); dF1dx = @(x, y) 1./w(x,y) - x.*y./w(x,y).^2; dF1dy = @(x, y) - x.^2./w(x,y).^2; dF2dx = @(x, y) - y.^2./w(x,y).^2; dF2dy = @(x, y) 1./w(x,y) - x.*y./w(x,y).^2; dF3dx = @(x, y) y./w(x,y) - x.*(y./w(x,y)).^2; dF3dy = @(x, y) x./w(x,y) - y.*(x./w(x,y)).^2; d2F1dx2 = @(x, y) -2*y./w(x,y).^2 + 2*x.*y.^2./w(x,y).^3; d2F1dy2 = @(x, y) 2*x.^3./w(x,y).^3; d2F1dxdy = @(x, y) -x./w(x,y).^2 - x./w(x,y).^2 + 2*x.^2.*y./w(x,y).^3; d2F2dx2 = @(x, y) 2*y.^3./w(x,y).^3; d2F2dy2 = @(x, y) -2*x./w(x,y).^2 + 2*y.*x.^2./w(x,y).^3; d2F2dxdy = @(x, y) -y./w(x,y).^2 - y./w(x,y).^2 + 2*y.^2.*x./w(x,y).^3; d2F3dx2 = @(x, y) -2*y.^2./w(x,y).^2 + 2*x.*y.^3./w(x,y).^3; d2F3dy2 = @(x, y) -2*x.^2./w(x,y).^2 + 2*y.*x.^3./w(x,y).^3; d2F3dxdy = @(x, y) 1./w(x,y) - 3*x.*y./w(x,y).^2 + 2*(x.*y).^2./w(x,y).^3; assert ([F1(u(:),v(:)), F2(u(:),v(:)), F3(u(:),v(:))], squeeze(skl(1:3,1,1,:))', 1e2*eps); assert ([dF1dx(u(:),v(:)), dF2dx(u(:),v(:)), dF3dx(u(:),v(:))], squeeze(skl(1:3,2,1,:))', 1e2*eps); assert ([dF1dy(u(:),v(:)), dF2dy(u(:),v(:)), dF3dy(u(:),v(:))], squeeze(skl(1:3,1,2,:))', 1e2*eps); assert ([d2F1dx2(u(:),v(:)), d2F2dx2(u(:),v(:)), d2F3dx2(u(:),v(:))], squeeze(skl(1:3,3,1,:))', 1e2*eps); assert ([d2F1dy2(u(:),v(:)), d2F2dy2(u(:),v(:)), d2F3dy2(u(:),v(:))], squeeze(skl(1:3,1,3,:))', 1e2*eps); assert ([d2F1dxdy(u(:),v(:)), d2F2dxdy(u(:),v(:)), d2F3dxdy(u(:),v(:))], squeeze(skl(1:3,2,2,:))', 1e2*eps); 23 tests, 23 passed, 0 known failure, 0 skipped [src/curvederivcpts.cc] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/src/curvederivcpts.cc ***** test line = nrbmak([0.0 1.5; 0.0 3.0],[0.0 0.0 1.0 1.0]); pk = curvederivcpts (line.number-1, line.order-1, line.knots, line.coefs(1,:), 2); assert (pk, [0 3/2; 3/2 0], 100*eps); 1 test, 1 passed, 0 known failure, 0 skipped [src/surfderiveval.cc] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/src/surfderiveval.cc ***** shared srf ***** test k = [0 0 0 1 1 1]; c = [0 1/2 1]; [coef(2,:,:), coef(1,:,:)] = meshgrid (c, c); srf = nrbmak (coef, {k, k}); skl = surfderiveval (srf.number(1)-1, srf.order(1)-1, srf.knots{1}, srf.number(2)-1, srf.order(2)-1, srf.knots{2}, squeeze(srf.coefs(1,:,:)), .5, .5, 1) ; assert (skl, [.5 0; 1 0]) ***** test srf = nrbkntins (srf, {[], rand(1,2)}); skl = surfderiveval (srf.number(1)-1, srf.order(1)-1, srf.knots{1}, srf.number(2)-1, srf.order(2)-1, srf.knots{2}, squeeze(srf.coefs(1,:,:)), .5, .5, 1) ; assert (skl, [.5 0; 1 0], 100*eps) 2 tests, 2 passed, 0 known failure, 0 skipped [src/basisfun.cc] >>>>> /build/octave-nurbs-scP5Tx/octave-nurbs-1.4.3/src/basisfun.cc ***** shared n, U, p, u, s ***** test n = 3; U = [0 0 0 1/2 1 1 1]; p = 2; u = linspace(0, 1, 10); s = findspan(n, p, u, U); assert (s, [2*ones(1, 5) 3*ones(1, 5)]); ***** test Bref = [1.00000 0.00000 0.00000 0.60494 0.37037 0.02469 0.30864 0.59259 0.09877 0.11111 0.66667 0.22222 0.01235 0.59259 0.39506 0.39506 0.59259 0.01235 0.22222 0.66667 0.11111 0.09877 0.59259 0.30864 0.02469 0.37037 0.60494 0.00000 0.00000 1.00000]; B = basisfun(s, u, p, U); assert (B, Bref, 1e-5); 2 tests, 2 passed, 0 known failure, 0 skipped Summary: 127 tests, 127 passed, 0 known failures, 0 skipped dh_installdocs -a -O--buildsystem=octave dh_installchangelogs -a -O--buildsystem=octave dh_octave_changelogs -a -O--buildsystem=octave dh_octave_examples -a -O--buildsystem=octave dh_installsystemduser -a -O--buildsystem=octave dh_perl -a -O--buildsystem=octave dh_link -a -O--buildsystem=octave dh_strip_nondeterminism -a -O--buildsystem=octave dh_compress -a -O--buildsystem=octave dh_fixperms -a -O--buildsystem=octave dh_missing -a -O--buildsystem=octave dh_dwz -a -a -O--buildsystem=octave dh_strip -a -a -O--buildsystem=octave dh_makeshlibs -a -a -O--buildsystem=octave dh_shlibdeps -a -a -O--buildsystem=octave dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/octave-nurbs/usr/lib/x86_64-linux-gnu/octave/packages/nurbs-1.4.3/x86_64-pc-linux-gnu-api-v55/tbasisfun.oct debian/octave-nurbs/usr/lib/x86_64-linux-gnu/octave/packages/nurbs-1.4.3/x86_64-pc-linux-gnu-api-v55/nrb_srf_basisfun__.oct debian/octave-nurbs/usr/lib/x86_64-linux-gnu/octave/packages/nurbs-1.4.3/x86_64-pc-linux-gnu-api-v55/bspderiv.oct debian/octave-nurbs/usr/lib/x86_64-linux-gnu/octave/packages/nurbs-1.4.3/x86_64-pc-linux-gnu-api-v55/nrb_srf_basisfun_der__.oct debian/octave-nurbs/usr/lib/x86_64-linux-gnu/octave/packages/nurbs-1.4.3/x86_64-pc-linux-gnu-api-v55/surfderiveval.oct debian/octave-nurbs/usr/lib/x86_64-linux-gnu/octave/packages/nurbs-1.4.3/x86_64-pc-linux-gnu-api-v55/surfderivcpts.oct debian/octave-nurbs/usr/lib/x86_64-linux-gnu/octave/packages/nurbs-1.4.3/x86_64-pc-linux-gnu-api-v55/basisfun.oct debian/octave-nurbs/usr/lib/x86_64-linux-gnu/octave/packages/nurbs-1.4.3/x86_64-pc-linux-gnu-api-v55/nrbsurfderiveval.oct debian/octave-nurbs/usr/lib/x86_64-linux-gnu/octave/packages/nurbs-1.4.3/x86_64-pc-linux-gnu-api-v55/basisfunder.oct debian/octave-nurbs/usr/lib/x86_64-linux-gnu/octave/packages/nurbs-1.4.3/x86_64-pc-linux-gnu-api-v55/bspeval.oct debian/octave-nurbs/usr/lib/x86_64-linux-gnu/octave/packages/nurbs-1.4.3/x86_64-pc-linux-gnu-api-v55/curvederivcpts.oct were not linked against libpthread.so.0 (they use none of the library's symbols) dh_octave_substvar -a -O--buildsystem=octave dh_installdeb -a -O--buildsystem=octave dh_gencontrol -a -O--buildsystem=octave dpkg-gencontrol: warning: package octave-nurbs: substitution variable ${octave:Upstream-Description} unused, but is defined dpkg-gencontrol: warning: package octave-nurbs: substitution variable ${octave:Upstream-Description} unused, but is defined dh_md5sums -a -O--buildsystem=octave dh_builddeb -a -O--buildsystem=octave dpkg-deb: building package 'octave-nurbs' in '../octave-nurbs_1.4.3-2_amd64.deb'. dpkg-deb: building package 'octave-nurbs-dbgsym' in '../octave-nurbs-dbgsym_1.4.3-2_amd64.deb'. dpkg-genbuildinfo --build=any dpkg-genchanges --build=any >../octave-nurbs_1.4.3-2_amd64.changes dpkg-genchanges: info: binary-only arch-specific upload (source code and arch-indep packages not included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) I: running special hook: sync-out /build/octave-nurbs-scP5Tx /tmp/octave-nurbs-1.4.3-2y4aqvfcv I: cleaning package lists and apt cache... I: creating tarball... I: done I: removing tempdir /tmp/mmdebstrap.TQA_h6GwHT... I: success in 2616.5077 seconds md5: octave-nurbs-dbgsym_1.4.3-2_amd64.deb: OK md5: octave-nurbs_1.4.3-2_amd64.deb: OK sha1: octave-nurbs-dbgsym_1.4.3-2_amd64.deb: OK sha1: octave-nurbs_1.4.3-2_amd64.deb: OK sha256: octave-nurbs-dbgsym_1.4.3-2_amd64.deb: OK sha256: octave-nurbs_1.4.3-2_amd64.deb: OK Checksums: OK