Использование кубического сплайна при решении электротехнических задач
Министерство науки и образования Украины
Донецкий национальный технический университет
Кафедра вычислительной
математики и программирования
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе по курсу
«Введение в информатику»
ТЕМА КУРСОВОЙ РАБОТЫ
Использование кубического сплайна при решении
электротехнических задач
Выполнил студент группы ЗИУ-10 ,ЭТФ
Коваленко А.В.
Руководитель работы Алексеев Е.Р.
Донецк 2011
Министерство образования и науки Украины
Донецкий национальный технический университет
Кафедра вычислительной
математики и программирования
ЗАДАНИЕ
на курсовую работу по курсу
«Введение в информатику»
Студенту группы ЗИУ-10,ЭТФ, КоваленкоА.В.
ТЕМА КУРСОВОЙ РАБОТЫ
Использование интерполирования
кубическими сплайнами
при решении электротехнических задач
Дата выдачи задания____________
Срок сдачи работы ____________
Руководитель Алексеев Е.Р.
Донецк 2011
Оглавление
Аннотация………………………………………………………
Введение…………………………………………………………
1. Постановка задачи 6
2. Описание математической модели решения задачи 7
3. Постановка задачи…………………………………
2. Описание математической
3. Блок-схема …………………………………………………
4. Описание алгоритма ……………………………
5. Характеристика данных и их
условные обозначения ………......
6. Текст программы………………………………………
7. Контрольный пример………………………………
7.1. Контрольный расчет………………………………
7.2. Результаты расчета с помощью
Scilab......……………………..........
7.3. График экспериментальной зависимости и подобранной функции, выполненный в Scilab23
8. Анализ результатов ……………………………
Заключение……………………………………………………
Списки используемой литературы……………………………………......
Аннотация
Объектом исследования является табличная зависимость тока ротора от коэффициента нагрузки асинхронного двигателя АИУМ225М4 при номинальном напряжении.
Программа предназначена для построения кубического сплайна зависимости тока ротора от коэффициента нагрузки. В программе исходные данные β и I. Исходные данные считываются из текстового файла aium225m4.txt, а записываются в файл rezult.txt. В результате исследований необходимо получить значение тока ротора при определенных коэффициентах нагрузки и влиянии тока холостого хода.
Данная программа разработана на зыке С++. С помощью математического пакета – Scilab строится график по исходным данням, а также строится график по полученным данным.
Введение
Темой моего курсового является решение электротехнической задачи с применением интерполяции функции, в моём случае это кубический сплайн. Курсовая работа предназначена для закрепления знаний, приобретённых во время изучения курса «Введение в информатику» и использовании их при решении реальной задачи электротехники.
В этой работе требуется построить кубический сплайн зависимости I2(β) и вычислить значения пусковых токов при заданных нагрузках. Используется функция, вычисляющая коэффициент сплайна.
Написание данной программы
очень важно, так как она значительно
облегчает работу в электротехнических
задачах при расчёте пусковых
токов асинхронных двигателей. Показателем
работы программы является график, построенный
по полученным данным – это графическое
решение задачи.
Постановка задачи
Вариант 8.
1.Известна табличная
Таблица 1.1. Экспериментальные данные
в |
1.5 |
1.3 |
1.1 |
1 |
0.8 |
0.7 |
0.5 |
0.2 |
x.x.(0) |
I2 |
91 |
77 |
65 |
60 |
49 |
43 |
34 |
22 |
20.6 |
2.Ввести табличные данные
и проанализировать
3.Рассчитать коэффициенты интерполяционного сплайна , написав программу на языке С++. Найти значение пусковых токов при нагрузках 0.64, 0.9, 1.2.
В программе исходные данные считывать из диалогового окна или из файла aium225m4.txt. Результаты вычислений сохранить в текстовом файле result.txt. Средствами математического пакета или электронных таблиц проверить результаты работы программы, построить график экспериментальной зависимости и подобранной функции.
Описание математической модели решения задачи
Сплайн – интерполяция
Сплайн-интерполяция − задача проведения гладких кривых по заданным граничным точкам. Поскольку через две точки можно провести сколь угодно много гладких кривых, то для решения этой задачи необходимо ограничить класс функций, которые будут определять искомую кривую. Математическими сплайнами называют функции, используемые для аппроксимации кривых. Важным их свойством является простота вычислений. На практике часто используют сплайны вида полиномов третьей степени. С их помощью довольно удобно проводить кривые, которые интуитивно соответствуют человеческому субъективному понятию гладкости. Термин “сплайн” происходит от английского spline – что означает гибкую полоску стали, которую применяли чертежники для проведения плавных кривых, например, для построения обводов кораблей или самолетов.
Рассмотрим один из вариантов интерполяции кубическими сплайнами. Недеформируемая линейка между соседними узлами проходит по линии, удовлетворяющей уравнению:
I2(β)=0 (1)
Функцию I(β) будем использовать для интерполяции звисимости y(β), заданной на интервале (a,b) в узлах a= β 0, β 1,…,b= β n значениями y0,y1,…,yn.
Кубическим сплайном, интерполирующим на отрезке [a,b] данную функцию I(β), называется функция:
gk(s)=ak+bk(s - β k)+ck(s - β k)2+dk(s - β k)3, s Є[β k-1, β k], k=1,…,n, (1.1)
удовлетворяющая следующим условиям:
1)gk(β k)=Ik; gk(β k-1)=Ik-1 (условие интерполяции в узлах сплайна);
2)функция g(β) дважды непрерывно дифференцируема на интервале [a,b];
3)на концах интервала
функция должна удовлетворять
следующим соотношениям g1’’(a)
Для построения интерполяционного сплайна нужно найти 4n коэффициентов ak,bk,ck,dk (k=1,2,…,n).
Из определения сплайна получаем n-1 соотношение:
g1(β 0)=y0; gk(β k)=yk (k=1,2,…,n) (1.2)
Из гладкой стыковки звеньев сплайна(во внутренних узловых точках совпадают значения двух соседних звеньев сплайна, их первые и вторые производные) получаем ряд соотношений:
gk-1(β k-1)=gk(β k-1),k=2,3,…,n,
gk-1 β xk-1)=g’k(β k-1), k=2,3,…,n, (1.3)
g”k-1 β xk-1)=g”k(β k-1), k=2,3,…,n,
g”1(β 0)=0, g”n(β n)=0. (1.4)
Соотношения (1.2)-(1.4) образуют 4n соотношений для нахождения коэффициентов сплайна. Подставляя соотношения функций (1.1) и их производных (1.5)
g’k (s) = bk+ 2ck ( s- β k ) + 3dk ( s- β k )2
g’’k (s) = 2ck + 6dk (s- β k ) (1.5)
в соотношения (1.2)-(1.4) и принимая во внимание соотношение
hk= β k- β k-1, k=1,2,…,n, (1.6)
получим следующую систему уравнений:
a1-b1h1+c1h12-d1h13=y0, (1.7)
ak=yk, k=1,2,…n, (1.8)
ak-1=ak-bkhk+ckhk2-dkhk3; k=2,3,…n, (1.9)
bk-1=bk – 2ckhk + 3dkhk3; k=2,3,…n, (2.0)
ck-1=ck-3dkhk; k=2,3,…n, (2.1)
c1-3d1h1=0, (2.2)
cn=0 (2.3)
Задача интерполяции свелась к решению системы (1.7)-(2.3). Из соотношения (1.8) следует, что все коэффициенты ak=yk, k=1,2,…n. Подставив соотношения (1.7),(1.8) в (1.9) и используя фиктивный коэффициент c0=0, получим соотношения между bk, ck, dk:
bkhk – ckhk2+ dkhk3 = yk – yk-1. (2.4)
Отсюда коэффициенты bk вычисляются при k=1,2,…n по формуле:
bk=((yk – yk-1)/hk)+ckhk-dhhk2 (2.5)
Из (2.1) и (2.2) выразим dk через ck (с учётом коэффициента c0=0):
dk= ((ck –ck-1)/3hk); k=1,2,…,n. (2.6)
Подставим (2.6) в (2.5):
bk=((yk – yk-1)/hk)+2/3 ckhk+1/3 ck-1hk; k=1,2,…,n. (2.7)
Введём обозначение
lk=(yk – yk-1)/hk; k=1,2,…,n, (2.8)
после чего соотношение (2.7) примет вид:
bk=lk++2/3 ckhk+1/3 ck-1hk; k=1,2,…,n. (2.9)
Подставим (2.9) и (2.6) в соотношение (2.0), получим систему относительно сk:
hk-1ck-2+2(hk-1+hk)ck-1+hkck=
c0=0,cn=0. (2.11)
Систему (2.10) можно решить, используя метод прогонки. Этот метод сводится к нахождению прогоночных коэффициентов по формулам прямой прогонки:
δ1=-h2/2(h1+h2), λ=3(l2-l1)/2(h1+h2), (2.12)
δk-1=-hk/(2hk-1+2hk+hk-1δk-2), k=3,4,…,n, (2.13)
λk-1=(3lk-3lk-1-hk-1λk-2)/(2hk
А затем к нахождению искомых коэффициентов ck по формулам обратной прогонки:
ck-1= δk-1ck+λk-1; k =n, n 1, …,2. (2.14)
После нахождения коэффициентов с по формуле (2.14) находим b и d по формулам (2.6) и (2.9).
3.Блок-схемы
Ниже предоставлена блок-схема функции Koef_spline расчета коэффициентов сплайна.
Рис.3.1 Функции Koef_spline
Рис.3.2 Блок-схема алгоритма сплайн-интерполяции.
4. Описание алгоритма.
Алгоритм расчетов интерполяционного сплайна состоит из следующих этапов:
- Функция расчета коэффициентов сплайна (Koef_spline):
1) Ввод значений табличной зависимости у(х), массивов х и у;
2) Расчет элементов массивов h и l по формулам (1.6-2.8);
3) Расчет массивов пригоночных коэффициентов δ и λ по формулам (2.12-2.13);
4) Расчет массивов коэффициентов с по формулам (2.14);
5) Расчет массивов коэффициентов b и d по формулам (2.6) и (2.9).
- Главная функция (int main):
6) ввод размерности массивов и самих массивов;
7) вызов функции упорядочивания;
8) ввод массива Um промежуточных экспериментальных значений коэффициентов нагрузки β;
9) расчет ожидаемого значения;
10) запись результатов в текстовый файл.
5. Характеристика данных и их условные обозначения.
Все значения приведены в таблице 5.1.
№ п.п |
Наименование данных |
Обозначение в блок-схеме |
Обозначение в программе |
Тип переменных |
1. |
Массив с исходными данными (соответствует коэффициенту нагрузки в) |
X[i] |
*x |
float |
2. |
Массив с исходными данными (соответствует току ротора I2(А) ) |
Y[i] |
*y |
float |
3. |
Количество элементов |
N |
N |
int |
4. |
Переменная цикла |
i |
i |
int |
5. |
Переменная цикла |
k |
k |
float |
6. |
Массив, коэффициент сплайна |
а[k] |
*a |
float |
7. |
Массив, коэффициент сплайна |
b[k] |
*b |
float |
8. |
Массив, коэффициент сплайна |
c[k] |
*c |
float |
9. |
Массив, коэффициент сплайна |
d[k] |
*d |
float |
10. |
Номер интервала в котором находится значение |
j |
j |
int |
11. |
Переменная цикла |
m |
m |
float |
12. |
Массив выводимых данных |
Pm |
P[m] |
float |
13. |
Массив выводимых данных |
Um |
U[m] |
float |
14 |
Массив количество точек |
h[k] |
*h |
float |
15. |
Текстовый файл aium225m4.txt где хранятся исходные данные |
- |
*f |
FILE |
16. |
Текстовый файл rezult.txt где записываются результаты работы программы |
- |
*g |
FILE |
Таблица 5.1. Характеристика данных программы и их условные обозначения.
6. Текст программы.
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <math.h>
float koeffizient_splaina(float*x,
{
int k;
float *h;
float *L,*D,*l;
h=new float[N+1]; // расширение памяти массиву h
l=new float[N+1]; // расширение памяти массиву l
D=new float[N+1]; // расширение памяти массиву D
L=new float[N+1]; // расширение памяти массиву L
for(k=1;k<=N;k++)
h[k]=x[k]-x[k-1];
for(k=1;k<=N;k++)
{
l[k]=(y[k]-y[k-1])/h[k]; // расчет значений элементов массивов h иl
}
D[1]=-h[2]/(2*(h[1]+h[2]));
L[1]=1,5*(l[2]-l[1])/(h[1]+h[
for(k=3;k<=N;k++)
{
D[k-1]=-h[k]/(2*h[k-1]+2*h[k]+
L[k-1]=(3*l[k]-3*l[k-1]-h[k-1]
}
c[N]=0;c[0]=0;
for(k=N;k>=2;k--)
c[k-1]=D[k-1]*c[k]+L[k-1];
for(k=1;k<=N;k++)
{d[k]=(c[k]-c[k-1])/(3*h[k]);
b[k]=l[k]+(2*c[k]*h[k]+h[k]*c[
delete []l;
delete []h;
delete []D;
delete []L;
return 0;
}
int main(int argc, char* argv[])
{int N;
FILE *g;
FILE *f;
f=fopen("E:\\rezult.txt","a+")
g=fopen("E:\\aium225m4.txt.
fscanf(g,"%d",&N);
cout<<"n="<<N<<"\t";
float *x,*y,*U,*a,*b,*c,*d,*P;
int i,j,m;
x=new float[N+1];
y=new float[N+1];
P=new float[N+1];
U=new float[N+1];
c=new float[N+1];
d=new float[N+1];
b=new float[N+1];
a=new float[N];
for(i=0;i<=N;i++)
{fscanf (g,"%f",&x[i]);
cout<<"x["<<i<<"]"<<"="<<x[i]<
cout<<"\n";
for(i=0;i<=N;i++)
{fscanf(g,"%f",&y[i]);
// f>>y[i];
cout<<"y["<<i<<"]"<<"="<<y[i]<
for(i=0;i<3;i++)
{fscanf(g,"%f",&U[i]);
//f>>U[i];
cout<<"U["<<i<<"]"<<"="<<U[i]<
koeffizient_splaina(x,y,N,b,c,
for(i=0;i<N;i++)
a[i]=y[i];
for(i=0;i<=N;i++)
{
cout<<"a("<<i<<")="<<a[i-1]<<"
cout<<"b("<<i<<")="<<b[i]<<"\
cout<<"c("<<i<<")="<<c[i]<<"\
cout<<"d("<<i<<")="<<d[i-1]<<"
}
for(m=0;m<3;m++)
{if(U[m]>x[N-1])
j=N-1;
else
{
for(i=1;i<N;i++)
if(x[i]>U[m])
{j=i;break;}}
P[m]=a[j]+b[j]*(U[m]-x[j])+c[
printf("P=%5.2f \n",P[m]); } for(i=0;i<3;i++)
{
fprintf(f,"P=%5.2f \t",P[m]);
fprintf(f,"U=%5.2f \t",U[m]);
}
delete []x;
delete []y;
delete []P;
delete []U;
fclose(g);
fclose(f);
return 0;
}
7. Контрольный пример.
7.1 Контрольный расчет
С помощью данной программы я получила ожидаемое значение тока при коэффициента нагрузки при значениях = 0.64; 0.9;1.2.
Ниже показан screenshot работы программы в среде Microsoft Visual C++ 6.0.
Рис. 7.1. Screenshot работы результата программы.
Как мы видим, что найдены значение пусковых токов при нагрузках U[0]=0.64, U[1]= 0.9, U[2]=1.2. Т.е. P[0]=39,92; P[1]=54,25; P[2]=70,64.
7.2. Результаты расчета с помощью Scilab
x=[0 0.2 0.5 0.7 0.8 1 1.1 1.3 1.5];
y=[20.6 22 34 43 49 60 65 77 91];
koeff=splin(x,y);
X=[0.64 1.2 0.9];
Y=interp(X,x,y,koeff)
Запуск программы:
загрузка исходного окружения
-->exec('E:\Документы\
-->x
x =
0. 0.2 0.5 0.7 0.8 1. 1.1 1.3 1.5
-->y
y =
20.6 22. 34. 43. 49. 60. 65. 77. 91.
-->X
X =
0.64 1.2 0.9
-->interp(X,x,y,koeff)
ans =
39.970661 70.648609 54.771506
7.3. График экспериментальной зависимости и подобранной функции, выполненный в Scilab
Рис. 7.3 График экспериментальной зависимости в Scilab
8. Анализ работы.
В результате работы программы я получила следующие значения пусковых токов I1=39,92; I2=54,25; I3=70,64. A в результате проверки работы программы в математическом пакете Scilab результаты были таковыми: I1= 39.970661 ; I2= 54.771506 ; I3=70.648609. Данные результаты свидетельствуют о правильности работы программы и вычислении данных с небольшой погрешностью.
Заключение
В данной курсовой работе я написала программу для вычисления тока ротора от коэффициента нагрузки предельной АД при номинальном напряжении и токе холостого хода с помощью методом кубической интерполяции. А также проверила правильность работы программы в математическом пакете Scilab и построила график экспериментальных зависимостей в ________ и подобранных функций.
Списки используемой литературы:
1. Алексеев Е.Р., Чеснокова О.В.,, Рудченко Е.А., Scilab: Решение инженерных и математических задач, М., 2008.-269с.
2. Алексеев Е.Р., Чеснокова О.В., Решение задача вычислительной математики в пакетах Mathcad 12, Matab 7, Maple 9, М., 2006.-496с.
- Хахаев И.А., Машков В.В. и др., OpenOffice.org: Теория и практика, М., 2008.-319с.
Приложения
Внизу показаны скриншоты работы программы. Приложение 1 – текстовый файл с начальными данными. Приложение 2 – текстовый файл с данными полученными программой.
Приложение 1
Приложение 2

- Использование куклотерапии в работе с заикающимися детьми старшего дошкольного возраста
- Использование лабораторных животных в лабораторной диагностике особо опасных вирусных инфекций
- Использование лазеров в метрологии
- Использование лидеров мнений в рекламных кампаниях
- Использование лидеров мнений в рекламных кампаниях
- Использование Лизинга в деятельности компании
- Использование лизинга в деятельности компании на примере ЗАО «РУССКИЙ ХЛЕБ ПЕКАРНЯ» г. Москва
- Использование корреляционно-регрессионного анализа для обработки экономических статистических данных
- Использование коэффициентов финансовой устойчивости при финансовом анализе (на примере Муниципального предприятия «Водоканализационн
- Использование краеведческого материала на внеклассных занятиях окружающего мира (истории) в начальных классах
- Использование криминалистически значимой информации в осуществлении арбитражных споров
- Использование криминалистической фотографии при производстве отдельных следственных действий
- Использование криптографического интерфейса приложений Cryptoapi
- Использование крови и ее препаратов. Их товароведная оценка