2016-07-19 3 views
0

함수를 정의 할 때는 TEST = @(t) t.^2이라고 말하십시오. 입력이 벡터 인 경우 [1,2,3,4], TEST([1,2,3,4]) = [1,4,9,16]이라고 말하십시오.스크립트를 작성할 때 동시에 모든 값을 계산할 수 있습니까?

정의 된 함수가 스크립트 형식 인 경우 비슷한 작업을 수행 할 수 있습니까? 제가 스크립트를 가지고 있다면, ret = TEST(x,y,z)x, yz의 숫자 값을 알 때 값을 출력하는 TEST.m이라고 말하면됩니다. x, y이 고정되어있을 때, 예를 들어 각각 0, 1 일 때 z의 100 개의 다른 값을 1에서 100까지 계산한다고 가정 해 보겠습니다. for 루프를 작성하거나 TEST.m 스크립트의 내용을 변경하지 않고 TEST(0,1,1:1:100)을 출력 할 수 있습니까?

이러한 질문을하는 이유는 계산 시간에서 비롯됩니다. 일반적으로, 내가 가지고있는 스크립트는 약간 복잡 할 수 있으므로 단일 값을 계산할 때 몇 분이 걸릴 수 있습니다. for-loop를 출력하면 시간이 오래 걸릴 수 있습니다. 나는 루프를 작성한다고 생각하지만, 계산 시간은 나보다 오래 사용하기에는 길다. 한 번에 100 개의 모든 값을 계산할 수 있는지 궁금합니다. 필자는 프로그래머의 선구자이며이 게시물 이후에 만족스러운 답변을 얻을 수 있기를 바랍니다. 모든 도움에 감사드립니다.

+1

)

은 귀하의 질문에 대답을 기대하고있다. 'x','y'와'z'가 어떻게 사용될 지 계산의 예제를 제공해주십시오. kthxbye. – rayryeng

+0

일반적으로 TEST 내부의 함수는 표현하기 쉽지 않습니다. 간단히하기 위해 스크립트 TEST.m이 으로 정의된다고 가정합니다. ret = f (x, y, z) f = x^3 + y^2 + 단순화를 위해 z^4. 일반적으로이 함수는 매우 복잡 할 수 있음을 기억하십시오. x, y, z를 특정 값으로 전달하면 답을 얻을 수 있습니다. 내 요점은 스크립트의 구조에 변화가 없습니다. 함수를 x.^3 + y.^2 + z.^4로 다시 작성하지 말고 벡터 입력을 허용하십시오. –

+0

TEST.m을 호출하는 다른 스크립트를 작성합니다. 내 궁극적 인 목표는 예를 들어 for 루프를 작성하지 않고 TEST (0,1,1 : 1 : 100)의 수치 값을 얻는 것입니다. –

답변

0

고정 된 값을 매개 변수로 사용하고 벡터를 입력으로 사용하도록 새 익명 함수를 정의하십시오. 그런 다음 arrayfun을 사용하여 배열의 모든 값에서이를 계산하십시오. 그래서 T 상수로 xy을 치료하는 새로운 기능입니다 만 입력으로 z

x = 2; 
y = 3; 
z = 1:5; 
T = @(z) TEST(x,y,z); 
arrayfun(T,z) 

:

은이 기능이 말 :

function ret = TEST(x,y,z) 
    ret = f(x)+g(y)+h(z); 
end 

function r = f(x) 
r = x^2; 
end 

function r = g(y) 
r = y^3; 
end 

function r = h(z) 
r = z^4; 
end 

을 그리고 당신은에서 호출 . 그런 다음 arrayfunT 소요 z의 모든 요소를 ​​계산, 당신은 얻을 :

ans = 

    32 47 112 287 656 

을 이제 xy이 일정하게 유지 할 수있는 경우는, [a,b,c] = arrayfun(T,z,w,v)처럼, 더 벡터와 arrayfun를 사용할 수 있습니다. 그것은 어떻게`TEST`가 계산되는 값에 따라 다르지만 대부분의 경우, 대답은 '예

+0

@will_cheuk가이 문제를 해결 했습니까? 그렇지 않다면, 왜? – EBH

관련 문제