2

다음 함수에서 Pt를 선택적 입력 매개 변수로 사용하려고했습니다. Pt가 지정되지 않은 경우 계산할 다른 선택적 매개 변수가 필요합니다 (해당 부분 작동). 하지만 그것을 지정할 때 : 당신의 도움을입력 파서 상호 의존적 인 선택적 인수

function [ v ] = Alg(b,shape,varargin) 

%%Parse inputs 
p = inputParser; 

addRequired(p,'b',@isnumeric); 
expectedShapes = {'square','circle'}; 
addRequired(p,'shape',@(x) any(validatestring(x,expectedShapes))); 

defaultIt = 42; 
addParameter(p,'It',defaultIter,@isnumeric); 

addParameter(p,'t',@isnumeric); 
addParameter(p,'v',@isnumeric); 

parse(p,b,shape,varargin{:}) 
b = p.Results.b; 
shape = p.Results.shape; 
It = p.Results.It; 
t = p.Results.t; 
v = p.Results.v; 

parse(p,b,shape,varargin{:}) 
defaultPoint = Alg_sq(b,Pt,It); 
defaultPoint = Sub_Alg(defaultPoint,shape,t,v); 
addParameter(p,'Pt',defaultPoint,@isnumeric); 
Pt = p.Results.Pt; 

%%Shape 
switch shape 
    case 'circle' 
     v = Alg_crcl(b,Pt,It); 

    case 'square' 
     v = Alg_sq(b,Pt,It); 
end 
end 

고마워 : 함수의

'Pt' is not a recognized parameter. For a list of valid name-value pair arguments, see the documentation for this function.

코드 : 나는 다음과 같은 오류가

Alg(b,'circle','Pt',ones(150,1)) 

을!

답변

1

처음에는 인수를 구문 분석 할 때 Pt이 유효한 매개 변수 이름으로 지정되지 않았기 때문에 오류가 발생합니다.

function v = Alg(b, shape, varargin) 

    % define arguments 
    p = inputParser; 
    addRequired(p, 'b', @isnumeric); 
    addRequired(p, 'shape', @(x) any(validatestring(x,{'square','circle'}))); 
    addParameter(p, 'It', 42, @isnumeric); 
    addParameter(p, 't', @isnumeric); 
    addParameter(p, 'v', @isnumeric); 
    addParameter(p, 'Pt', [], @isnumeric); % default for now is empty matrix 

    % parse arguments 
    parse(p, b, shape, varargin{:}) 
    b = p.Results.b; 
    shape = p.Results.shape; 
    It = p.Results.It; 
    t = p.Results.t; 
    v = p.Results.v; 
    Pt = p.Results.Pt; 
    if isempty(Pt) 
     % insert your logic to compute actual default point 
     % you can use the other parsed parameters 
     Pt = computeDefaultValue(); 
    end 

    % rest of the code ... 

end 
+0

당신이 체크'모든 (STRCMP (p.UsingDefaults, '백금을'))를 추가 싶어 수도'경우에 사용자는 특히'라는 : 당신은 여기에 내가 어떻게 할 것입니다, 약간의 코드를 재구성 할 필요가 Alg (b, 'circle', 'Pt', [])'(Alg (b, 'circle')과 구별하기 위해) – Amro