QalOGUGtk0
.pdfwhile (b-a) >= e do // цикл, повторяющийся до тех пор, пока не будет достигнута требуемая точность
begin
a:=a-(F(a)/G(a)); // метод касательных для левого конца промежутка b:=b-F(b)*(b-a)/(F(b)-F(a)); // метод хорд для правого конца промежутка
end;
x:=(a+b)/2;
r:= power(3,-x)-x-4; // осуществляем проверку, подставляя найденный корень в исходное уравнение.
WriteLn('x=',x,' F(x)=',r); // вывод результата end.
Результат программы: .
Задача 4.
|
2 |
sin x |
|
Найти приближенное значение определенного интеграла |
|
|
dx исполь- |
x |
|||
|
|
||
|
1 |
|
|
зуя формулу трапеции, разбив промежуток интегрирования на n 1000
частей.
Решение.
Разобьем промежуток интегрирования на 1000 равных частей длины
h |
|
2 1 |
0.001 |
точками x0 , x1, x2 ,..., xn . На каждом получившимся k-м |
|
1000 |
|||||
|
|
|
промежутке заменим площадь криволинейной трапеции, ограниченной ли-
ниями: x x |
, |
x x |
, |
y 0 , |
y f (x) |
sin x |
, трапецией с основаниями |
|||||
|
||||||||||||
|
k 1 |
|
|
k |
|
|
|
|
x |
|||
|
|
|
|
|
|
|
|
|
|
|||
yk 1 f (xk 1 ) , |
|
yk f (xk ) |
и |
высотой, длина которой равна h. Тогда |
||||||||
|
yk 1 yk |
|
|
2 |
sin x |
|
|
n |
|
|
|
|
Sk |
h |
, |
dx Sk . |
|||||||||
|
||||||||||||
|
x |
|||||||||||
2 |
|
|
1 |
|
|
k 1 |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
Представим программы вычисляющие приближенное значение интеграла:
- на языке С++:
#include <stdio.h> // подключаем стандартную библиотеку ввода/вывода #include <conio.h> // библиотека необходимая для оператора getch(); #include <math.h> // подключение математической библиотеки
long double f(long double y) // задаем подынтегральную функцию f(х)
221
{
return sin(y)/y;//возвращаемое значение
}
void main()
{
long double a=1, b=2, n=1000, k, s=0, h, x1, x2;// объявление переменных h=(b-a)/n;
for (k = 1; k <= n; k++) // цикл
{
x1=a+ (k-1)*h; // левая точка рассматриваемого промежутка x2=a+k*h; // правая точка рассматриваемого промежутка
s=s+(f(x1)+f(x2))*h/2; // площадь очередной трапеции суммируется с предыдущим значением s
}
printf("The integral value is approximately equal to:=%f",s); // вывод результата getch();
}
Результат программы:
- на языке Pascal ABC:
program Integral_Metod_trapecii; type
real_function = function (x: Real): Real; function F(x: Real): Real;
begin
F := sin(x)/x ; // задаем подынтегральную функцию f(x) end;
var
k, n :integer;
a, b, h, x1, x2, s:Real; // задаем переменные begin
a:=1;
b:=2;
n:=1000;
s:=0; h:=(b-a)/n;
for k:=1 to n do // цикл begin
x1:=a+(k-1)*h; // левая точка рассматриваемого промежутка x2:=a+k*h; // правая точка рассматриваемого промежутка
s:=s+(F(x1)+F(x2))*h/2; // площадь очередной трапеции суммируется с предыдущим значением s
end;
WriteLn('The integral value is approximately equal to:',s); // вывод результата
222
end.
Результат программы:
Задача 5.
3
Найти приближенное значение определенного интеграла ex2 dx используя
0
формулу Симпсона, разбив промежуток интегрирования на n 500 частей.
Решение.
Разобьем промежуток интегрирования на 2n=1000 равных частей
длины h 3 0 0.003 точками x0 , x1, x2 ,..., x2n . На каждом получившимся
1000
парном k-м k 1; 500 промежутке заменим площадь криволинейной тра-
пеции, |
ограниченной линиями: |
x x |
|
, |
x x |
, |
y 0 , |
y f (x) ex2 , |
||||
|
|
|
|
|
2k 2 |
|
2k |
|
|
|
|
|
криволинейной трапецией ограниченной линиями: |
x x2k 2 , |
x x2k , |
y 0 |
|||||||||
и параболой, проходящей через точки: |
(x2k 2 ; y2k 2 ) , |
(x2k 1; y2k 1 ) , (x2k ; y2k ) |
||||||||||
, |
где |
y2k 2 f (x2k 2 ) , |
y2k 1 f (x2k 1 ) , |
|
y2k f (x2k ) . |
Тогда |
||||||
|
|
h |
|
3 |
n |
|
|
|
|
|
|
|
Sk |
|
y2k 2 4 y2k 2 y2k , ex2 dx Sk . |
|
|
|
|
|
|||||
|
|
|
|
|
|
|||||||
|
3 |
|
0 |
k 1 |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
Представим программы вычисляющие приближенное значение интеграла: - на языке С++:
#include <stdio.h> // подключаем стандартную библиотеку ввода/вывода #include <conio.h> // библиотека необходимая для оператора getch();
#include <math.h> // подключение математической библиотеки
long double f(long double y) // задаем подынтегральную функцию f(х)
{
return exp(pow(y,2));//возвращаемое значение
}
void main()
{
long double a=0, b=3, n=500, k, s=0, h, x1, x2, x3;// объявление пе-
ременных h=(b-a)/(2*n);
for (k = 1; k <= n; k++) // цикл
{
x1=a+(2*k-2)*h; // левая точка рассматриваемого промежутка x2=a+(2*k-1)*h; // центральная точка рассматриваемого промежутка x3=a+2*k*h; // правая точка рассматриваемого промежутка
223
s=s+h*(f(x1)+4*f(x2)+f(x3))/3; // площадь очередной криволинейной трапеции суммируется с предыдущим значением s
}
printf("The integral value is approximately equal to:=%f",s); // вы-
вод результата getch();
}
Результат программы:
- на языке Pascal ABC:
program Integral_Metod_Simpsona; type
real_function = function (x: Real): Real; function F(x: Real): Real;
begin
F := exp(sqr(x)) ; // задаем подынтегральную функцию f(x) end;
var
k, n :integer;
a, b, h, x1, x2, x3, s:Real; // задаем переменные begin
a:=0;
b:=3;
n:=500;
s:=0; h:=(b-a)/(2*n);
for k:=1 to n do // цикл begin
x1:=a+(2*k-2)*h; // левая точка рассматриваемого промежутка x2:=a+(2*k-1)*h; // центральная точка рассматриваемого промежутка x3:=a+2*k*h; // правая точка рассматриваемого промежутка
s:=s+h*(F(x1)+4*F(x2)+F(x3))/3; // площадь очередной криволинейной трапеции суммируется с предыдущим значением s
end;
WriteLn('The integral value is approximately equal to:',s); // вывод результата end.
Результат программы:
224
Пышкина Т.В.
Решение задач линейного программирования симплексметодом и с использованием табличного редактора Excel
Дано условие задачи линейного программирования:
Автомобилестроительный завод выпускает три модели автомобилей, кото-
рые изготавливаются последовательно в трех цехах. Мощность цехов со-
ставляет 300, 250 и 200 человекодней в декаду. В первом цехе для сборки одного автомобиля первой модели требуется 6 человекодней, второй моде-
ли — 4 и третьей модели — 2 человекодня в декаду соответственно. Во втором цехе трудоемкость равна 3,4 и 5 человекодней соответственно, в
третьем — по 3 человекодня на каждую модель. Прибыль, получаемая за-
водом от продажи одного автомобиля каждой модели, составляет соот-
ветственно 15, 13 и 10 тыс. долл.
Постройте модель для определения оптимального плана.
Рассмотрим сначала решение этой задачи симплекс-методом.
Пусть xi — количество выпускаемых автомобилей i-й модели в течение декады (i = 1, 2, 3). В принятых обозначениях модель имеет вид:
6x1 4x2 |
2x3 |
300 |
||
|
|
4x2 |
5x3 |
250 |
3x1 |
||||
|
|
3x2 |
3x3 |
200 |
3x1 |
||||
|
x1 , x2 , x3 целые |
|||
|
z 15x1 13x2 10x3 max
Решим задачу методом отсечения (методом Гомори):
225
zmax 894 при 18;48;0 .
Рассмотрим теперь решение этой задачи с использованием табличного ре-
дактора Excel.
Запишем исходные данные задачи в таблице Excel.
Пусть xi — количество выпускаемых автомобилей i-й модели в течение декады (i = 1, 2, 3). Присвоим им начальное значение равное нулю.
Введем формулу для вычисления первого ограничения задачи (трудоем-
кость первого цеха): СУММПРОИЗВ(B3:B5;B9:B11).
229
Аналогично, введем остальные ограничения задачи (трудоемкости второго и третьего цехов).
Введем формулу для вычисления целевой функции задачи: СУММПРО-
ИЗВ(E3:E5;B9:B11).
Выделив ячейку B18 с формулой целевой функции, запустим Данные – Поиск решения.
Замечание. По умолчанию в Excel надстройка Поиск решения отключена.
Чтобы активизировать ее, щелкните значок «Кнопка MicrosoftOffice»,
230