Решить систему диффиренциальных уравнений методом сеток - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Помогите перевести код с Pascal в C#. Не обязательно весь) Мне главное понять концепцию такого перевода и используемые инструменты!
Листинг программы
  1. Program Kanal;
  2. Const
  3. R0=2.0E-3;
  4. H=0.2
  5. T=0.001;
  6. hi=0.3;
  7. Q1=8.0;
  8. Q2=8.0;
  9. J12=0.1;
  10. J21=0.1;
  11. k1=0.07;
  12. Gamma=0.1;
  13. Fi1_0=0.25;
  14. Fi2_N=0.25;
  15. N=100;
  16. Ct=0.5;
  17. Type
  18. Mass=Array[0..N] of Real;
  19. Var
  20. Fi1, Fi2,R : Mass;
  21. dx,dt,time : Real;
  22. j : Integer;
  23. Function k(x:Real):Real;
  24. Begin
  25. k:=k1;
  26. End;
  27. Function Diff(Fi:Real):Real;
  28. Begin
  29. Diff:=(Fi-1)/Fi;
  30. End;
  31. Procedure Progon(Number:Integer; Var Fi,R,W,R_part:Mass);
  32. Var
  33. j: Integer;
  34. d,aj,bj,cj,znam: Real;
  35. Alfa, Beta : Mass;
  36. Begin
  37. If Number=1
  38. Then Begin
  39. Alfa[1]:=0;
  40. End
  41. Else Begin
  42. Alfa[1]:=1;
  43. End;
  44. d:=2*dt/Sqr(dx);
  45. For j:=1 To N-1 Do
  46. Begin
  47. aj:=d*W[j-1];
  48. bj:=d*W[j];
  49. cj:=aj+bj;
  50. znam:=cj-aj;
  51. Alfa[j+1]:=bj/znam;
  52. Beta[j+1]:=R_part[j]+aj;
  53. End;
  54. End;
  55. Begin {Program}
  56. dx:=H/N;
  57. dt:=Ct*Sqr(dx);
  58. Time:=0;
  59. For j:=0 To N Do
  60. Begin
  61. Fi1[j]:=1.0E-3; Fi2[j]:=1.0E-3; R[j]:=R0;
  62. End;
  63. Fi1[0]:=Fi1_0;
  64. Fi2[N]:=Fi2_N;
  65. End;
  66. End.

Решение задачи: «Решить систему диффиренциальных уравнений методом сеток»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace ConsoleApplication1
  7. {
  8.     class Program
  9.     {
  10.         static double k1 = 0.07;
  11.         static int N = 100;
  12.         static double dx = 0;
  13.         static double dt = 0;
  14.         static double Q1 = 8.0;
  15.         static double T = 0.001;
  16.         static double hi = 0.3;
  17.         static double Q2 = 8.0;
  18.         static double J12 = 0.1;
  19.         static double J21 = 0.1;
  20.         static double Gamma = 0.1;
  21.  
  22.         static double Diff(double Fi)
  23.         {
  24.             return (Fi - 1) / Fi;
  25.         }
  26.  
  27.         static double k(double x)
  28.         {
  29.             return k1;
  30.         }
  31.  
  32.         static void Progon(int Number, double[] Fi, double[] R, double[] W, double[] R_part)
  33.         {
  34.             int j;
  35.             double d = 0, aj, bj, cj, znam;
  36.             double[] Alfa = new double[N];
  37.             double[] Beta = new double[N];
  38.  
  39.             if (Number == 1)
  40.             {
  41.                 Alfa[1] = 0;
  42.             }
  43.             else
  44.             {
  45.                 Alfa[1] = 1;
  46.             }
  47.  
  48.             d =2*dt/Math.Sqrt(dx);
  49.             for (j = 1; j <= N - 1; j++)
  50.             {
  51.                 aj = d * W[j - 1];
  52.                 bj = d * W[j];
  53.                 cj = aj + bj;
  54.                 znam = cj - aj;
  55.                 Alfa[j+1] =bj/znam;
  56.                 Beta[j+1] =R_part[j]+aj;
  57.             }
  58.         }
  59.  
  60.         static void Step_time(double[] Fi1, double[] Fi2, double[] R)
  61.         {
  62.             int j;
  63.             double[] W = new double[Program.N];
  64.             double[] R_part = new double[Program.N];
  65.  
  66.             for (j = 0; j <= Program.N; j++)
  67.             {
  68.                 W[j] = Math.Sqrt(R[j]) * Diff(Fi1[j]) * Program.Q1;
  69.                 R_part[j] = Fi1[j] * Math.Sqrt(R[j]) - 2 * dt * Program.Gamma * R[j] - dt * Program.J12 * Math.Sqrt(R[j]) * Fi2[j];
  70.             }
  71.  
  72.             Progon(1, Fi1, R, W, R_part);
  73.  
  74.             for (j = 0; j <= Program.N; j++)
  75.             {
  76.                 W[j] = Diff(Fi2[j]) * Program.Q2;
  77.                 R_part[j] = Fi2[j] - Program.J21 * Fi1[j];
  78.             }
  79.             Progon(2, Fi2, R, W, R_part);
  80.             for (j = 0; j <= Program.N; j++)
  81.                 R[j] = R[j] + dt * k(j * dt) * Fi1[j];
  82.         }
  83.  
  84.         static void Main(string[] args)
  85.         {
  86.             #region values
  87.  
  88.             const double R0 = 2.0E-3;
  89.             const double H = 0.2;
  90.  
  91.             const double Fi1_0 = 0.25;
  92.             const double Fi2_N = 0.25;
  93.             const double Ct = 0.5;
  94.  
  95.             double[] Fi1 = new double[Program.N];
  96.             double[] Fi2 = new double[Program.N];
  97.             double[] R = new double[Program.N];
  98.  
  99.             //double Time = 0;
  100.             //int j;
  101.  
  102.             #endregion
  103.  
  104.             //dx = H / Program.N;
  105.             //dt = Ct * Math.Sqrt(dx);
  106.             //for (j = 0; j <= Program.N; j++)
  107.             //{
  108.             //    Fi1[j] = 1.0E-3; Fi2[j] = 1.0E-3; R[j] = R0;
  109.             //}
  110.             //Fi1[0] = Fi1_0;
  111.             //Fi2[N] = Fi2_N;
  112.  
  113.             dx = H / N;
  114.             dt = Ct * Math.Sqrt(dx);
  115.             double Time = 0;
  116.             for (int j = 0; j <= Program.N; j++)
  117.             {
  118.                 Fi1[j] = 1.0E-3; Fi2[j] = 1.0E-3; R[j] = R0;
  119.             }
  120.             Fi1[0] = Fi1_0;
  121.             Fi2[N] = Fi2_N;
  122.             while (Time < T)
  123.             {
  124.                 Time = Time + dt;
  125.                 Step_time(Fi1, Fi2, R);
  126.             }
  127.             Console.WriteLine(" time= {0}", Time);
  128.         }
  129.    
  130.     }
  131. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы