- •Содержание
- •Введение
- •Описание поставленной задачи
- •Краткая характеристика численного метода
- •Анализ литературы и программ
- •Формирование требований к программе
- •2 Проектирование схем алгоритма
- •2.1 Разработка алгоритма головной программы
- •2.2 Проектирование алгоритма ввода и вывода данных
- •Ввод таблицыВвод точки xXс контролем
- •2.3 Проектирование алгоритма численного метода
- •3 Кодирование программы в среде программирования
- •3.1 Разработка структуры программы
- •3.2 Разработка интерфейса пользователя
- •3.2.1 Разработка интерфейса главной формы
- •3.3 Программирование ввода данных
- •3.4 Программная реализация численного метода
- •4 Тестирование работоспособности программы
- •Приложение б
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();
}
}
}
}