2014-05-20 6 views
2

나는 상징적 인 함수를 가지고 있는데, 특히 0을 알기에 관심이있다. 내 검색어와 관련있는 것을 찾으려고 노력하면서 Google을 통해 검색했지만 성공하지 못했습니다.Matlab 기호 함수의 0 찾기

누군가 나를 도와 줄 수 있습니까?

편집 :

T(x,t) = 72/((2*n+1)^2*pi^3)*(1 - (2*n+1)^2*pi^2*t/45 + (2*n+1)^4*pi^4*t^2/(2*45^2) - (2*n+1)^6*pi^6*t^3/(6*45^3))*(2*n+1)*pi*x/3; 

for i=1:1:1000 
    T_new = 72/((2*i+1)^2*pi^3)*(1 - (2*i+1)^2*pi^2*t/45 + (2*i+1)^4*pi^4*t^2/(2*45^2) - (2*i+1)^6*pi^6*t^3/(6*45^3))*(2*i+1)*pi*x/3; 

    T = T + T_new; 

end 

T = T - 72/((2*n+1)^2*pi^3)*(1 - (2*n+1)^2*pi^2*t/45 + (2*n+1)^4*pi^4*t^2/(2*45^2) - (2*n+1)^6*pi^6*t^3/(6*45^3))*(2*n+1)*pi*x/3; 

T = T(1.5,t); 

T_EQ = 0.00001 

S = solve(T - T_EQ == 0,t); 

내가 할 문제는 S는 허수를 포함하는 벡터는 것입니다. 나는 시간을 계산하려고하기 때문에 실수를 기대했다. 여기

는 내가 뭘하려고 오전에 관한 약간의 배경이다 : 주어진 링크에서

http://hans.math.upenn.edu/~deturck/m241/solving_the_heat_eqn.pdf

은 특정한 하나의 차원 사건에 ​​대한 해결 열 방정식이다. 규정 된 경계와 초기 조건을 만족하는 온도 분포는 50쪽에 나와 있습니다.

1 차원 물체가 T = 0의 일정한 온도에서 유지되는 환경과 평형을 이루는 시간을 찾고 싶습니다. 내가 아는 한, 가장 쉬운 방법은 평형 시간이 상대적으로 짧기를 기대하기 때문에 처음 몇 개의 용어 만 사용하여 지수 함수의 Taylor 확장을 사용하는 것입니다. 로드가 상대적으로 작은 길이이기 때문에 사인 함수에 작은 각도 근사를 사용하십시오. 이 작업을 수행하면서 for 루프를 만들어 합계 함수처럼 용어를 생성했습니다. 사용자가 볼 수 있듯이 1000 개의 용어를 사용했습니다.

내가하는 일이 누구에게 잘못되는 것처럼 보입니까? 더 좋은 방법이 있다면, 누군가 그것을 추천 해 줄 수 있습니까?

+1

가장 일반적인 대답은 ['sym/solve'] (http://www.mathworks.com/help/symbolic/solve.html)입니다. 당신이 다항식을 언급한다고 가정하면, 하나의 0, 범위 내의 0 또는 모든 0에 관심이 있습니까? 또한, 어떤 버전의 Matlab을 보유하고 있습니까? – horchler

+0

또한 다항식의 수 또는 변수의 계수가 있습니까? 그리고 이것이 표준 단 변량 다항식 (즉,'x'의 함수)이거나 다 변수입니까? – horchler

+0

@horchler 추가 정보를 제공하여 내 게시물을 업데이트했습니다. 너가 볼 수 있으면, 나는 그것을 평가할 것이다. – Mack

답변

1

x 또는 y의 다항식 또는 삼각 함수가 있다고 가정하고 "0"이 의미하는 것은 함수가 축을 교차하는 값입니다. 즉 x 또는 y가 0이면 값을 호출 할 수 있습니다. 함수의 변수가 0 일례이다 때

syms x y 
f=-cos(x)*exp(-(x^2)/40); 
ezsurf(f,[-10,10]) 

F=matlabFunction(f,'vars',{[x]}); 
F([0]) 

ezsurf 단지 플롯을 가시화. 당신은 x와 y의 함수를 원한다면, 다음과 같이 수행

syms x y 
f=-cos(x)*cos(y)*exp(-(x^2+y^2)/40); 
ezsurf(f,[-10,10]) 

F=matlabFunction(f,'vars',{[x,y]}); 
for y=0 
    solve(f) 
end 

이 당신에게 X의 정수 배수가 Y에 대해 0 점에 해당하는 함수의 값을 줄 것이다 (의 값 함수는 y = 0 평면에 있음).

2

적어도 하나의 근원이 당신의 시간에 따라 실제적이고 긍정적 인 것이라면 상상의 뿌리를 보는 것이 놀랄 일이 아닙니다. 문제는 당신이 만든 근사값 때문에 시간이 의미가 있는지입니다. 실제 함수를 플롯하여 제로가있는 대략적인 근사값을 얻었습니까?

해결하려는 특정 문제에 대해서는 말씀 드릴 수 없습니다. 도메인에 대해 정확한 테일러 확장 용어를 충분히 사용하고 있는지 확인해야합니다. exp 및/또는 sin에 남겨 두었습니까? 0을 사용할 수없는 이유가 있습니까? 그리고 귀하의 합계가 1,000 조건 후에 수렴했는지 확인 했습니까? 아니면 훨씬 더 빨리 수렴 할 것인가?

중요한 질문은 왜 이것을 해결하기 위해 상징적 인 수학을 사용하는 것입니까? 요약에서 오버플로/언더 플로 문제가 발생하지 않는 한 수치적인 문제인 것처럼 보입니다.

S = 

    56.333877640358708 

당신이, 내가 for 루프를 방지하기 위해 다음과 같은 일을 할 것 solve를 사용하려고하는 경우 반환

N = 32; % Number of terms in summation 
x = 1.5; 
T_EQ = 1e-5; 
n = (2*(0:N)+1)*pi; 
T = @(t)sum((72./n.^3).*exp(-n.^2*t/45).*sin(n*x/3))-T_EQ; 
S = fzero(T,[0 1e3]) % Bounds around a root guarantees solution if function monotonic 

:이 경우 fzero를 사용하여 제로를 찾을 수 있습니다

symsum 사용
syms t 
N = 32; 
x = 1.5; 
T_EQ = 1e-5; 
n = (2*sym(0:N)+1)*sym(pi); 
T(t) = sum((72./n.^3).*exp(-n.^2*t/45).*sin(n*x/3)); 
S = double(solve(T-T_EQ==0,t)) 

또는 :

syms n t 
N = 32; 
x = 1.5; 
T_EQ = 1e-5; 
T(t) = symsum((72/(pi*(2*n+1))^3)*exp(-(pi*(2*n+1))^2*t/45)*sin(pi*(2*n+1)*x/3),n,0,N); 
S = double(solve(T-T_EQ==0,t)) 

마지막으로, 귀하의 기호 솔루션은 심지어 귀하의 pi 변수가 합리적인 근사값으로 변환되기 때문에 정확하지 않습니다. pi은 부동 소수점입니다. t이 상징적 인 경우 과 같은 것은 일반적으로 안전합니다. pi이 (는) 이와 같이 인식되기 때문입니다. 그러나 pi^2은 연산 순서로 인해 기호로 변환되기 전에 부동 소수점으로 계산됩니다. 일반적으로 심볼릭 표현에서 sym('pi') 또는 sym(pi)을 사용해야합니다.