Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication11
- {
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("Iteration method #1");
- (new Methods()).Iterations(-0.1, -0.5);
- Console.WriteLine("Newton method #1");
- (new Methods()).Newton(-1.2, -0.2);
- Console.WriteLine("Newton method #2");
- (new Methods()).Newton(1.2, 0.2);
- Console.ReadKey();
- }
- }
- }
- public class Means {
- double alpha = 0.680;
- double beta = - 0.456;
- double a = 0.747;
- double b = -1.329;
- double c = 0.768;
- double d = 0.397;
- public double x(double y) //fint x from 4.1.1.2
- {
- return (d - Math.Cos(y + beta));
- }
- public double y(double x)// find y from 4.1.1.1
- {
- return (c - Math.Sin(x + alpha))/b;
- }
- public double f1(double x, double y)// 4.2.1.1 with right part = 0
- {
- return (Math.Tan(x*y+alpha) - x*x);
- }
- public double f2(double x, double y)// 4.2.1.2 with right part = 0
- {
- return (a*x*x + b*y*y - 1);
- }
- public double[] F(double x, double y)// 4.1.1.1,2 with right parts = 0
- {
- double[] Ft = new double[2];
- Ft[0] = Math.Sin(x + alpha) + b*y -c;
- Ft[1] = x + Math.Cos(y + beta) - d;
- return Ft;
- }
- public double[,] obr(double x, double y)// 4.1.1 yakobi v -1
- {
- double[,] W = new double[2,2];
- W[0,0] = -Math.Sin(y + beta);
- W[0,1] = -b;
- W[1,0] = -1;
- W[1,1] = Math.Cos(x + alpha);
- for(int i = 0; i < 2; i++)
- for(int j = 0; j < 2; j++)
- W[i,j] /= (-Math.Sin(y+beta) * Math.Cos(x+alpha) - b);
- return W;
- }
- public double[] F1(double x, double y)// 4.2.1.1,2 with right parts = 0
- {
- double[] Ft1 = new double[2];
- Ft1[0] = Math.Tan(x*y + alpha) - x*x;
- Ft1[1] = a*x*x +b*y*y - 1;
- return Ft1;
- }
- public double[,] obr1(double x, double y)// 4.2.1 yakobi v -1
- {
- double[,] W1 = new double[2,2];
- W1[0,0] = 2*b*y;
- W1[0,1] = -x / Math.Pow(Math.Cos(x*y+alpha),2);
- W1[1,0] = -2*a*x;
- W1[1,1] = y / Math.Pow(Math.Cos(x * y + alpha), 2) - 2*x;
- for(int i = 0; i < 2; i++)
- for(int j = 0; j < 2; j++)
- W1[i,j] /= (2*b*y*(-y)/Math.Pow(Math.Cos(x*y+alpha),2)
- -2*a*x*x/Math.Pow(Math.Cos(x*y+alpha),2));
- return W1;
- }
- public double[] FW(double x, double y)// F1*Winv1
- {
- double[] temp = new double[2];
- temp[0] = 0;
- temp[1] = 0;
- for(int i = 0; i < 2; i++)
- for(int j = 0; j < 2; j++)
- temp[i] += F1(x,y)[j]*obr1(x,y)[i,j];
- return temp;
- }
- }
- public class Methods {
- public void Iterations(double xk, double yk)
- {
- Means ms = new Means();
- double xk1 = 0, yk1 = 0, vec = 0, err1 = 0, err2 = 0, x0 = xk, y0 = yk;
- int i = 0;
- do
- {
- i++;
- xk1 = xk - ms.F(xk,yk)[0]*ms.obr(x0,y0)[0,0] - ms.F(xk,yk)[1]*ms.obr(x0,y0)[0,1];
- yk1 = yk - ms.F(xk,yk)[0]*ms.obr(x0,y0)[1,0] - ms.F(xk,yk)[1]*ms.obr(x0,y0)[1,1];
- vec = Math.Sqrt(Math.Pow(xk1 - xk, 2) + Math.Pow(yk1 - yk, 2));
- xk = xk1;
- yk = yk1;
- err1 = xk - (new Means()).x(yk);
- err2 = yk - (new Means()).y(xk);
- Console.WriteLine("Error vector: " + err1 + " " + err2);
- Console.WriteLine("x on iter " + i + " " + xk);
- Console.WriteLine("y on iter " + i + " " + yk);
- } while (Math.Abs(vec) > 0.000001);
- Console.WriteLine("Result found on iter " + i + " x:" + xk1 + " y:" + yk1);
- Console.WriteLine();
- }
- public void Newton(double xk, double yk)
- {
- Means ms = new Means();
- double xk1 = 0, yk1 = 0, norma = 0, mod = 0;
- int i = 0;
- do
- {
- i++;
- xk1 = xk - ms.FW(xk,yk)[0];
- yk1 = yk - ms.FW(xk,yk)[1];
- norma = Math.Sqrt((Math.Pow(ms.f1(xk, yk), 2.0) + Math.Pow(ms.f2(xk, yk), 2.0)));
- mod = Math.Sqrt(Math.Pow(xk1 - xk, 2.0) + (Math.Pow(yk1 - yk, 2.0)));
- xk = xk1;
- yk = yk1;
- Console.WriteLine("Norma: " + norma + " mod: " + mod);
- Console.WriteLine("x on iter " + i + " " + xk);
- Console.WriteLine("y on iter " + i + " " + yk);
- } while (Math.Abs(norma) > 0.000001 || Math.Abs(mod) > 0.000001);
- Console.WriteLine("Result found on iter " + i + " x:" + xk1 + " y:" + yk1);
- Console.WriteLine();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement