Банк рефератов содержит более 364 тысяч рефератов, курсовых и дипломных работ, шпаргалок и докладов по различным дисциплинам: истории, психологии, экономике, менеджменту, философии, праву, экологии. А также изложения, сочинения по литературе, отчеты по практике, топики по английскому.
Полнотекстовый поиск
Всего работ:
364139
Теги названий
Разделы
Авиация и космонавтика (304)
Административное право (123)
Арбитражный процесс (23)
Архитектура (113)
Астрология (4)
Астрономия (4814)
Банковское дело (5227)
Безопасность жизнедеятельности (2616)
Биографии (3423)
Биология (4214)
Биология и химия (1518)
Биржевое дело (68)
Ботаника и сельское хоз-во (2836)
Бухгалтерский учет и аудит (8269)
Валютные отношения (50)
Ветеринария (50)
Военная кафедра (762)
ГДЗ (2)
География (5275)
Геодезия (30)
Геология (1222)
Геополитика (43)
Государство и право (20403)
Гражданское право и процесс (465)
Делопроизводство (19)
Деньги и кредит (108)
ЕГЭ (173)
Естествознание (96)
Журналистика (899)
ЗНО (54)
Зоология (34)
Издательское дело и полиграфия (476)
Инвестиции (106)
Иностранный язык (62791)
Информатика (3562)
Информатика, программирование (6444)
Исторические личности (2165)
История (21319)
История техники (766)
Кибернетика (64)
Коммуникации и связь (3145)
Компьютерные науки (60)
Косметология (17)
Краеведение и этнография (588)
Краткое содержание произведений (1000)
Криминалистика (106)
Криминология (48)
Криптология (3)
Кулинария (1167)
Культура и искусство (8485)
Культурология (537)
Литература : зарубежная (2044)
Литература и русский язык (11657)
Логика (532)
Логистика (21)
Маркетинг (7985)
Математика (3721)
Медицина, здоровье (10549)
Медицинские науки (88)
Международное публичное право (58)
Международное частное право (36)
Международные отношения (2257)
Менеджмент (12491)
Металлургия (91)
Москвоведение (797)
Музыка (1338)
Муниципальное право (24)
Налоги, налогообложение (214)
Наука и техника (1141)
Начертательная геометрия (3)
Оккультизм и уфология (8)
Остальные рефераты (21692)
Педагогика (7850)
Политология (3801)
Право (682)
Право, юриспруденция (2881)
Предпринимательство (475)
Прикладные науки (1)
Промышленность, производство (7100)
Психология (8692)
психология, педагогика (4121)
Радиоэлектроника (443)
Реклама (952)
Религия и мифология (2967)
Риторика (23)
Сексология (748)
Социология (4876)
Статистика (95)
Страхование (107)
Строительные науки (7)
Строительство (2004)
Схемотехника (15)
Таможенная система (663)
Теория государства и права (240)
Теория организации (39)
Теплотехника (25)
Технология (624)
Товароведение (16)
Транспорт (2652)
Трудовое право (136)
Туризм (90)
Уголовное право и процесс (406)
Управление (95)
Управленческие науки (24)
Физика (3462)
Физкультура и спорт (4482)
Философия (7216)
Финансовые науки (4592)
Финансы (5386)
Фотография (3)
Химия (2244)
Хозяйственное право (23)
Цифровые устройства (29)
Экологическое право (35)
Экология (4517)
Экономика (20644)
Экономико-математическое моделирование (666)
Экономическая география (119)
Экономическая теория (2573)
Этика (889)
Юриспруденция (288)
Языковедение (148)
Языкознание, филология (1140)

Курсовая работа: Применение нечёткой логики на примере простой модели зарядного устройства для батарей

Название: Применение нечёткой логики на примере простой модели зарядного устройства для батарей
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа Добавлен 00:54:19 09 июня 2011 Похожие работы
Просмотров: 1268 Комментариев: 20 Оценило: 2 человек Средний балл: 5 Оценка: неизвестно     Скачать

Федеральное агентство по образованию

ФГАОУ ВПО «Уральский федеральный университет имени первого Президента России Б.Н. Ельцина»

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

Применение нечеткой логики на примере простой модели зарядного

устройства для батарей

Екатеринбург

2010

Содержание

Постановка задачи

Нечёткая логика и её преимущества использования

Описание проекта

Выводы

Приложение 1

Приложение 2


Постановка задачи

Цель работы – на языке MicrosoftVisualC# 2010 ExpressEdition создать модель работы зарядного устройства для батарей с применением операторов нечёткой логики. И отобразить графики изменения напряжения и температуры в разных режимах зарядки.


Нечёткая логика и её преимущества использования

Нечеткая логика (Fuzzy logic) была разработана в 1963 г. Лотфи Заде (Lotfi Zadeh). Эта логическая система была придумана для того, чтобы позволить программам работать в диапазоне различных степеней истины. Вместо двоичных систем, отображающих только истину и ложь, были введены степени истины, которые действуют в диапазоне от 0,0 до 1,0 включительно.

Операторы нечеткой логики

Аналогично булевой логике, нечеткая логика имеет набор базовых операторов, они совпадают с булевыми, но действуют по-другому. Эти операторы обеспечивают основу для операций нечеткой логики.

Формула вычисления

publicfloatMAX(floata,floatb) { return (a>b) ? a : b; }

public float MIN(float a, float b) { return (a < b) ? a : b; }

public float fuzzyAnd (float a, float b)

{

if (a < 0.0) return 0;

if (a > 1.0) return 0;

if (b < 0.0) return 0;

if (b > 1.0) return 0;

return MAX(a, b);

}

public float fuzzyOr(float a, float b)

{

if (a < 0.0) return 0;

if (a > 0.0) return 0;

if (a < 0.0) return 0;

if (a > 0.0) return 0;

return MIN(a, b);

}

public float fuzzyNot(float a)

{

if (a < 0.0) return 0;

if (a > 1.0) return 0;

float c = (float)1.0 - a;

return c;

}

Операторы нечеткой логики очень схожи с обычными булевыми операторами. Функции принадлежности и правила нечеткой логики, подвергнутые лингвистической модификации, позволяют значительно расширить возможности системных операторов. Разработчики могут намного упростить сложность систем, используя нечеткую логику, поскольку она позволяет моделировать комплексные программы с большим количеством входов и выходов.

С помощью нечеткой логики можно добиться снижения системных требований, а значит, сократить расходы на аппаратные средства. Во многих случаях математическое моделирование предпочтительнее заменить функциями принадлежности и правилами нечеткой логики и с их помощью управлять системой.

При сокращении объемов информации размеры кода уменьшаются, поэтому система работает быстрее. Кроме того, это позволяет использовать менее совершенные аппаратные средства.

Описание проекта

Зарядное устройство работает в среде, где существует напряжение заряда (например, от солнечных батарей), и нагрузка. Напряжение позволяет заряжать батарею, в то время как нагрузка ее разряжает. Зарядное устройство имеет два режима работы: режим подзарядки и режим быстрой зарядки. В режиме подзарядки в батарею поступает только очень небольшое количество тока, что приводит к неполной зарядке батареи. В режиме быстрой зарядки весь доступный ток направляется в зарядное устройство.

С точки зрения систем управления следует определить, когда нужно переходить в режим быстрой зарядки, а когда - в режим подзарядки. При зарядке температура батареи повышается. Если батарея заряжена полностью, дополнительный ток, проходящий через нее, будет приводить к ее нагреву. Поэтому, если батарея нагревается, можно считать, что она полностью заряжена, а значит, следует перейти в режим подзарядки. Кроме того, можно измерить напряжение батареи, чтобы определить, достигло ли оно предела, и затем переключиться в режим подзарядки. Если батарея не нагрелась и не достигла предела по напряжению, следует перейти в режим полной зарядки. Это упрощенные правила, поскольку кривая температуры батареи является оптимальным показателем ее зарядки.

Функции принадлежности при зарядке батареи с помощью нечеткой логики

У нас имеется две переменные: напряжение и температура. Графики принадлежности для напряжения и температуры (отображающие функции принадлежности) показаны на рис. 1 и 2.


