Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТАБУЛИРОВАНИЕ ТРАНСЦЕНДЕНТНЫХ ФУНКЦИЙ.docx
Скачиваний:
157
Добавлен:
06.01.2017
Размер:
60.85 Кб
Скачать

Листинг программы:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.IO;

using System.Collections;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int a = 0;

int b = 4;

for (int r = 5; r < 35; r++)

{

int n = r;

if (n % 10 == 0) n++; //избегаем делимости на 10

double h = (b - a) / (double)n;

double[] x = new double[n + 1];

double[] s = new double[n + 1];

double[] x_ch = new double[n + 1];//чебышев

double[] s_ch = new double[n + 1];

for (int i = 0; i < n + 1; i++)

{

x[i] = a + i * h;// для первой части задания

// узлы Чебышева

x_ch[i] = (b - a) / 2 * Math.Cos(Math.PI * (2 * i + 1) / (2 * n + 2)) + (a + b) / 2;

s[i] = Summ(x[i]);

s_ch[i] = Summ(x_ch[i]);

}

int m = 10;

double h2 = (b - a) / (double)m;

double[] x2 = new double[m+1];//не трогаем

double[] s2 = new double[m+1];//не трогаем

double[] l = new double[m+1];

double[] l_ch = new double[m + 1];

for (int i = 0; i < m + 1; i++)

{

x2[i] = a + i * h2;

s2[i] = Summ(x2[i]);

}

double err = 0; // макс. погрешность

double err_ch = 0;// погрешность для чебышева

for (int i = 0; i < m + 1; i++)

{

l[i] = L(x2[i], x, s, n);

if (Math.Abs(s2[i] - l[i]) > err) err = Math.Abs(s2[i] - l[i]);

l_ch[i] = L(x2[i], x_ch, s_ch, n);

if (Math.Abs(s2[i] - l_ch[i]) > err_ch) err_ch = Math.Abs(s2[i] - l_ch[i]);

}

using (StreamWriter sr = new StreamWriter("C:/Users/Роман/Desktop/result.txt",true))

{

// Для табулирования

/* for (int i = 0; i < m + 1; i++)

{

sr.Write("{0:0.######} \t", x2[i]);

sr.Write("{0:0.######} \t", s2[i]);

sr.Write("{0:0.######} \t", l[i]);

sr.WriteLine("{0:0.######} \t", Math.Abs(s2[i] - l[i]));

}*/

// Для погрешностей

sr.Write(n + "\t");

sr.WriteLine("{0:0.#########}", err);

}

//чеба

using (StreamWriter sr = new StreamWriter("C:/Users/Роман/Desktop/result_cheb.txt", true))

{

// Для табулирования

/*for (int i = 0; i < m + 1; i++)

{

sr.Write("{0:0.######} \t", x2[i]);

sr.Write("{0:0.######} \t", s2[i]);

sr.Write("{0:0.######} \t", l_ch[i]);

sr.WriteLine("{0:0.######} \t", Math.Abs(s2[i] - l_ch[i]));

}*/

// Для погрешностей

sr.Write(n + "\t");

sr.WriteLine("{0:0.#########}", err_ch);

}

}

}

public static double Summ(double x)

{

const double eps = 0.000001;

int i = 0;

double s = 0;

double ai = x;

double qn = 0;

while (Math.Abs(ai) >= eps)

{

s = s + ai;

qn = (-x * x * (2 * i + 1)) / ((2 * i + 3) * (2 * i + 3) * (2 * i + 2));

ai = ai * qn;

i++;

}

return s;

}

public static double L(double x_main, double[] x, double[] sum, int n)

{

double l = 0;

for (int i = 0; i < n + 1; i++)

{

double p = 1;

for (int j = 0; j < n + 1; j++)

{

if (j != i)

{

p = p * ((x_main - x[j]) / (x[i] - x[j]));

}

}

l += sum[i] * p;

}

return l;

}

}

}