2014-10-04 12 views
2

그래서 두 개의 .m 파일로 구성되었습니다. 이것은 내가 데 문제의 예이며, 수학은 의사 수학에게 있습니다함수의 인수로 함수를 전달하십시오.

rectangle.m :

function [vol, surfArea] = rectangle(side1, side2, side3) 
vol = ...; 
surfArea = ...; 
end 

ratio.m : 나는 어떻게 확실 해요 무엇

function r = ratio(f,constant) 
% r should return a scaled value of the volume to surface area ratio 
% based on the constant provided. 

% This line doesn't work but shows what I'm intending to do. 
[vol,surfArea] = f 

r = constant*vol*surfArea; 
end 

해야 할 일은 직사각형 함수를 f로 전달한 다음 ratio 함수 내에서 vol 및 surfArea에 액세스하는 것입니다. 필자는 함수 핸들과 함수 함수에 대한 Mathworks 페이지를 읽었으며이를 수행하는 방법을 알아 내려고 빈 페이지를 만들었습니다. MATLAB을 처음 사용하기 때문에 도움이되지 않습니다.

정보가 더 필요하면 알려주세요.

감사합니다.

+0

, 어떻게 할 인수가없는 경우 함수가 결과를 제공 할 것으로 기대하십니까? –

+0

그래서 전달 된 인수를 잘못 (잘못) 구상 중입니다. '비율 (직사각형 (1,2,3), 2)'. 그러나 이것이 올바른 답에 더 가깝다고 생각합니다. '비율 (@ 직사각형, 2) '또는이 비율 (@ (x) 비율 (1,2,3), 2). 마지막 두 경우에서 사각형 함수의 출력에 액세스하는 방법을 이해하지 못합니다. –

+0

당신은 정말로 어떤 종류의 기능적 클로저를 생성해야합니까? 예제에서와 같이, 함수 핸들을 사용할 필요가 없습니다. 호출자가 먼저'f'를 먼저 호출 한 다음, 결과'vol'와'surfArea'를'ratio'의 여분의 인수로 전달하십시오 (즉,'ratio (사각형 (1,2,3), 2)'아이디어) – Notlikethat

답변

2

로 기능 rectangle을 전달하고 ratio의 인수의 올바른 방법은 그런 다음 ratio 내에서 [vol,surfArea] = f(s1,s2,s3) 호출 할 수 있습니다

r = ratio(@recangle, constant) 

이지만, sideX 인수가 알려진해야합니다.

이러한 인수를 알아야 할 필요가없는 경우 개체 함수를 만들고이를 참조 인수로 전달할 수 있습니다. 또는 더 나은, 당신은 모두 사각형 클래스를 만들 수 있습니다

classdef Rectangle < handle 

    properties 
     side1, side2, side3; 
    end 

    methods 

     % Constructor 
     function self = Rectangle(s1,s2,s3) 
     if nargin == 3 
      self.set_sides(s1,s2,s3); 
     end 
     end 

     % Set sides in one call 
     function set_sides(self,s1,s2,s3) 
      self.side1 = s1; 
      self.side2 = s2; 
      self.side3 = s3; 
     end 

     function v = volume(self) 
      % compute volume 
     end 

     function s = surface_area(self) 
      % compute surface area 
     end 

     function r = ratio(self) 
      r = self.volume()/self.surface_area(); 
     end 

     function r = scaled_ratio(self,constant) 
      r = constant * self.ratio(); 
     end 

    end 

end 
+0

그래서이 말이 맞습니다.그러나 언급하지 않은 한 가지 (그리고 다른 사람이 얻는 것을 기대하지는 않음)는 비율 함수를 상속 받고 싶었던 직사각형의 일부 인수 였고 나머지는 비율 함수 내에서 조작하고 싶었습니다. 내가 오늘 알아 낸 것을 적을 것이지만, 모든 의도와 목적을 위해, 당신의 솔루션은 잘 작동 할 것입니다. –

1

내가 위에서 내 질문에이 문제를 제기하지 않았지만, 이것이 내가 검색 한 것입니다.

그래서 내가 원하는 것은 직사각형 인수를 비율에 전달하는 것이고 비율 함수 내에서 선택된 개수의 직사각형 인수를 조작 할 수 있습니다. 위의 .m 파일을 보면, 세 번째 .m은 이와 비슷한 모습입니다. 이 솔루션은 MATLAB's anonymous functions을 사용하여 종료되었습니다.

CalcRatio.m :

function cr = calcRatio(length) 
% Calculates different volume to surface area ratios given 
% given different lengths of side2 of the rectangle. 
cr = ratio(@(x) rectangle(4,x,7); %<-- allows the 2nd argument to be 
            % manipulated by ratio function 
end 

ratio.m : 당신은 cellfun``에 있지만,이 예에서, 예를 들어, 인자로 기능을 전달할 수 있습니다

function r = ratio(f,constant) 
% r should return a scaled value of the volume to surface area ratio 
% based on the constant provided. 

% Uses constant as length for side2 - 
% again, math doesnt make any sense, just showing what I wanted to do. 
[vol,surfArea] = f(constant); 

r = constant*vol*surfArea; 
end 
관련 문제