- •[Править] Возможности
- •[Править] Распространение
- •Введение
- •Основные характеристики пакета Scilab
- •Обзор документации по пакету Scilab
- •2.3 Переменные в Scilab
- •Начинаем работать в Scilab!
- •2 Основы работы в Scilab
- •2.1 Текс товые коммен тарии
- •2.2 Элемен тарные ма тема тические выражения
- •2.4 Сис темные переменные Scilab
- •2.5 Ввод вещес твенного числа и предс тавление
- •2.6 Функции в Scilab
- •2.6.1 Элементарные математические функции
- •2.6.2 Функции, определенные пользователем
- •6.2 Трансценден тные уравнения
- •6.3 Сис темы уравнений
- •13 Решение задач оптимизации
- •13.1 Поиск минимума функции одной переменной
- •13.2 Поиск минимума функции многих переменных
- •13.3 Решение задач линейного программирования
- •8 Решение обыкновенных дифференциальных
- •7.4 Приближенное дифференцирование, основанное на
- •7.5 Вычисление производной функции в т очке.
7.4 Приближенное дифференцирование, основанное на
ин терполяционной формуле Ньютона
Идея численного дифференцирования заключается в том, что функцию y(x), заданную в
равноотстоящих точках xi (i = 0, 1, ..., n) отрезка [a, b] с помощью значений yi=f(xi)
приближенно заменяют интерполяционным полиномом Ньютона, построенном для системы
узлов x0, x1, ..., xk (kn), и вычисляют производные y'=f'(x), y''=f''(x) и т.д.
y ' x0=1
h y0−
2 y0
2
3 y0
3 −
4 y0
4
5 y0
5 −... , (7.2)
На практике приближенное дифференцирование применяют в основном для функций
заданных в виде таблицы.
В Scilab численное дифференцирование реализовано командой dy=diff(y [,n ]),
где y _ значения функции y(x) в виде вектора вещественных чисел, n _ порядок
дифференцирования. Результат работы функции - вектор вещественных чисел dy,
представляющий собой разности порядка n интерполяционного полином Ньютона y, 2y, ...,
ky. Рассмотрим работу функции на примере.
ЗАДАЧА 7.5
Найти y'(50) функции y=lg(x), заданной в виде таблицы.
Решение данной задачи с комментариями представлено в листинге 7.7.
-->h=5;x=50:5:65;
-->y=log10(x)
y = 1.69897 1.7403627 1.7781513 1.8129134
-->dy=diff(y)
dy = 0.0413927 0.0377886 0.0347621
-->dy2=diff(y,2)
dy2 = - 0.0036041 - 0.0030265
-->dy3=diff(y,3)
dy3 = 0.0005777
-->//Приближенное значение y'(50) по формуле (7.2)
-->Y=(dy(1)-dy2(1)/2+dy3(1)/3)/h
Y = 0.0086775
-->//Значение y'(50) для lg'(x)=1/ln(10)/x
-->1/log(10)/x(1)
ans = 0.0086859
-->//Приближенное значение y'(x), x=50,55,60 (7.2)
-->Y=(dy-dy2(1:$-1)/2+dy3(1:$-2)/3)/h
Y = 0.0086389 0.0079181 0.0073128
-->//Значение y'(x), x=50,55,60, для lg'(x)=1/ln(10)/x
-->(1/log(10))./x(1:$-1)
ans = 0.0086859 0.0078963 0.0072382
Листинг 7.7
7.5 Вычисление производной функции в т очке.
Приближенное вычисление час тных производных.
Более универсальной командой дифференцирования является команда
g=numdiff(fun,x)
здесь fun - имя функции, задающей выражение для дифференцирования. Функция должна
быть задана в виде y=fun(x [, p1, p2,..., pn]), где x - переменнаяпо которой
будет проводится дифференцирование. Если параметры p1, p2,..., pn присутствуют в
описании функции, то должны быть обязательно определены при вызове, например так
g=numdiff(list(fun,p1,p2,..pn),x).
Результат работы функции _ матрица gij=
df i
dx j
.
Рассмотрим несколько примеров.
ЗАДАЧА 7.6
Вычислить f'(1), если f(x)=(x+2)3+5x.
Листинг 7.8 содержит решение данной задачи.
-->function f=my(x), f=(x+2)^3+5*x, endfunction;
-->numdiff(my,1)
ans = 32.
-->x=1;3*(x+2)^2+5
ans = 32.
Листинг 7.8
5
ЗАДАЧА 7.7
Вычислить f'(x) в точках 0, 1, 2, 3 для f(x)=(x+2)3+5x.
Решение:
-->v=0:3;
-->numdiff(my,v)
ans =
17. 0. 0. 0.
0. 32. 0. 0.
0. 0. 52.999999 0.
0. 0. 0. 80.000002
-->function f1=my1(x), f1=3*(x+2)^2+5, endfunction;
-->my1(v)
ans = 17. 32. 53. 80.
Листинг 7.9
ЗАДАЧА 7.8
Задана функция многих переменных y x1, x2, x3=x1 x2
x3x1 2 x3 . Вычислить
dy
dx1
, dy
dx2
, dy
dx3
в точке (1, 2, 3).
Решение задачи представлено в листинге 7.10.
-->function [Y]=f(X), Y=X(1)*X(2)^X(3)+X(1)^2*X(3),endfunction
-->X=[1 2 3];
-->numdiff(f,X)
ans = 14. 12. 6.5451775
-->//--------------------------------
-->function [Y]=f1(X),
Y(1)=X(2)^X(3)+2*X(1)*X(3),
Y(2)=X(1)*X(3)*X(2)^(X(3)-1),
Y(3)=x(1)*X(2)^X(3)*log(X(2))+X(1)^2,
endfunction
-->f1(X)
ans =
14.
12.
6.5451774
Листинг-->function f=my(x), f=(x+2)^3+5*x, endfunction;
-->numdiff(my,1)
ans = 32.
-->x=1;3*(x+2)^2+5
ans = 32.
Листинг 7.8
5
ЗАДАЧА 7.7
Вычислить f'(x) в точках 0, 1, 2, 3 для f(x)=(x+2)3+5x.
Решение:
-->v=0:3;
-->numdiff(my,v)
ans =
17. 0. 0. 0.
0. 32. 0. 0.
0. 0. 52.999999 0.
0. 0. 0. 80.000002
-->function f1=my1(x), f1=3*(x+2)^2+5, endfunction;
-->my1(v)
ans = 17. 32. 53. 80.
Листинг 7.9
ЗАДАЧА 7.8
Задана функция многих переменных y x1, x2, x3=x1 x2
x3x1 2 x3 . Вычислить
dy
dx1
, dy
dx2
, dy
dx3
в точке (1, 2, 3).
Решение задачи представлено в листинге 7.10.
-->function [Y]=f(X), Y=X(1)*X(2)^X(3)+X(1)^2*X(3),endfunction
-->X=[1 2 3];
-->numdiff(f,X)
ans = 14. 12. 6.5451775
-->//--------------------------------
-->function [Y]=f1(X),
Y(1)=X(2)^X(3)+2*X(1)*X(3),
Y(2)=X(1)*X(3)*X(2)^(X(3)-1),
Y(3)=x(1)*X(2)^X(3)*log(X(2))+X(1)^2,
endfunction
-->f1(X)
ans =
14.
12.
6.5451774
Листинг
