private static void SaveCurrentLayer(double[] currentLayer, EquationSolveAnswer answer) { for (int i = 0; i < currentLayer.Length; i++) { answer.LastLayer[i] = currentLayer[i]; } }
private void FillNodes(int spaceIntervals, int spaceNodesCount, EquationSolveAnswer answer) { for (var i = 0; i < spaceNodesCount; i++) { answer.Nodes[i] = LeftBoundary + (RightBoundary * i) / spaceIntervals; } }
public EquationSolveAnswer Solve(double timeOfEnd, int spaceIntervals, int timeIntervals) { var spaceNodesCount = spaceIntervals + 1; var timeNodesCount = timeIntervals + 1; var answer = new EquationSolveAnswer { LastLayer = new double[spaceNodesCount], Nodes = new double[spaceNodesCount], TimeOfEnd = timeOfEnd }; FillNodes(spaceIntervals, spaceNodesCount, answer); var previousLayer = new double[spaceNodesCount]; var currentLayer = new double[spaceNodesCount]; InitializeFirstLayer(currentLayer, spaceNodesCount, answer); var timeStep = (timeOfEnd / timeIntervals); var spaceStep = (RightBoundary - LeftBoundary) / spaceIntervals; for (int i = 1; i < timeNodesCount; i++) { var currentTime = i * timeStep; SwapLayers(ref currentLayer, ref previousLayer); SolveNextLayer(previousLayer, currentLayer, currentTime, answer.Nodes, timeStep, spaceStep); } SaveCurrentLayer(currentLayer, answer); return(answer); }
private void InitializeFirstLayer(double[] previousLayer, int spaceNodesCount, EquationSolveAnswer answer) { for (var i = 0; i < spaceNodesCount; i++) { previousLayer[i] = StartCondition(answer.Nodes[i]); } }