Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Индивидуальное задание. Найти минимальное значение функции последовательно тремя численными методами для указанных исходных данных.
Найти минимальное значение функции последовательно тремя численными методами для указанных исходных данных.
Контрольные вопросы 1. Группы методов определения экстремумов нелинейных функций. 2. Понятие унимодальной функции. 3. Общий принцип нахождения экстремумов нелинейных унимодальных функций. 4. Интервал неопределенности и возможности его уменьшения. 5. Метод дихотомии и порядок вычисления значений функции. 6. Числа Фибоначчи. 7. Метод Фибоначчи, определение номера числа и порядок вычисления значений функции. 8. Метод золотого сечения и порядок вычисления значений функции. 9. Точность вычисления оптимального значения в различных методах. Приложение1
program dihoto; {Обьявление переменных} var a, b, delta, eps, lamda, mu, f1, f2: real; k: integer; //Выражение исходной функции function f(x: real): real; begin f: =x*x+2*x end; //Начало вычислений begin cls; k: =0; {Ввод данных} writeln ('Введите данные'); write ('a='); read(a); write ('b='); read(b); write ('delta='); read(delta); write ('eps='); read(eps); //Шапка таблицы writeln (' k ', ' a ', ' b ', ' lamda ', ' mu ', ' f1 ', ' f2 '); //Сужение отрезка while Abs(b - a) > delta do begin k: =k+1; lamda: = (a + b) / 2 - eps; mu: = (a + b) / 2 + eps; f1: =f(lamda); f2: =f(mu); //Вывод текущей строки таблицы writeln(' ', k, ' ', a: 6: 3, ' ', b: 6: 3, ' ', lamda: 6: 3, ' ', mu: 6: 3, ' ', f1: 6: 3, ' ', f2: 6: 3); //Сравнение двух значений функции If f1 < = f2 Then b: = mu Else a: = lamda; end; //Вывод конечной длины отрезка writeln('Конечная длина отрезка'); writeln(' ', 'a=', a: 6: 3, ' ', 'b=', b: 6: 3); //Значения функции на концах конечного отрезка f1: =f(a); f2: =f(b); writeln('Значения функции на концах конечного отрезка'); writeln(' ', 'f(a)=', f1: 6: 3, ' ', 'f(b)=', f2: 6: 3); writeln('Минимальное значение функции'); writeln(' ', (f1+f2)/2: 6: 3); end. Приложение 2
program gold; {Обьявление переменных} var a, b, delta, eps, lamda, mu, f1, f2, alfa: real; k: integer; //Выражение исходной функции function f(x: real): real; begin f: =x*x+2*x end; //Начало вычислений begin cls; k: =0; {Ввод данных} writeln ('Введите данные'); write ('a='); read(a); write ('b='); read(b); write ('delta='); read(delta); write ('eps='); read(eps); //Шапка таблицы writeln (' k ', ' a ', ' b ', ' lamda ', ' mu ', ' f1 ', ' f2 '); //Сужение отрезка while Abs(b - a) > delta do begin k: =k+1; lamda: = a + (1-0.618)*(b-a); mu: = a + 0.618*(b-a); f1: = f(lamda); f2: = f(mu); //Вывод текущей строки таблицы writeln(' ', k, ' ', a: 6: 3, ' ', b: 6: 3, ' ', lamda: 6: 3, ' ', mu: 6: 3, ' ', f1: 6: 3, ' ', f2: 6: 3); //Сравнение двух значений функции If f1 < = f2 Then b: = mu Else a: = lamda; end; //Вывод конечной длины отрезка writeln('Конечная длина отрезка'); writeln(' ', 'a=', a: 6: 3, ' ', 'b=', b: 6: 3); //Значения функции на концах конечного отрезка f1: =f(a); f2: =f(b); writeln('Значения функции на концах конечного отрезка'); writeln(' ', 'f(a)=', f1: 6: 3, ' ', 'f(b)=', f2: 6: 3); writeln('Минимальное значение функции'); writeln(' ', (f1+f2)/2: 6: 3); end. Приложение 2
program fibon; {Обьявление переменных} var a, b, delta, eps, lamda, mu, f1, f2: real; k, n, i, j: integer; fi: array [0..9] of integer; //Выражение исходной функции function f(x: real): real; begin f: =x*x+2*x end; //Начало вычислений begin cls; k: =0; {Ввод данных} writeln ('Введите данные'); write ('a='); read(a); write ('b='); read(b); write ('delta='); read(delta); write ('eps='); read(eps); write('максимальное(расчетное)число Фибоначчи n='); read(n); //a: = -3; //b: = 5; //delta: = 0.2; //eps: = 0.01; //n: =9; fi[0]: =1; fi[1]: =1; for i: =2 to n do begin fi[i]: =fi[i-1]+fi[i-2]; //write(fi[i], ' '); end; //Шапка таблицы writeln (' k ', ' a ', ' b ', ' lamda ', ' mu ', ' f1 ', ' f2 '); //Сужение отрезка for j: =1 to n-1 do begin k: =k+1; lamda: = a + fi[n-j-1]/fi[n-j+1]*(b-a); mu: = a + fi[n-j]/fi[n-j+1]*(b-a); f1: =f(lamda); f2: =f(mu); //Вывод текущей строки таблицы writeln(' ', k, ' ', a: 6: 3, ' ', b: 6: 3, ' ', lamda: 6: 3, ' ', mu: 6: 3, ' ', f1: 6: 3, ' ', f2: 6: 3); //Сравнение двух значений функции If f1 < = f2 Then b: = mu Else a: = lamda; end; //Вывод конечной длины отрезка writeln('Конечная длина отрезка'); writeln(' ', 'a=', a: 6: 3, ' ', 'b=', b: 6: 3); //Значения функции на концах конечного отрезка f1: =f(a); f2: =f(b); writeln('Значения функции на концах конечного отрезка'); writeln(' ', 'f(a)=', f1: 6: 3, ' ', 'f(b)=', f2: 6: 3); writeln('Минимальное значение функции'); writeln(' ', (f1+f2)/2: 6: 3); end.
|