3 차 ODE의 해와 y = x 선의 교점을 어떻게 찾을 수 있습니까?3 차 ODE와 선 사이의 교차점 찾기?
내 ODE의 코드는
sol=dsolve('D3y-4*D2y+Dy+2*y=0,y(0)=-4,Dy(0)=-6,D2y(0)=-4')
x=0:2
y=subs(sol,'t',x)
plot(x,y)
3 차 ODE의 해와 y = x 선의 교점을 어떻게 찾을 수 있습니까?3 차 ODE와 선 사이의 교차점 찾기?
내 ODE의 코드는
sol=dsolve('D3y-4*D2y+Dy+2*y=0,y(0)=-4,Dy(0)=-6,D2y(0)=-4')
x=0:2
y=subs(sol,'t',x)
plot(x,y)
이 교차의 숫자 값을 찾는 것이다 작성 솔루션과 라인 사이의 교차에서 제로 익명 함수를
을 당신이 추구 :
sol = dsolve('D3y-4*D2y+Dy+2*y=0,y(0)=-4,Dy(0)=-6,D2y(0)=-4');
my_func = @(x) subs(sol,'t',x) - x; % Your solution - x is equal to zero at the %intersections
그래픽으로 값을 찾으려면
최적화 루틴에 의해또는 수치 :
x = fzero(my_func,0); % I find x = -.6847
당신이 값 곳 근처 fzero 기능을 시작해야합니다 있도록 모든 0을 찾을 수 없습니다 0 근처에 함수의 제로를 찾을 것이다 당신은 교차로를 기대합니다. 이 도움이
희망,
앤드류
편집하십시오 방법에 대한 이분법의.
최적화 방법을 사용하여 방정식을 풀고 싶지는 않지만 범위를 알고있는 경우 [range_ {min} range_ {max}] 익명의 1 차원 함수 "my_func"를 얻었 으면 my_func = 0 다음 알고리즘은 연속 함수로 작업 제공, 당신을위한 함수의 제로를 찾을 수 :
range_min = 0; % say our range is [0 2]
range_max = 2;
error_tolerance = .0001; % will find the answer to within .0001
while (range_max - range_min < error_tolerance)
range_temp = (range_max + range_min)/2;
if ((my_func(range_temp) <0 & my_func(range_max)>0) | (my_func(range_temp) >0 & my_func(range_max)<0))
range_min = range_temp;
else if ((my_func(range_min)<0 & my_func(range_temp)>0) | (my_func(range_min)>0 & my_func(range_temp)<0))
range_max = range_temp;
else if (my_func(range_temp == 0)
range_min = range_temp;
range_max = range_temp;
end
end
t_intersection = (range_min + range_max)/2;
그래서 몇 가지 설명 : 함수는 연속, 그리고 당신은 경우 다음 인 경우 t_intersection에서 y = t와 교차하고 나서 수정 된 함수 my_func (t) = sol (t) -t에서 t_intersection에 0이 생깁니다. my_func가 연속적이기 때문에 함수의 두 값, 즉 0보다 크고 0보다 작은 값을 알고 있으면 함수의 제로를 찾을 수 있습니다.
이렇게 알려진 지점부터 시작하여 [range_min range_max] 범위를 정의합니다. 여기서 my_func (range_min) < 0과 my_func (range_max)> 0 또는 그 반대입니다. 그런 다음 중간 값 range_temp = mean (range_min 및 _max)을 만들어이 범위를 반으로 자릅니다. 범위에 대해 my_func의 부호 변경을 유지할 수 있도록 새 range [range_temp range_max] 또는 [range_min range_temp]를 작성합니다. 우리는 만족스러운 정확성에 도달 할 때까지이 과정을 반복합니다.
하나의주의해야 할 점은, 사용자가 제공 한 초기 범위 내에서 하나의 영점 만 찾을 수 있다는 것입니다. 이는 대부분의 제로 찾기 방법에 대한 근본적인 좌절이며,보다 일반적으로 제로 발견이 특별한 경우로 간주 될 수있는 최적화 분야입니다.
나는 행운, 즉 그것을 커버 생각합니다.
--Andrew
음 ... 좋아 ... 어떻게 든 나는 그것을 얻지 않는다 ... 내 말은 - 나는 X가 얼마나 찾을 수 없습니다. 음. t = 0 : .3 : 10; y = sin (t); – Izumi
좋아요 ... 음 ... 글쎄, 하나의 교차점을 찾았지만 간격 [0 2]에서 벗어 났고 분명히 x = 1 주위에있는 다른 교차점을 찾지 못했습니다. , y = 0이다. – Izumi
@ lzumi, 의견 1 : y = t와 y = sin (t)의 교점을 찾으려면 z (t) = sin (t) - t의 0을 찾아야합니다. 다음과 같이하면 matlab에 익명 함수를 만들 수 있습니다. z = @ (t) sin (t) -t; 그런 다음 t_zero = fzero (z, 0)를 찾으십시오. – Sevenless