Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- public class KdVSolver : MonoBehaviour
- {
- static float delta=0.022f;
- static float delta2=Mathf.Pow(delta, 2);
- public static float[] KdVNumericIntegration(float[] input, float dx)
- {
- float[] output=new float[input.Length];
- float[] thirdDer=ThirdDerivative(input, dx);
- float[] firstDer=FirstDerivative(input, dx);
- for(int i=0; i<input.Length; i++)
- {
- output[i]=input[i]+dx*(-delta2*thirdDer[i]-input[i]*firstDer[i]);
- }
- return output;
- }
- public static float[] ThirdDerivative(float[] input, float dx)
- {
- float[] output=new float[input.Length];
- for(int i=0; i<input.Length; i++)
- {
- if(i>input.Length-3)
- {
- output[i]=(2.5f*input[i]-9*input[i-1]+12*input[i-2]-7*input[i-3]+1.5f*input[i-4])/Mathf.Pow(dx, 3);
- }
- else if(i<2)
- {
- output[i]=(-2.5f*input[i]+9*input[i+1]-12*input[i+2]+7*input[i+3]-1.5f*input[i+4])/Mathf.Pow(dx, 3);
- }
- else
- {
- output[i]=(-0.5f*input[i-2]+input[i-1]-input[i+1]+0.5f*input[i+2])/Mathf.Pow(dx, 3);
- }
- }
- return output;
- }
- public static float[] FirstDerivative(float[] input, float dx)
- {
- float[] output=new float[input.Length];
- for(int i=0; i<input.Length; i++)
- {
- if(i>input.Length-3)
- {
- output[i]=output[i]=((25f/12)*input[i]-4*input[i-1]+3*input[i-2]-(4f/3)*input[i-3]+0.25f*input[i-4])/dx;
- }
- else if(i<2)
- {
- output[i]=(-(25f/12)*input[i]+4*input[i+1]-3*input[i+2]+(4f/3)*input[i+3]-0.25f*input[i+4])/dx;
- }
- else
- {
- output[i]=((1f/12)*input[i-2]-(2f/3)*input[i-1]+(2f/3)*input[i+1]-(1f/12)*input[i+2])/dx;
- }
- }
- return output;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement