Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

functionalDerivative

범함수의 도함수(변분 도함수)

설명

예제

G = functionalDerivative(f,y)는 함수 y = y(x)에 대해 범함수 S[y]=abf[x,y(x),y'(x),...]dx도함수 δSδy(x)를 반환합니다. 여기서 x는 하나 이상의 독립 변수를 나타냅니다. 범함수의 도함수는 y(x)의 작은 변분에 대한 범함수 S[y]의 변동과 관련이 있습니다. 범함수의 도함수는 변분 도함수라고도 합니다.

y가 기호 함수로 구성된 벡터인 경우 functionalDerivativey의 함수에 대한 범함수의 도함수로 구성된 벡터를 반환합니다. 여기서 y의 모든 함수는 동일한 독립 변수에 종속적이어야 합니다.

예제

모두 축소

함수 y에 대해 범함수 S[y]=bay(x)sin(y(x))dx의 도함수를 구합니다. 여기서 피적분 함수는 f[y(x)]=y(x)sin(y(x))입니다.

y(x)를 기호 함수로 선언하고 fS의 피적분 함수로 정의합니다. fyfunctionalDerivative의 파라미터로 사용합니다.

syms y(x)
f = y*sin(y);
G = functionalDerivative(f,y)
G(x) = sin(y(x))+cos(y(x))y(x)sin(y(x)) + cos(y(x))*y(x)

함수 uv에 대해 범함수 S[u,v]=ba(u2(x)dv(x)dx+v(x)d2u(x)dx2)dx의 도함수를 구합니다. 여기서 피적분 함수는 f[u(x),v(x),u(x),v(x)]=u2dvdx+vd2udx2입니다.

u(x)v(x)를 기호 함수로 선언하고 fS의 피적분 함수로 정의합니다.

syms u(x) v(x)
f = u^2*diff(v,x) + v*diff(u,x,x);

기호 함수로 구성된 벡터 [u v]functionalDerivative의 두 번째 입력 인수로 지정합니다.

G = functionalDerivative(f,[u v])
G(x) = 

(2x2 v(x)+2u(x)x v(x)2x2 u(x)-2u(x)x u(x))[diff(v(x), x, 2) + 2*u(x)*diff(v(x), x); diff(u(x), x, 2) - 2*u(x)*diff(u(x), x)]

functionalDerivativeuv에 대해 각각 피적분 함수 f의 범함수의 도함수를 포함하는 기호 함수로 구성된 벡터를 반환합니다.

용수철 상수가 k인 용수철에 연결된 질량 m의 오일러-라그랑주 방정식을 구합니다.

시스템의 운동 에너지 T, 위치 에너지 V, 라그랑주 L을 정의합니다. 라그랑주는 운동 에너지와 위치 에너지 간의 차입니다.

syms m k x(t)
T = 1/2*m*diff(x,t)^2;
V = 1/2*k*x^2;
L = T - V
L(t) = 

mt x(t)22-kx(t)22(m*(diff(x(t), t))^2)/2 - (k*x(t)^2)/2

라그랑주 역학에서 시스템의 작용 범함수는 시간에 따른 랑그랑주의 적분, 즉 S[x]=t1t2L[t,x(t),x˙(t)]dt와 같습니다. 오일러-라그랑주 방정식은 S[x(t)]가 정상(stationary)인 시스템의 운동을 설명합니다.

피적분 함수 L의 범함수의 도함수를 계산하고 이를 0으로 설정하여 오일러-라그랑주 방정식을 구합니다.

eqn = functionalDerivative(L,x) == 0
eqn(t) = 

-m2t2 x(t)-kx(t)=0- m*diff(x(t), t, 2) - k*x(t) == 0

eqn은 질량-용수철 진동을 설명하는 미분 방정식입니다.

dsolve를 사용하여 eqn을 풉니다. 질량 m과 용수철 상수 k가 양수라고 가정합니다. 진동 진폭의 초기 조건을 x(0)=10으로 설정하고 질량의 초기 속도를 x˙(0)=0으로 설정합니다.

assume(m,'positive')
assume(k,'positive')
Dx(t) = diff(x(t),t);
xSol = dsolve(eqn,[x(0) == 10, Dx(0) == 0])
xSol = 

10cos(ktm)10*cos((sqrt(k)*t)/sqrt(m))

추후 계산을 위해 가정을 지웁니다.

assume([k m],'clear')

최속 강하선 문제는 마찰 없이 중력이 작용하는 상태에서 입자의 가장 빠른 하강 경로를 찾는 것입니다. 운동은 수직 평면으로 국한됩니다. 중력 g가 작용할 때 물체가 점 a에서 점 b로 곡선 y(x)를 따라 이동하는 시간은 다음과 같이 계산됩니다.

t=ab1+y22gydx.

경로 y의 작은 변분에 대해 t의 변동을 최소화하여 가장 빠른 경로를 구합니다. 최솟값에 대한 조건은 δtδy(x)=0입니다.

최속 강하선 문제를 설명하는 미분 방정식을 구하기 위해 범함수의 도함수를 계산합니다. simplify를 사용하여 방정식을 원하는 형식으로 단순화합니다.

syms g y(x)
assume(g,'positive')
f = sqrt((1 + diff(y)^2)/(2*g*y));
eqn = functionalDerivative(f,y) == 0;
eqn = simplify(eqn)
eqn(x) = 

2y(x)2x2 y(x)+x y(x)2=-12*y(x)*diff(y(x), x, 2) + (diff(y(x), x))^2 == -1

이 방정식은 최속 강하선 문제의 표준 미분 방정식입니다. 미분 방정식의 해를 구하려면 dsolve를 사용하십시오. 'Implicit' 옵션을 true로 지정하여 F(y(x))=g(x) 형식을 갖는 음함수 해를 반환합니다.

sols = dsolve(eqn,'Implicit',true)
sols = 

(y(x)=C2-xiy(x)=C3+xiσ1=C4+xσ1=C5-xC1+y(x)y(x)=0)where  σ1=C1atan(-C1y(x)-1)-y(x)-C1y(x)-1[y(x) == C2 - x*sym(1i); y(x) == C3 + x*sym(1i); C1*atan(sqrt(- C1/y(x) - 1)) - y(x)*sqrt(- C1/y(x) - 1) == C4 + x; C1*atan(sqrt(- C1/y(x) - 1)) - y(x)*sqrt(- C1/y(x) - 1) == C5 - x; (C1 + y(x))/y(x) == 0]

기호 솔버 dsolve는 복소 공간의 일반해를 반환합니다. Symbolic Math Toolbox™는 기호 함수 y(x)가 실수라는 가정을 허용하지 않습니다.

경계 조건에 따라, 최속 강하선 문제에 대해 두 가지 실수 공간 해가 있습니다. 이 두 가지 해 중 하나(아래)는 실수 공간의 사이클로이드 곡선을 설명합니다.

solCycloid1 = sols(3)
solCycloid1 = 

C1atan(-C1y(x)-1)-y(x)-C1y(x)-1=C4+xC1*atan(sqrt(- C1/y(x) - 1)) - y(x)*sqrt(- C1/y(x) - 1) == C4 + x

solCycloid2 = sols(4)
solCycloid2 = 

C1atan(-C1y(x)-1)-y(x)-C1y(x)-1=C5-xC1*atan(sqrt(- C1/y(x) - 1)) - y(x)*sqrt(- C1/y(x) - 1) == C5 - x

실수 공간에서의 다른 해는 가로 직선입니다. 여기서 y는 상수입니다.

solStraight = simplify(sols(5))
solStraight = C1+y(x)=0C1 + y(x) == 0

사이클로이드 해를 설명하기 위해 경계 조건 y(0)=5y(4)=1을 갖는 예를 고려해 볼 수 있습니다. 이 경우, 주어진 경계 조건을 충족할 수 있는 방정식은 solCycloid2입니다. 두 경계 조건을 solCycloid2에 대입합니다.

eq1 = subs(solCycloid2,[x y(x)],[0 5]);
eq2 = subs(solCycloid2,[x y(x)],[4 1]);

두 방정식 eq1eq2는 미지의 두 계수 C1C5를 갖습니다. vpasolve를 사용하여 이 계수에 대한 수치 해를 구합니다. 이렇게 구한 해를 solCycloid2에 대입합니다.

coeffs = vpasolve([eq1 eq2]);
eqCycloid = subs(solCycloid2,{'C1','C5'},{coeffs.C1,coeffs.C5})
eqCycloid = 

-6.4199192418473511250705556729108atan(6.4199192418473511250705556729108y(x)-1)-y(x)6.4199192418473511250705556729108y(x)-1=-x-5.8078336827583088482183433150164- vpa('6.4199192418473511250705556729108')*atan(sqrt(vpa('6.4199192418473511250705556729108')/y(x) - 1)) - y(x)*sqrt(vpa('6.4199192418473511250705556729108')/y(x) - 1) == - x - vpa('5.8078336827583088482183433150164')

음함수 방정식 eqCycloidxy(x)에 대한 최속 강하선 문제의 사이클로이드 해를 설명합니다.

이제 fimplicit를 사용하여 eqCycloid를 플로팅할 수 있습니다. fimplicit는 기호 변수 xy를 포함하는 음함수 기호 방정식만 허용하므로, 기호 함수 y(x)를 기호 변수 y로 변환합니다. mapSymType을 사용하여 y(x)x로 변환합니다. 경계 조건 0<x<41<y<5 내에서 사이클로이드 해를 플로팅합니다.

funToVar = @(obj) sym('y');
eqPlot = mapSymType(eqCycloid,'symfun',funToVar);
fimplicit(eqPlot,[0 4 1 5])

3차원 공간의 곡면을 설명하는 함수 u(x,y)의 경우, 곡면 면적은 다음 범함수에 의해 결정될 수 있습니다.

F[u]=y1y2x1x2f[x,y(x),u(x,y),ux,uy]dxdy=y1y2x1x21+ux2+uy2dxdy

여기서 uxuyxy에 대한 u의 편도함수입니다.

u에 대해 피적분 함수 f의 범함수의 도함수를 구합니다.

syms u(x,y)
f = sqrt(1 + diff(u,x)^2 + diff(u,y)^2);
G = functionalDerivative(f,u)
G(x, y) = 

-y u(x,y)22x2 u(x,y)+2x2 u(x,y)+σ122y2 u(x,y)-2y σ1y u(x,y)σ1+2y2 u(x,y)σ12+y u(x,y)2+13/2where  σ1=x u(x,y)-((diff(u(x, y), y))^2*diff(u(x, y), x, 2) + diff(u(x, y), x, 2) + diff(u(x, y), x)^2*diff(u(x, y), y, 2) - 2*diff(diff(u(x, y), x), y)*diff(u(x, y), y)*diff(u(x, y), x) + diff(u(x, y), y, 2))/(diff(u(x, y), x)^2 + (diff(u(x, y), y))^2 + 1)^sym(3/2)

결과는 u(x,y)로 정의된 3차원 곡면의 극소 곡면을 설명하는 방정식 G입니다. 이 방정식의 해는 비눗방울과 같은 3차원 공간의 극소 곡면을 설명합니다.

입력 인수

모두 축소

범함수의 피적분 함수로, 기호 변수, 기호 함수 또는 기호 표현식으로 지정됩니다. 인수 f는 범함수의 밀도를 나타냅니다.

미분 함수로, 기호 함수 또는 기호 함수로 구성된 벡터, 행렬, 다차원 배열로 지정됩니다. 인수 y는 하나 이상의 독립 변수로 구성된 함수일 수 있습니다. y가 기호 함수로 구성된 벡터인 경우 functionalDerivativey의 함수에 대한 범함수의 도함수로 구성된 벡터를 반환합니다. 여기서 y의 모든 함수는 동일한 독립 변수에 종속적이어야 합니다.

출력 인수

모두 축소

범함수의 도함수로, 기호 함수 또는 기호 함수로 구성된 벡터로 반환됩니다. 입력값 y가 벡터이면 G도 벡터입니다.

세부 정보

모두 축소

범함수의 도함수

다음 범함수를 가정해 보겠습니다.

S[y]=abf[x,y(x),y'(x),...,y(n)(x)]dx,

이는 x 공간에서 a에서 b까지의 임의 경로를 취할 수 있습니다.

경로 y(x)의 작은 변분에 대해, 변동을 δy(x)=εϕ(x)로 정의합니다. 여기서 ϕ(x)는 임의의 테스트 함수입니다. 범함수 S의 변동은 다음과 같습니다.

DS[y]=limε0S[y+εϕ]S[y]ε=abδSδy(x)ϕ(x)dx.

표현식 δSδy(x)는 y에 대한 S의 범함수의 도함수입니다. 선형 범함수 DS[y]는 범함수 S의 첫 번째 변분 또는 가토 도함수라고도 합니다.

범함수의 도함수를 계산하는 한 가지 방법은 ε에 대한 표현식 S[y + εϕ]에 테일러 전개를 적용하는 것입니다. ε에서 1차 항을 유지하고, 부분 적분을 수행하고, 경계 조건 ϕ(a) = ϕ(b) = ϕ'(a) = ϕ'(b) = ... = 0을 선택하면 범함수의 도함수는 다음과 같이 됩니다.

δSδy(x)=fyddxfy'+d2dx2fy''...+(1)ndndxn(fy(n))=i=0n(1)ididxi(fy(i)).

참고 항목

| |

R2015a에 개발됨