2015-02-02 2 views
0

첫째로, 저는 이것에 대한 간단한 답이있을 것이라고 확신합니다. 아마 온라인에서 답을 찾는 데 바로 그 말을하지 않을 수도 있습니다. a와 b는 상수경계 위로 trig 방정식을 푸십시오.

a*x*cot(a*x) == b 

:

나는 다음과 같다 방정식을 해결하기 위해 노력하고있어. 내가 알고있는 결과를 얻고있다

solve(a*x*cot(a*x) == b, x) 

사용하는 것은 잘못이다 (필자는 상수 사용하고 값으로, 나는 -227처럼지고있어, 그것은 160의 주위에 뭔가 있어야합니다.) I 플롯 그것은 Mathematica에서 두 개의 별개의 함수로, 그리고 그것들은 그 주변에서 서로 교차하지만, 침대 부분은 주기적이므로, 여러 번 그렇게합니다.

특정 간격 (예 : 0에서 200까지)에 대한 해결책을 찾기 위해 Matlab의 검색을 제한하고 싶습니다. 어떻게해야합니까?

저는 Matlab (Mathematica에서 좀 더 경험이 많았습니다)을 처음 접했습니다.

+0

a와 b 중 어느 숫자를 사용하고 있습니까? – Daniel

답변

1

당신은 두 가지 요구 사항

  1. 기능은 "잔류"형식이어야합니다 함께 fzero를 사용 x에 경계를 지정할 수 있습니다 (즉, r(x) = 0) 두 범위에서
  2. 잔여 값이 있어야합니다 반대 기호 (이는 연속 기능을 위해 간격 내에 루트가 있음을 보장합니다).

그래서 우리는 잔류 형태로 함수를 다시 쓰기 : 정의의 간격을

r = @(x) a*x*cot(a*x) - b; 

% These are just random numbers; the actual bounds should come 
% from the graph the ensures r has different signs a xL and xR 
xL = 150; 
xR = 170; 

및 해결

내가 볼
x = fzero(r,[xL,xR]); 

솔루션에 Symbolic Toolbox를 사용하려고했지만 방정식이 다항식과 삼각 함수의 비선형 조합이므로 닫힌 폼 솔루션이 더 이상 없을 것입니다. 그래서 저는 비선형 수치 루트 파인더와 달랐습니다.

+0

이 기능이 작동했습니다! 오늘 fzero 함수를 발견했지만 시도했을 때 오류를 던진 형식이 필요하다는 것을 알지 못했습니다. 원본 형식입니다. Mathematica의 대답과 일치하는 답변을 얻었습니다. 고마워요! – mollycule

0

일부 값을 시도했는데 solve 숫자 솔루션을 반환합니다. 분석 솔루션이 없으면 문서화 된 동작입니다.

이 경우에, 당신은 직접 일치하는 시작 값

vpasolve(a*x*cot(a*x) == b, x,160) 

그것은 당신이 요청 정확히 아니에요와 숫자 해결사를 호출 할 수 있지만, 그것을해야 시작 값으로 플롯에서 당신의 독서를 사용.

+0

나는 이것을 시도했다 (그리고 내가 원하는 것은 수치 적 해결책이다. 미안하다.).하지만 '정의되지 않은 함수'vpasolve '가'double '유형의 입력 인자로 사용된다."내가 풀고있는 실제 방정식은 다음과 같습니다 : vpasolve (x * R * cot (x * R) == 1- (R/(2 * D)), x, 100 여기서 R과 D는 상수 (방금 정리해봤을 때 제 질문에서보기가 더 쉬웠습니다.) – mollycule

관련 문제