2013-04-19 6 views
0

나는 각각 a에 의존하는 표현식 배열을 가지고 있습니다.Mathematica의 배열에서 최대 양수 값을 찾는 방법은 무엇입니까?

나는 대체 할 필요없이 a에 따라 최소 양수 값을 찾고 싶습니다. 배열 함수는 다음 [a^2, 1-2a, 1]이면

예를 들어,이 MinPositive 반환 호출 등

(MinPositive[a^2, 1-2a, 1]) /. a-> 0 

0 

(MinPositive[a^2, 1-2a, 1]) /. a-> 0.7 

0.7^2 

하고있다.

아이디어가 있으십니까?

예를 들어 Min 일반 기능 대신 사용할 수 있도록 MinPositive 기능을 작성하는 데 도움을 주시면 감사하겠습니다.

감사합니다.

+0

오, 당신의 대답은 합리적이라고 생각! 복원 할 수 있습니까? 나는 그것을 시험해보고 싶다, MinPositive를 Min이 사용 된 것처럼 사용할 수 있다면, Min 함수와 통합을 시도했기 때문에 MinPositive를 사용할 수 있다고 생각한다. – kloop

답변

0

발현

[a^2, 1-2a, 1] 

는 아마도 3 개 요소의 목록에 대한 올바른 표현

{a^2, 1-2a, 1} 

의미, 잘 형성된 티카 식 아니다. Mathematica는 실제로 배열을 그렇게하지는 않습니다 만,리스트는 일반적으로 배열을 모델링하는 데 사용될 수 있습니다. 한편

표현

MinPositive[a^2, 1-2a, 1] 

3 개 인수 MinPositive라는 함수에 대한 유효한 호출입니다.

모든 한쪽에, 나는 당신이 함수 호출을 찾는 것 같아요 그와 같은 0의 값이 MinPositive에 전화 내부 a 대체되지만 적용되지 않습니다있는

MinPositive[{a^2, 1-2a, 1}/.a->0] 

그 외침.

MinPositive 함수를 작성하는 데 도움이 필요한지 여부는 질문에 분명하지 않습니다. 그렇다면 질문을 수정하고 명확하게하십시오. 또한 질문 제목은 최대 긍정 값을 묻는 반면, 질문의 본문은 최소값을 나타냅니다. 당신도 그것을 정렬 할 수 있습니다.

편집

나는 이것을 확인하지 않은, 그래서 나는이 기계에 티카이없는,하지만 당신은 마무리하는 것이 충분히 가까이해야합니다 :

minPositive[lst_List] := Min[Select[lst,#>0&]] 

을하는 당신은 것 다음과 같이 호출하십시오.

minPositive[{a^2, 1-2a, 1}] 

(NB : 대문자로 된 이름으로 함수를 만드는 것을 피합니다.)

또는, 당신의 의견을 고려, 아마 당신은이 같이 부를 것이다

minPositive[lst_List, rl_Rule] := Min[Select[lst/.rl,#>0&]] 

과 같이합니다 :

minPositive[{a^2, 1-2a, 1},a->2] 

편집 2

의 문제점, 당신을 위해 예를 들어

(MinPositive[a^2, 1-2a, 1]) /. a-> 0 

Mathematica의 일반적인 평가 루프는 대체 규칙이 적용되기 전에 MinPositive 함수의 평가를 유발한다는 것입니다. a이 특정 값으로 설정되면 Mathematica는 어떻게 목록에서 최소 양수 값을 계산할 수 있습니까?

+0

감사합니다. 실제로 호출 내에서 대입을 적용하고 싶지는 않지만 대신 표현식이 실제로 평가 될 때 필요시 대체되는 Min 함수처럼 작동하도록합니다. 그리고 네, MinPositive 함수에 대한 도움이 필요합니다. – user2299502

+0

그러나'/ .'의 사용은, 당신이 원한 것처럼, * 표현식이 실제로 평가 될 때 * 필요시 대체합니다. 나는이 점에서 당신이 원하는 것에 대해 매우 불확실합니다. –

+0

감사합니다! MinPositive를 통해 통합 할 수 있기를 원합니다. 그래서 그것이 통합 메커니즘에 의해 "수요"로 대체되기를 바랍니다. – kloop

1

염두에두고 있니? HOLDALL하는 기능의 속성을 설정함으로써 달성 (모든 인자 평가를 방지)되는 함수의 본체를 호출하기 전에 인자 평가를 방지하기 ..

minp[lst_, a_, v_] := (
    pos = Select[lst, ((# /. a -> v) > 0) &]; 
    [email protected][pos , ((#1 /. a -> v) > (#2 /. a -> v)) &]) 


minp[{a^2, 1 - 2 a, 1}, a, .2] -> a^2 
minp[{a^2, 1 - 2 a, 1}, a, .48] -> 1-2 a 
minp[{a^2, 1 - 2 a, 1}, a, 2] -> 1 
0

를 최소 값 retsults 식 반환 HoldFirst (첫 번째 인수 만 평가하지 못하게 함) 또는 HoldRest (첫 번째 인수 만 제외하고 모두 평가하지 못하게 함) 그 자체로 "a"는 인수하지 않기 때문에 또한 는, 당신은 "A"

그래서

SetAttributes[minPositive, HoldAll] 
minPositive[lst_List] := Block[{a},Min[Select[lst /. a -> 0, # > 0 &]]] 

및 명시 적으로 설정 한 경우에도 대한 (잠재적 인) 정의에서 그것을 분리하는 블록을 사용할 필요가 얼마간 다른 값으로,

a=3 

보다

minPositive[{a^2, 1 - 2 a, 100}] 

수익률을 말한다 9 예상대로

HTH

예후

관련 문제