Рис. 1. График функции принадлежности для напряжения

Рис. 2. График функции принадлежности для температуры

При создании функции принадлежности использованы следующие программные конструкции, которые позволяют задать границы функции принадлежности с помощью группы значений, представляющих ее параметры.

Функции, которые используются для создания функций принадлежности.

public float spikeProfile (float value, float lo, float high)

{

float peak;

value += (-lo);

if ((lo < 0) && (high < 0))

{

high = -(high - lo);

}

else if ((lo < 0) && (high > 0))

{

high += -lo;

}

else if ((lo > 0) && (high > 0))

{

high -= lo;

}

peak = (float)(high / 2.0);

lo =(float)0.0;

if (value < peak)

{

return (value / peak);

}

else if (value > peak)

{

return ((high - value) / peak);

}

return (float)1.0;

Функция, spikeProf ile, задает обычную функцию принадлежности в виде треугольника. Задаются значения 1о и high, которые определяют базовые вершины треугольника. Высшая точка задается как high/2.

public float plateauProfile(float value, float lo, float lo_plat,

float hi_plat, float hi)

{

float upslope;

float downslope;

value += (-lo);

if (lo < 0.0)

{

lo_plat += -lo; hi_plat += -lo;

hi += -lo; lo = 0;

}

else

{

lo_plat -= lo; hi_plat -= lo;

hi -= lo; lo = 0;

}

upslope =(float) (1.0 / (lo_plat - lo));

downslope = (float)(1.0 / (hi - hi_plat));

if (value < lo) return (float)0.0;

else if (value > hi) return (float)0.0;

else if ((value >= lo_plat) && (value <= hi_plat)) return (float)1.0;

else if (value < lo_plat) return ((value - lo) * upslope);

else if (value > hi_plat) return ((hi - value) * downslope);

return (float)0.0;

}

Функция, plateauProf ile, задает функцию принадлежности в форме трапеции (пример - функция принадлежности для температуры на рис. 2)Затем с помощью функции plateauProfile дополнительно создаются те функции принадлежности, которые распространяются до границ (например, функции холодно и жарко на рис. 2). Их задача заключается в том, чтобы определить степень принадлежности заданного значения и аргументов функции. График функции принадлежности для напряжения определяет в области напряжения три функции принадлежности: низкое, среднее и высокое. Аналогично задаются три функции принадлежности для области температуры: холодно, тепло и горячо. Эти значения используются только для демонстрации и не учитывают какую-либо технологию производства батарей.

Функции принадлежности для напряжения

//функция принадлежности для низкого нааряжения

public float m_voltage_low(float voltage)

{

const float lo = (float)5.0;

const float lo_plat = (float)5.0;

const float hi_plat = (float)5.0;

const float hi = (float)10.0;

if (voltage < lo) return (float)1.0;

if (voltage > hi) return (float)0.0;

return plateauProfile(voltage, lo, lo_plat, hi_plat, hi);

}

//функция принадлежности для среднего напряжения

public float m_voltage_medium(float voltage)

{

const float lo = (float)5.0;

const float lo_plat = (float)10.0;

const float hi_plat = (float)20.0;

const float hi = (float)25.0;

if (voltage < lo) return (float)0.0;

if (voltage > hi) return (float)0.0;

return plateauProfile(voltage, lo, lo_plat, hi_plat, hi);

}

//функцияпринадлежностидлявысокогонааряжения

public float m_voltage_high(float voltage)

{

const float lo = (float)25.0;

const float lo_plat = (float)30.0;

const float hi_plat = (float)30.0;

const float hi = (float)30.0;

if (voltage < lo) return (float)0.0;

if (voltage > hi) return (float)1.0;

return plateauProfile(voltage, lo, lo_plat, hi_plat, hi);

}

Все функции принадлежности используют функцию plateau Profile, чтобы построить график. Каждая из них принимает значение напряжения и затем возвращает значение, которое соответствует ее степени принадлежности. Каждая функция сначала проверяет переданное значение на соответствие диапазону функции принадлежности. Если значение не выходит за рамки диапазона, оно передается в функцию plateauPro f ile . При этом ее сигнатура задается как вектор [lo, lo__plat, hi_plat, hi], а затем пользователю возвращается результат.

Функции принадлежности для температуры

// функция принадлежностми для высокой температуры

public float m_temp_hot(float temp)

{

const float lo = (float)35.0;

const float lo_plat = (float)45.0;

const float hi_plat = (float)45.0;

const float hi = (float)45.0;

if (temp < lo) return (float)0.0;

if (temp > hi) return (float)1.0;

return plateauProfile(temp, lo, lo_plat, hi_plat, hi);

}

// функция принадлежностми для средней температуры

public float m_temp_warm(float temp)

{

const float lo = (float)15.0;

const float lo_plat = (float)25.0;

const float hi_plat = (float)35.0;

const float hi = (float)45.0;

if ((temp < lo) || (temp > hi)) return (float)0.0;

return plateauProfile(temp, lo, lo_plat, hi_plat, hi);

}

// функция принадлежностми для низкой температуры

public float m_temp_cold(float temp)

{

const float lo = (float)15.0;

const float lo_plat = (float)15.0;

const float hi_plat = (float)15.0;

const float hi = (float)25.0;

if (temp < lo) return (float)1.0;

if (temp > hi) return (float)0.0;

return plateauProfile(temp, lo, lo_plat, hi_plat, hi);

}

Функция управления зарядкой батареи с помощью нечеткой логики

Как уже говорилось, зарядное устройство имеет два режима работы: режим подзарядки и режим быстрой зарядки. Состояние батареи отслеживают два датчика: датчик напряжения и датчик температуры. Функция chargeControl позволяет управлять процессом зарядки батареи.

Функция, управляющая зарядкой батареи

public float chargeControl(float timer )

{

int i = 0;

if ( (i++ % 10) == 0 ) {

if ( normalize(m_voltage_high(voltage)) ==1) {

ChargeMode = TRICKLE_CHARGE;

timer = (float)0.0;

} else if (normalize( m_temp_hot(temperature))==1) {

ChargeMode = TRICKLE_CHARGE;

timer = (float)0.0;

} else if (normalize(

fuzzyAnd(fuzzyNot(m_voltage_high(voltage)),

fuzzyNot(m_temp_hot(temperature))))==1) {

ChargeMode = FAST_CHARGE;

timer = (float)0.0;

}

}

Используя правила нечеткой логики и функции принадлежности, указанная функция в зависимости от значений напряжения и температуры изменяет режим зарядки батареи.

Главный цикл модели

Наконец, главный цикл выполняет функции управления процессом зарядки батареи, основываясь на заданных параметрах напряжения и температуры.

Главный цикл

private void Main (object sender, EventArgs e)

int i;

Napryagenie n = new Napryagenie();

string s="";

tmpr=new float[3000];

volt = new float[3000];

mode = new int[3000];

for (i = 0; i < 3000; i++)

{

tmpr[i] = n.temperature;

volt[i] = n.voltage;

mode[i] = n.ChargeMode;

n.simulate();

n.timer = n.chargeControl(n.timer);

n.timer += (float)1.0;

s = "Main: " + i + " volt=" + n.voltage + " temper=" + n.temperature + " Mode=" + n.ChargeMode;

listBox1.Items.Add(s);

}

Console.ReadLine();

}

Программа вызывает функцию, которая эмулирует процесс собственно зарядки и разрядки батареи, а затем позволяет функции управления зарядкой установить нужный режим для зарядного устройства.


Вывод

В результате работы над проектом была создана модель работы зарядного устройства для батареи. Программа описывает выбор режима зарядки, исходя из параметров напряжения и температуры, а так же выводит графики изменения этих параметров.

ПрограмманаписананаMicrosoft Visual C# 2010 Express Edition. Отладка производилась в операционной системе MS Windows ХР.

На этом примере было рассмотрено применение операторов нечёткой логики. Эти операторы используется в самых разнообразных приложениях. Наиболее очевидная область их применения - системы управления, которым нечеткая логика уже обеспечила коммерческий успех. Нечеткая логика используется в устройстве видеокамер и фотоаппаратов с автофокусом, системах смешивания цемента, автомобильных системах (например, системах АБС) и даже системах, основанных на правилах. Наверное, самые полезные области применения все еще остаются неизвестными. Само название «нечеткая логика» не внушает особого доверия, хотя давно известно, что это надежный метод. Как и многие другие методики ИИ, нечеткая логика в настоящее время все чаще используется в устройствах повседневного применения, где она больше не ассоциируется с искусственным интеллектом.


Приложение 1

зарядное устройство батарея нечёткая логика

Код программы:

classNapryagenie

{

int TRICKLE_CHARGE; //charge=заряд 0

int FAST_CHARGE; // 1

public int ChargeMode;

int MAX_LOADS; // 5

public float voltage, temperature;

public float timer;

float[] load;

int curLoad;

float lo;

//constructor

public Napryagenie() {

TRICKLE_CHARGE = 0;

FAST_CHARGE = 1;

ChargeMode = TRICKLE_CHARGE;

MAX_LOADS=5;

load = new float[MAX_LOADS];

curLoad = 0;

temperature = (float)12.0;

timer = (float)0.0;

voltage = (float)20.0;

load[0]=(float)0.02;

load[1]=(float)0.04;

load[2]=(float)0.06;

load[3]=(float)0.08;

load[4] = (float)0.1;

}

int t;

public float charge( int t )

{

float result;

result = (float)Math.Sin((double)((float)t/(float)100.0));

if (result < 0.0) result = (float)0.0;

return result;

}

public int simulate()

{

//extern int chargeMode;

t=0;

// First, update the loading if necessary

if (getSRand() < 0.02) {

curLoad = getRand( MAX_LOADS );

}

// Affect the current battery voltage given the load

voltage -= load[curLoad];

// Next, update the battery voltage given input charge

if (ChargeMode == FAST_CHARGE) {

voltage += (charge(t) * (float)Math.Sqrt(timer));

} else {

voltage += ((charge(t) * (float)Math.Sqrt(timer)) / (float)10.0 );

}

if (voltage < 0.0) voltage = (float)0.0;

else if (voltage > 35.0) voltage = (float)35.0;

// Update the temperature

if (ChargeMode == FAST_CHARGE) {

if (voltage > 25) {

temperature += ((load[curLoad] * ((float)Math.Sqrt(timer)/(float)25.0)) * (float)10.0);

} else if (voltage > 15) {

temperature += ((load[curLoad] * ((float)Math.Sqrt(timer) / (float)20.0)) * (float)10.0);

} else {

temperature += ((load[curLoad] * ((float)Math.Sqrt(timer) / (float)15.0)) *(float) 10.0);

}

} else {

if (temperature > 20.0) {

temperature -= ((load[curLoad] * ((float)Math.Sqrt(timer) / (float)20.0)) * (float)10.0);

} else {

temperature -= ((load[curLoad] * ((float)Math.Sqrt(timer) /(float) 100.0)) * (float)10.0);

}

}

if (temperature < 0.0) temperature = (float)0.0;

else if (temperature > 40.0) temperature = (float)40.0;

t++;

return 0;

}

public float getSRand() {

float c;

Random r=new Random();

uint RAND_MAX=0x7FFFFU;

c=((float)r.Next()/(float)RAND_MAX);

return c;

}

public int getRand(float x) { return (int)((x) * getSRand()); }

public float MAX(float a,float b) { return (a>b) ? a : b; }

public float MIN(float a, float b) { return (a < b) ? a : b; }

public float fuzzyAnd (float a, float b)

{

if (a < 0.0) return 0;

if (a > 1.0) return 0;

if (b < 0.0) return 0;

if (b > 1.0) return 0;

return MAX(a, b);

}

public float fuzzyOr(float a, float b)

{

if (a < 0.0) return 0;

if (a > 0.0) return 0;

if (a < 0.0) return 0;

if (a > 0.0) return 0;

return MIN(a, b);

}

public float fuzzyNot(float a)

{

if (a < 0.0) return 0;

if (a > 1.0) return 0;

float c = (float)1.0 - a;

return c;

}

//нормализация

public int normalize(float inn)

{

if (inn >= 0.5) return 1;

else return 0;

}

//функцияпринадлежностиввидетреугольника

public float spikeProfile (float value, float lo, float high)

{

float peak;

value += (-lo);

if ((lo < 0) && (high < 0))

{

high = -(high - lo);

}

else if ((lo < 0) && (high > 0))

{

high += -lo;

}

else if ((lo > 0) && (high > 0))

{

high -= lo;

}

peak = (float)(high / 2.0);

lo =(float)0.0;

if (value < peak)

{

return (value / peak);

}

else if (value > peak)

{

return ((high - value) / peak);

}

return (float)1.0;

}

// функцияпринадлежностиввидетрапеции

public float plateauProfile(float value, float lo, float lo_plat,

float hi_plat, float hi)

{

float upslope;

float downslope;

value += (-lo);

if (lo < 0.0)

{

lo_plat += -lo; hi_plat += -lo;

hi += -lo; lo = 0;

}

else

{

lo_plat -= lo; hi_plat -= lo;

hi -= lo; lo = 0;

}

upslope =(float) (1.0 / (lo_plat - lo));

downslope = (float)(1.0 / (hi - hi_plat));

if (value < lo) return (float)0.0;

else if (value > hi) return (float)0.0;

else if ((value >= lo_plat) && (value <= hi_plat)) return (float)1.0;

else if (value < lo_plat) return ((value - lo) * upslope);

else if (value > hi_plat) return ((hi - value) * downslope);

return (float)0.0;

}

// функция принадлежностми для высокой температуры

public float m_temp_hot(float temp)

{

const float lo = (float)35.0;

const float lo_plat = (float)45.0;

const float hi_plat = (float)45.0;

const float hi = (float)45.0;

if (temp < lo) return (float)0.0;

if (temp > hi) return (float)1.0;

return plateauProfile(temp, lo, lo_plat, hi_plat, hi);

}

// функция принадлежностми для средней температуры

public float m_temp_warm(float temp)

{

const float lo = (float)15.0;

const float lo_plat = (float)25.0;

const float hi_plat = (float)35.0;

const float hi = (float)45.0;

if ((temp < lo) || (temp > hi)) return (float)0.0;

return plateauProfile(temp, lo, lo_plat, hi_plat, hi);

}

// функция принадлежностми для низкой температуры

public float m_temp_cold(float temp)

{

const float lo = (float)15.0;

const float lo_plat = (float)15.0;

const float hi_plat = (float)15.0;

const float hi = (float)25.0;

if (temp < lo) return (float)1.0;

if (temp > hi) return (float)0.0;

return plateauProfile(temp, lo, lo_plat, hi_plat, hi);

}

//функцияпринадлежностидлянизкогонааряжения

public float m_voltage_low(float voltage)

{

const float lo = (float)5.0;

const float lo_plat = (float)5.0;

const float hi_plat = (float)5.0;

const float hi = (float)10.0;

if (voltage < lo) return (float)1.0;

if (voltage > hi) return (float)0.0;

return plateauProfile(voltage, lo, lo_plat, hi_plat, hi);

}

//функция принадлежности для среднего напряжения

public float m_voltage_medium(float voltage)

{

const float lo = (float)5.0;

const float lo_plat = (float)10.0;

const float hi_plat = (float)20.0;

const float hi = (float)25.0;

if (voltage < lo) return (float)0.0;

if (voltage > hi) return (float)0.0;

return plateauProfile(voltage, lo, lo_plat, hi_plat, hi);

}

//функцияпринадлежностидлявысокогонааряжения

public float m_voltage_high(float voltage)

{

const float lo = (float)25.0;

const float lo_plat = (float)30.0;

const float hi_plat = (float)30.0;

const float hi = (float)30.0;

if (voltage < lo) return (float)0.0;

if (voltage > hi) return (float)1.0;

return plateauProfile(voltage, lo, lo_plat, hi_plat, hi);

}

public float chargeControl(float timer )

{

int i = 0;

if ( (i++ % 10) == 0 ) {

if ( normalize(m_voltage_high(voltage)) ==1) {

ChargeMode = TRICKLE_CHARGE;

timer = (float)0.0;

} else if (normalize( m_temp_hot(temperature))==1) {

ChargeMode = TRICKLE_CHARGE;

timer = (float)0.0;

} else if (normalize(

fuzzyAnd(fuzzyNot(m_voltage_high(voltage)),

fuzzyNot(m_temp_hot(temperature))))==1) {

ChargeMode = FAST_CHARGE;

timer = (float)0.0;

}

}

return timer;

}

}//class

}

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

}

Graphics g;

float [] tmpr;

float [] volt;

int [] mode;

private void button1_Click(object sender, EventArgs e)

{

int i;

Napryagenie n = new Napryagenie();

string s="";

tmpr=new float[3000];

volt = new float[3000];

mode = new int[3000];

for (i = 0; i < 3000; i++)

{

tmpr[i] = n.temperature;

volt[i] = n.voltage;

mode[i] = n.ChargeMode;

n.simulate();

n.timer = n.chargeControl(n.timer);

n.timer += (float)1.0;

s = "Main: " + i + " volt=" + n.voltage + " temper=" + n.temperature + " Mode=" + n.ChargeMode;

listBox1.Items.Add(s);

}

Console.ReadLine();

}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

{

}

class graphic

{

int xw, yw;

Graphics gr;

int mx, my;

int minx,maxx,miny,maxy;

float shx,shy;

public graphic(Graphics g, int mx1, int my1, int minx1, int maxx1, int miny1, int maxy1)

{

gr = g;

mx = mx1; my = my1;

minx = minx1; maxx = maxx1; miny = miny1; maxy = maxy1;

xw = maxx1 - minx1;

yw = maxy1 - miny1;

}

public void drawaxes()

{

int i;

int lrsk = 5;

float x = 0, y;

shx = (float)mx / (float)xw;

shy = (float)my / (float)yw;

for (i = 0; i < xw; i++)

{

x = (float)i * shx;

if (i % 50 == 0)

gr.DrawLine(new Pen(Color.Black, 1), x, my, x, my - lrsk);

}

for (i = 0; i < yw; i++)

{

y = i * shy;

if (i % 1 == 0)

gr.DrawLine(new Pen(Color.Black, 1), 0, y, lrsk, y);

}

}//drawaxes

public void drawgr(Color clr,float [] tmp)

{

float x,y;

int i;

int k = 0;

for (i = maxx - xw; i < maxx; i++)

{

x = k++ * shx;

y = tmp[i] * shy;

gr.DrawEllipse(new Pen(clr, 1), x, my - y, 1, 1);

}

}//drawgr

}//graphic

