2016-09-09 4 views
0

이 사용자 지정 함수를 그래프로 표시하려고하지만 어떻게 찾을 수 없습니다. 심지어 가능할까요? 모든 예제는 알려진 함수 (sin 또는 exp (x)와 같은)에 관한 것입니다.그래프 사용자 정의 함수

나는 다음과 같은 오류가 발생합니다 :

error: myfun: A(I,J,...) = X: dimensions mismatch 
error: called from 
    myfun at line 28 column 16 
    grafica1 at line 54 column 2 
>> 

코드 :

function ph = myfun(gamma) 
... 

    for i = 1:N 
    .... 
     A(i,i) = alfa*gamma+(gamma+1)*i+p*(N-i); 
     elseif j == i-1 
     A(i,j) = -i*(i-1); 
     elseif j == i+1 
     A(i,j) = -p*(N-i)*(i-1)*(i+1)/i; 
    ... 
    b(i) = gamma * i; 
    end 

    v = A\b; 
    for i = 1:N 
    ph = ph + nchoosek(N,i)*p^i*v(i)/((1+p)^N); 
    end 

endfunction 

전화 :

y=myfun(gamma); 
plot(gamma,y) 
+0

크기 (감마) 및 크기 (y)는 무엇입니까? 그들은 같은 길이의 벡터 여야합니다. – aschepler

+0

변수 패널에 따라 Y를 정의하지 않았습니다. 3x1입니다. 감마 = 0 : 1 : 9; – Gaston

+0

"myfun at line 28"중 어떤 줄을 가리킬 수 있습니까? –

답변

1

함수의 문제는 염두에 벡터화 설계되지 것입니다. 특히 입력 gamma이 행 벡터 인 경우 alfa*gamma+(gamma+1)*i+p*(N-i);도 벡터 여야합니다. 물론 스칼라 인 A(i, j)에 값을 지정하면 실패합니다.

이 시점에서 가장 좋은 옵션은 에 한 번에 하나씩 y 값을 계산하는 것입니다. 이렇게하면 기존 코드베이스를 최소한으로 변경해야합니다.

y = zeros(size(gamma)) 
for i = 1:length(gamma) 
    y(i) = myfun(gamma(i));  
end 
plot(gamma, y); 
+0

또는 그 이상,'y = myfun (gamma); 대신'y = arrayfun (@myfun, gamma); –