2017-11-11 7 views
0

다음 코드는 무엇이 잘못 되었습니까?심볼릭 MATLAB 정보

clear all 

syms x y a ; 

u=2*x*y; 
v=a^2+x^2-y^2; 

diff=diff(u,'x',1)+diff(v,'y',1); 
if diff==0 
    disp('Liquid motion is possible.') 
    disp('Stream function exists.') 
else 
    disp('Liquid motion is not possible.') 
    disp('Stream function does not exist.') 
end 

diff2=diff(v,'x',1)-diff(u,'y',1); 
if diff2==0 
    disp('Velocity potential exists.') 
else 
    disp('Velocity potential does not exist.') 
end 

위 명령을 실행하면 명령 창이 표시됩니다.

Liquid motion is possible. 
Stream function exists. 
Error using sym/subsindex (line 672) 
Invalid indexing or function definition. When defining a function, ensure that the body of the function is a SYM 
object. When indexing, the input must be numeric, logical or ':'. 

Error in sym>privformat (line 1502) 
    x = subsindex(x)+1; 

Error in sym/subsref (line 694) 
      [inds{k},refs{k}] = privformat(inds{k}); 

Error in q7 (line 17) 
diff2=diff(v,'x',1)-diff(u,'y',1); 

하지만 다시 작성하는 경우 (재정의) 첫 번째 if 구조 후 기호 변수는 그것을 잘 실행됩니다. 또한 첫 번째 if 구문을 취소하면 실행됩니다.

+1

내장 함수'diff'를 재정의하지 마십시오. 그리고 심볼릭 비교를 위해서'==' 대신에''isAlways'' (https://www.mathworks.com/help/symbolic/isalways.html)를 사용하십시오. 'diff (u, 'x', 1)'은'diff (u, x)'와 같습니다. – horchler

+0

@ horchler 님의 의견을 확장하려면 내장 된 'diff'함수를 음영 처리하는'diff'라는 새로운 변수를 만듭니다. 일반적으로 사용할 함수와 같은 이름의 변수 이름은 사용하지 않아야합니다. – jodag

+0

@horchler 감사합니다. 내 문제를 해결했다. –

답변

0

내가 예약 된 이름을 덮어 피할 것, 그래서 대신

diff=diff(u,'x',1)+diff(v,'y',1); 

의 내가

derFcn = diff(u,'x',1)+diff(v,'y',1); 

이 두 번째 오류를 트리거 제안; 이 점은 diff에서

diff2=diff(v,'x',1)-diff(u,'y',1); 

은 (, 부수적 0) 당신은 diff 값 때문에 물론, 컴파일되지 않을 것이다,

0(v,'x',1) 

를 작성하는 것과 같습니다 그것을 당신이 무엇을 의미하지 않습니다 .

그래서 제발, 대체 (그리고 그에 따라 if 문을 업데이 트하십시오).

+0

죄송합니다. 게시물을 게시 한 후에 만 ​​다른 답변을 읽었습니다. 나는 그들이 대답으로 게시되어야한다고 생각합니다. 또한, 기호식을 비교할 때 diff == 0이 올바르지 않다는 것도 사실입니다. –

+0

== 대신 isAlways를 사용하면 구문에서 else 응답을 내게 제공합니다.이 구문은 올바르지 않습니다. 왜 그런가? –

+0

게시물에 서명하지 마십시오. 모든 게시물은 사용자 카드와 프로필 링크로 끝납니다. 게시물의 서명이나 태그 라인은 잡음으로 간주되어 제거됩니다. – meagar