2011-03-27 7 views
2

모든 실제 목적으로 (비록 그것이 보이는 것보다 훨씬 더 복잡하지만) matlab 실제 숫자로 생각할 수있는 클래스를 만듭니다.matlab에있는 클래스에 대한 모든 함수 연산자 오버로드

클래스에서

, 나는 등등 플러스, MPower에서는, 같은 MATLAB 사업자, 많은 수의 .. 그것은 아마 불가능

를 오버로드 할 수 있습니다,하지만 난 내 클래스의 모든 기능을 오버로드에 대해 어떻게 갈 것인가? 즉, 실수를 취하여 실수를 출력하는 임의의 함수 f가 있다고 가정하고 X가 내 클래스의 인스턴스라고 가정합니다. 나는 f (X)가 matlab에 의해 올바르게 해석되기를 바란다. (당연히, 함수 포인터를 가져 와서 코드에 적용 할 클래스에 적용하는 자연스러운 방법이있다.)

내가보기에 문제가 있습니다 : matlab은 함수 f가 실수로 입력 값을 취하는 것을 볼 방법이 없습니다. 하지만 나는 함수 호출을 망쳐 놓지 말 것을 사용자에게 맡길 것이다.

나는 어떤 의미가 있습니까?

나는 그것이 가능하지 않다고 생각하지만, 그렇다면 정말 멋질 것입니다.

PS : 나는 아마 입력으로 funciton 핸들을 취하는 방법을 만들어 주위 얻을 수 있습니다 알고 있지만, 덜 예쁘다 ..

감사합니다!

편집 :

죄송합니다. 조금 혼란 스럽습니다. 나는 더 명확 할 것이다. 무작위로 실제 변수를 나타내는 클래스가 있다고 가정 해 봅니다 (단순화를 위해 이산 집합을 말합니다). 내 클래스에는 무작위 변수의 확률 분포뿐만 아니라 가능한 값이 들어 있습니다.

임의의 두 임의 변수 X, Y에 대해 X + Y의 합계가 잘 정의되어 있기 때문에 임의의 변수를 나타내는 인스턴스 X와 Y가있는 경우 Z = X + Y가 새로운 확률 변수 적절한 세트와 분포로 X와 Y의 합과 같습니다. 나는 플러스 연산자를 오버로드하여이를 수행했습니다. 좋네요.

임의의 함수 f가 있다고 말하면 "cos"라고 말하십시오. 자, 임의의 임의의 변수 X에 대해서, cos (X)는 무작위 변수이기도하고, Z = cos (X)라고 쓰면 좋을 것입니다. 그러면 자동으로 클래스의 인스턴스를 만들고 적절한 도메인을 계산하고 확률 분포.

문제는이 자동 연산이 모든 함수 f에 대해 발생하기를 바라는 것입니다. 일반적으로 자주 사용되는 함수를 수동으로 오버로드하지 않으려합니다. 특히 사용자 정의 함수 f로 작업하기를 원합니다.

추가 예제 : 도메인 [-2, -1,0,1,2] 및 확률 [1/5,1/5,1/5,1]을 사용하여 임의 변수 X를 만듭니다./5 1/5]

I는 (이상) 함수 F를 생성되도록 F (X) =의 X를 경우 X = -2 2 F (X) = X^2 그렇지

그런 다음 Z = f (X)를 설정하여 matlab에 도메인 {-2,0,1,2} 및 확률 [1/5, 1/5, 2/5, 1]이있는 임의의 변수 Z가 자동으로 생성되기를 바랍니다./5]

수학적으로, 나는 이것을하는 방법을 안다. 하지만 난 내 클래스의 모든 함수 호출을 가로 채고 오버로드해야합니다.

어떤 의미입니까?

ps : 저는 공식적으로 객체 지향 프로그래밍을 배우지 않았기 때문에 가끔 개념에 잘못된 단어를 사용할 수 있습니다.

다시 도움 주시면 감사하겠습니다.

+0

나는 무엇을하려고하는지 잘 모르겠습니다. 너는 원하는 행동의 예를 제시 할 수 있니? 'f (double d)'와'f (int i)'를 작성하려고하는데, 어떻게 읽었습니까? – Juhl

+0

미안하지만, 나는 분명하지 않았습니다. 나는 약간의 설명을 추가했다. – Cyrano

답변

1

예, 연산자를 오버로드 할 수 있습니다. 그러나, 당신이하려는 것을 위해, 그것은 과잉입니다. 필요한 것은 isreal 기능이있는 간단한 입력 확인입니다.

function rejectComplex(inputValue) 
    if ~isreal(inputValue) 
     error('Input is not a real number') 
    end 

이 함수의 입력으로 복소수를 입력하면 오류가 표시되고, 그렇지 않으면 오류가 표시됩니다. 이제 조건을 만족할 때만 모든 코드가 실행되도록이 코드를 사용하여 함수를 구현할 수 있습니다. (위의 end 문 뒤에 함수를 계속 사용하십시오)

+0

혼란 스러울 지 모르지만 내 문제는 * 모든 기능을 과부하시키고 싶다는 것이다. 나는 이것이 미친 듯이 들릴 수도 있음을 깨달았습니다. 제가하려고하는 것을 위 참조하십시오. – Cyrano

+1

나는 당신이하는 것을 이해합니다.하지만 당신이 필요한 것에 대한 올바른 접근법은 확실하지 않습니다. 'domain'이 주어지면 함수의'range'를 얻으 려합니다. 도메인'D = {d1, d2, d3}'와 함수'f (x)'가 주어지면 범위는 간단히'R = f (D)'가됩니다. 이제 예제에서와 같이 중복 값을 얻을 수 있습니다.이 값은 'unique'함수를 사용하여 제거 할 수 있습니다. 이러한 고유 한 요소 각각의 확률을 얻으려면 [내 대답을보십시오] (http://stackoverflow.com/questions/5385651/frequency-of-numbers-in-vector-matlab/5385787#5385787) 비슷한 질문을하십시오. – abcd

+1

답변 해 주셔서 감사합니다. 나는 두 가지 문제가 남아있다 : ​​ a) 나의 클래스는 단지 도메인과 확률 (너무 느릴 수 있기 때문에 통계적 주파수를 사용하여 계산하고 싶지 않음)을 포함하는 것보다 훨씬 복잡하다. b) 클래스는 다른 것들의 묶음과 인터페이스하기 때문에 사용자 친화적 인 목적으로 Z = f (X)를 쓸 수 있다는 것은 처음부터 Z를 만들고 모든 적절한 것들로 채우는 것보다 훨씬 낫습니다. 구문이 추악 해지면 내가하려는 일, 즉 임의의 변수를 처리 할 수있는 멋진 인터페이스가 제거됩니다. – Cyrano