Advertisement
Guest User

Untitled

a guest
May 31st, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.31 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7.  
  8. namespace ConsoleApplication11
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. Console.WriteLine("Iteration method #1");
  15. (new Methods()).Iterations(-0.1, -0.5);
  16. Console.WriteLine("Newton method #1");
  17. (new Methods()).Newton(-1.2, -0.2);
  18. Console.WriteLine("Newton method #2");
  19. (new Methods()).Newton(1.2, 0.2);
  20. Console.ReadKey();
  21. }
  22. }
  23. }
  24. public class Means {
  25. double alpha = 0.680;
  26. double beta = - 0.456;
  27. double a = 0.747;
  28. double b = -1.329;
  29. double c = 0.768;
  30. double d = 0.397;
  31. public double x(double y) //fint x from 4.1.1.2
  32. {
  33. return (d - Math.Cos(y + beta));
  34. }
  35. public double y(double x)// find y from 4.1.1.1
  36. {
  37. return (c - Math.Sin(x + alpha))/b;
  38. }
  39. public double f1(double x, double y)// 4.2.1.1 with right part = 0
  40. {
  41. return (Math.Tan(x*y+alpha) - x*x);
  42. }
  43. public double f2(double x, double y)// 4.2.1.2 with right part = 0
  44. {
  45. return (a*x*x + b*y*y - 1);
  46. }
  47. public double[] F(double x, double y)// 4.1.1.1,2 with right parts = 0
  48. {
  49. double[] Ft = new double[2];
  50. Ft[0] = Math.Sin(x + alpha) + b*y -c;
  51. Ft[1] = x + Math.Cos(y + beta) - d;
  52. return Ft;
  53. }
  54. public double[,] obr(double x, double y)// 4.1.1 yakobi v -1
  55. {
  56. double[,] W = new double[2,2];
  57. W[0,0] = -Math.Sin(y + beta);
  58. W[0,1] = -b;
  59. W[1,0] = -1;
  60. W[1,1] = Math.Cos(x + alpha);
  61. for(int i = 0; i < 2; i++)
  62. for(int j = 0; j < 2; j++)
  63. W[i,j] /= (-Math.Sin(y+beta) * Math.Cos(x+alpha) - b);
  64. return W;
  65. }
  66. public double[] F1(double x, double y)// 4.2.1.1,2 with right parts = 0
  67. {
  68. double[] Ft1 = new double[2];
  69. Ft1[0] = Math.Tan(x*y + alpha) - x*x;
  70. Ft1[1] = a*x*x +b*y*y - 1;
  71. return Ft1;
  72. }
  73. public double[,] obr1(double x, double y)// 4.2.1 yakobi v -1
  74. {
  75. double[,] W1 = new double[2,2];
  76. W1[0,0] = 2*b*y;
  77. W1[0,1] = -x / Math.Pow(Math.Cos(x*y+alpha),2);
  78. W1[1,0] = -2*a*x;
  79. W1[1,1] = y / Math.Pow(Math.Cos(x * y + alpha), 2) - 2*x;
  80. for(int i = 0; i < 2; i++)
  81. for(int j = 0; j < 2; j++)
  82. W1[i,j] /= (2*b*y*(-y)/Math.Pow(Math.Cos(x*y+alpha),2)
  83. -2*a*x*x/Math.Pow(Math.Cos(x*y+alpha),2));
  84. return W1;
  85. }
  86. public double[] FW(double x, double y)// F1*Winv1
  87. {
  88. double[] temp = new double[2];
  89. temp[0] = 0;
  90. temp[1] = 0;
  91. for(int i = 0; i < 2; i++)
  92. for(int j = 0; j < 2; j++)
  93. temp[i] += F1(x,y)[j]*obr1(x,y)[i,j];
  94. return temp;
  95. }
  96. }
  97.  
  98. public class Methods {
  99. public void Iterations(double xk, double yk)
  100. {
  101. Means ms = new Means();
  102. double xk1 = 0, yk1 = 0, vec = 0, err1 = 0, err2 = 0, x0 = xk, y0 = yk;
  103. int i = 0;
  104. do
  105. {
  106. i++;
  107. xk1 = xk - ms.F(xk,yk)[0]*ms.obr(x0,y0)[0,0] - ms.F(xk,yk)[1]*ms.obr(x0,y0)[0,1];
  108. yk1 = yk - ms.F(xk,yk)[0]*ms.obr(x0,y0)[1,0] - ms.F(xk,yk)[1]*ms.obr(x0,y0)[1,1];
  109. vec = Math.Sqrt(Math.Pow(xk1 - xk, 2) + Math.Pow(yk1 - yk, 2));
  110. xk = xk1;
  111. yk = yk1;
  112. err1 = xk - (new Means()).x(yk);
  113. err2 = yk - (new Means()).y(xk);
  114. Console.WriteLine("Error vector: " + err1 + " " + err2);
  115. Console.WriteLine("x on iter " + i + " " + xk);
  116. Console.WriteLine("y on iter " + i + " " + yk);
  117. } while (Math.Abs(vec) > 0.000001);
  118. Console.WriteLine("Result found on iter " + i + " x:" + xk1 + " y:" + yk1);
  119. Console.WriteLine();
  120. }
  121.  
  122. public void Newton(double xk, double yk)
  123. {
  124. Means ms = new Means();
  125. double xk1 = 0, yk1 = 0, norma = 0, mod = 0;
  126. int i = 0;
  127. do
  128. {
  129. i++;
  130. xk1 = xk - ms.FW(xk,yk)[0];
  131. yk1 = yk - ms.FW(xk,yk)[1];
  132. norma = Math.Sqrt((Math.Pow(ms.f1(xk, yk), 2.0) + Math.Pow(ms.f2(xk, yk), 2.0)));
  133. mod = Math.Sqrt(Math.Pow(xk1 - xk, 2.0) + (Math.Pow(yk1 - yk, 2.0)));
  134. xk = xk1;
  135. yk = yk1;
  136. Console.WriteLine("Norma: " + norma + " mod: " + mod);
  137. Console.WriteLine("x on iter " + i + " " + xk);
  138. Console.WriteLine("y on iter " + i + " " + yk);
  139. } while (Math.Abs(norma) > 0.000001 || Math.Abs(mod) > 0.000001);
  140. Console.WriteLine("Result found on iter " + i + " x:" + xk1 + " y:" + yk1);
  141. Console.WriteLine();
  142. }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement