Advertisement
Guest User

kdv_solver

a guest
Dec 13th, 2022
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.96 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. public class KdVSolver : MonoBehaviour
  4. {
  5.     static float delta=0.022f;
  6.     static float delta2=Mathf.Pow(delta, 2);
  7.     public static float[] KdVNumericIntegration(float[] input, float dx)
  8.     {
  9.         float[] output=new float[input.Length];
  10.         float[] thirdDer=ThirdDerivative(input, dx);
  11.         float[] firstDer=FirstDerivative(input, dx);
  12.         for(int i=0; i<input.Length; i++)
  13.         {
  14.             output[i]=input[i]+dx*(-delta2*thirdDer[i]-input[i]*firstDer[i]);
  15.         }
  16.         return output;
  17.     }
  18.     public static float[] ThirdDerivative(float[] input, float dx)
  19.     {
  20.         float[] output=new float[input.Length];
  21.         for(int i=0; i<input.Length; i++)
  22.         {
  23.             if(i>input.Length-3)
  24.             {
  25.                 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);
  26.             }
  27.             else if(i<2)
  28.             {
  29.                 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);
  30.             }
  31.             else
  32.             {
  33.                 output[i]=(-0.5f*input[i-2]+input[i-1]-input[i+1]+0.5f*input[i+2])/Mathf.Pow(dx, 3);
  34.             }
  35.         }
  36.         return output;
  37.     }
  38.     public static float[] FirstDerivative(float[] input, float dx)
  39.     {
  40.         float[] output=new float[input.Length];
  41.         for(int i=0; i<input.Length; i++)
  42.         {
  43.             if(i>input.Length-3)
  44.             {
  45.                 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;
  46.             }
  47.             else if(i<2)
  48.             {
  49.                 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;
  50.             }
  51.             else
  52.             {
  53.                 output[i]=((1f/12)*input[i-2]-(2f/3)*input[i-1]+(2f/3)*input[i+1]-(1f/12)*input[i+2])/dx;
  54.             }
  55.         }
  56.         return output;
  57.     }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement