📄 calcbasis.m
字号:
function [fparm,gparm,gradf,gradg] = calcbasis(parmvec,basisfunc)% function [fparm,gparm,gradf,gradg] = calcbasis(parmvec,'basisfunc')%% Evaluates basis functions and gradients at desired parameter points. % Inputs: parmvec varying matrix of parameter values% 'basisfunc' string containing the name of a function% evaluating the basis functions and gradients.%% Outputs: fparm varying matrix of values for f% gparm varying matrix of values for g% gradf varying matrix of values for df/drho% gradg varying matrix of values for dg/drho%% basisfunc.m should have the syntax % [fdef,gdef,gfdef,ggdef] = func(rho)% as shown below:%% Consider R-dimensional parameters and N basis functions:% fdef = [f1(parm);f2(parm);...;fN(parm)];% gfdef = [df1/dparm1 df1/dparm2 ... df1/dparmR;% df2/dparm1 df2/dparm2 ... df2/dparmR;% . . . % . . . % . . . % dfN/dparm1 dfN/dparm2 ... dfN/dparmR];% and similarly for gdef, ggdef.%% For example:% fdef = [1; parmi(3); parmi(3)^2; parmi(3)^3];% gdef = fdef;% gfdef = [0 0 0; 0 0 1; 0 0 2*parmi(3); 0 0 3*parmi(3)^2];% ggdef = gfdef;if nargin == 0 disp('usage: [fparm,gparm,gradf,gradg] = calcbasis(parmvec,''basisfunc'')'); returnend[mtype,row,col,npts] = minfo(parmvec);if mtype == 'vary' tmp = xtracti(parmvec,1,1); if min(size(tmp)) ~= 1 error('Parameter must be a vector'); endelseif mtype == 'cons' if min(size(parmvec)) ~= 1 error('Parameter must be a vector'); end parmvec = vpck(parmvec,1); npts = 1;else error('Parameter data must constant or varying vector');endfparm = [];gparm = [];gradf = [];gradg = [];for i=1:npts parmi = xtracti(parmvec,i,1); % Call the evaulating function eval(['[fdef,gdef,gfdef,ggdef] = ' basisfunc '(parmi);']); fparm = [fparm;fdef]; gparm = [gparm;gdef]; gradf = [gradf;gfdef]; gradg = [gradg;ggdef];endiv = getiv(parmvec);fparm = vpck(fparm,iv);gparm = vpck(gparm,iv);gradf = vpck(gradf,iv);gradg = vpck(gradg,iv);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -