Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач по инфе.docx
Скачиваний:
31
Добавлен:
29.02.2016
Размер:
996.98 Кб
Скачать

3.4 Программная реализация численного метода

Исходная функция, представленное выражением (2.2), оформляется на форме Form1 в виде следующего:

T[1] = XX;

double P =

C[0] * T[0] + C[1] * T[1];

for (int i = 2; i < N; i++)

{

T[i] = 2 * XX * T[i - 1] * T[i - 2];

P += C[i] * T[i];

}

Программная реализация на языке C# метода Чебышева для интерполирования однопараметрической табличной функции представлена на рисунке 2.1

Листинги форм предоставлены в Приложение А.

4 Тестирование работоспособности программы

4.1 Описание аппаратной конфигурации для тестирования

Тестирование программы выполнялось на компьютере под управлением операционной системы Windows Se7en со следующими характеристиками аппаратной части:

1) центральный процессор:intel core i5-3570CPU 3.40GHz;

2) монитор: 23” HD LCD;

3) оперативная память: 8 Gb;

4) жесткий диск: HDD 1000 Gb;

5) видеоадаптер: GeForse560 GTX;

4.2 Тестирование разработанной программы

Для тестирования программы используется таблица со значениями:

X

Y

1

0.5

2

0.6

3

0.6

4

0.5

При вводе исходных данных и расчета форма KeyBoardIn имеет вид

Рис 4.1 – Введенные исходные данные.

Результаты расчета в виде текстового файла и графика приводятся в Приложении Б.

Рис 4.2 – Поведение программы на неправильно введённые данные.

Заключение

В результате выполнения курсовой работы было произведено описание задачи интерполирования однопараметрической табличной функции полиномом Чебышева, разработана схема алгоритма и написана программа решения на языке программирования С# в среде программирования Microsoft Visual Studio 2012.

Данная программа может использоваться для решения интерполирования на персональных компьютерах в среде Windows XP/Vista/7.

Список использованных источников

1. Шуп, Т. Прикладные численные методы в физике и технике: Пер. с английского./ Т. Шуп, С.Ю. Славянова; под ред. С.П. Ларкурьева. - М.: Высш. шк., 1991.- 252с.

2. Ракитин, В.И., Первушин, В.Е. Практическое руководство по методам вычислений с приложением программ для персональных компьютеров: Учеб. пособие/В.И. Ракитин, В.Е. Первушин. - М.: Высш. шк., 1998. - 393 с.

3. Вычислительная техника и программирование. Интерполяция и аппроксимация табличных функций. Методические указания к курсовой работе для студентов специальности Т11.02 «Автоматизированный электропривод». - Могилев: БРУ, 2004. - 32 с.

4. Научная библиотека избранных естественно-научных изданий: научная библиотека.рф [Электронный ресурс]. – режим доступа: http://alnam.ru/book_bcm.php?id=17. – Дата доступа: 04.12.2013.

Приложение А

Тексты спроектированной программы

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using SimpleSignal;

using WriteBoxXY;

namespace ChabishevMethodProject

{

public partial class Form1 : Form

{

GraphForm gf;

WriteBoxXY.WriteBoxXY wbxy;

KeyBoardIn kbi;

private class MyPoint

{

public double X, Y;

public MyPoint(double x, double y)

{

X = x;

Y = y;

}

}

private double[] GetXFromListMyPoint(List<MyPoint> items)

{

double[] x = new double[items.Count];

for (int i = 0; i < items.Count; i++)

{

x[i] = items[i].X;

}

return x;

}

private double[] GetYFromListMyPoint(List<MyPoint> items)

{

double[] y = new double[items.Count];

for (int i = 0; i < items.Count; i++)

{

y[i] = items[i].Y;

}

return y;

}

public const string PATH = "in.txt";

private double[] X;

private double[][] Y;

private List<MyPoint> _answer;

public Form1()

{

InitializeComponent();

_answer = new List<MyPoint>();

this.rbInFile.Click += GetData;

this.rbInKeyBoard.Click += GetData;

}

private void ReadDataFromFile()

{

using (System.IO.StreamReader read = new System.IO.StreamReader(PATH))

{

string[] split = read.ReadLine().Split();

InitArray(split, out X);

Y = new double[X.Length][];

for (int i = 0; i < X.Length; i++)

{

split = read.ReadLine().Split();

InitArray(split, out Y[i]);

}

read.Close();

}

}

private void InitArray(string[] s, out double[] arr)

{

arr = new double[s.Length];

for (int i = 0; i < s.Length; i++)

{

arr[i] = Convert.ToDouble(s[i]);

}

}

private void GetData(object sender, EventArgs e)

{

if (rbInKeyBoard.Checked)

{

ReadDataFromKeyBoard();

}

ReadDataFromFile();

}

private void ReadDataFromKeyBoard()

{

kbi = new KeyBoardIn();

kbi.Show();

}

private void GetAnswer_Click(object sender, EventArgs e)

{

int N = 0;

try

{

N = Y[0].Length;

}

catch

{

MessageBox.Show("Введи значения!");

return;

}

for (int numberOfIteration = 0; numberOfIteration < X.Length; numberOfIteration++)

{

double XX = X[numberOfIteration];

double[] C = new double[N];

double[] T = new double[N];

T[0] = 1;

for (int i = 0; i < N; i++)

{

C[0] += Y[numberOfIteration][i];

}

C[0] /= (N + 1);

for (int j = 1; j < N; j++)

{

for (int i = 0; i < N; i++)

{

C[j] += Y[numberOfIteration][i] * Math.Cos(j * Math.PI * (2 * i + 1) / (2 * N + 2));

}

C[j] /= N + 1;

}

T[1] = XX;

double P =

C[0] * T[0] + C[1] * T[1];

for (int i = 2; i < N; i++)

{

T[i] = 2 * XX * T[i - 1] * T[i - 2];

P += C[i] * T[i];

}

double YY = P;

_answer.Add(new MyPoint(XX, YY));

}

if (cbPlottFunction.Checked)

{

gf = new GraphForm();

gf.DrawGraph(GetXFromListMyPoint(_answer), GetYFromListMyPoint(_answer));

gf.Show();

}

if (cbShowTable.Checked)

{

wbxy = new WriteBoxXY.WriteBoxXY();

wbxy.AddXY(GetXFromListMyPoint(_answer), GetYFromListMyPoint(_answer));

wbxy.Show();

}

}

}

}