private void button2_Click(object sender, EventArgs e)

{

g = panel1.CreateGraphics();

graphic gra=new graphic(g,panel1.Width,panel1.Height,0,3000,0,50);

gra.drawaxes();

gra.drawgr(Color.Green, tmpr);

gra.drawgr(Color.Red, volt);

}

}


Приложение 2

Оценить/Добавить комментарий
Имя
Оценка
Комментарии:
Хватит париться. На сайте FAST-REFERAT.RU вам сделают любой реферат, курсовую или дипломную. Сам пользуюсь, и вам советую!
Никита09:16:12 03 ноября 2021
.
.09:16:11 03 ноября 2021
.
.09:16:10 03 ноября 2021
.
.09:16:04 03 ноября 2021
.
.09:16:01 03 ноября 2021

Смотреть все комментарии (20)
Работы, похожие на Курсовая работа: Применение нечёткой логики на примере простой модели зарядного устройства для батарей

Назад
Меню
Главная
Рефераты
Благодарности
Опрос
Станете ли вы заказывать работу за деньги, если не найдете ее в Интернете?

Да, в любом случае.
Да, но только в случае крайней необходимости.
Возможно, в зависимости от цены.
Нет, напишу его сам.
Нет, забью.



Результаты(294399)
Комментарии (4230)
Copyright © 2005 - 2024 BestReferat.ru / реклама на сайте