variation method