36421

Символьные вычисления в MatLab

Лабораторная работа

Информатика, кибернетика и программирование

Исследование скорости роста символьной функции описывающей некоторые параметры модели объекта анимированная визуализация полученной характеристики. здесь f1 имя функции х имя переменной вводится как строка в апострофах по которой производится дифференцирование n порядок производной. здесь f1_new имя функции х имя переменной вводится как строка по которой производится интегрирование. Здесь f1 имя функции переменной n порядок остаточного члена x имя переменной вводится как строка в апострофах по...

Русский

2013-09-21

357.5 KB

115 чел.

Лабораторная работа 4

Символьные вычисления в MatLab

В ходе выполнения работы будут рассмотрены следующие операции:

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

- Выполнить дифференцировать и интегрировать аналитическое выражение.

- Разложить в ряд Тейлора функцию, заданную аналитическим выражением.

- Работа с командой funtool.

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

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

В именах функций имеет значение высота букв.

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

1. Развертка и свертка выражений.

Под разверткой понимается запись выражения в развернутой форме (с открытыми скобками). Под сверткой понимается обратное действие.

- Начать надо с указания символьных переменных. Для этого применяется функция: syms перечень имен переменных через пробел.

- Затем надо ввести исходную функцию  и отобразить ее в командном окне в естественном виде (команда pretty).

Например,

>> syms x a b

>> f=(sin(x)+a)^2/sqrt(abs(a+b))

f =

(sin(x)+a)^2/abs(a+b)^(1/2)

>> pretty(f)

                                            2

                                (sin(x) + a)

                                -------------

                                         1/2

                                | a + b |

>>

или 

>> f=sym('sin(x)')

f =

sin(x)

>> pretty(f)

                                   sin(x)

>>

- Далее следует выполнить операцию развертки и получить результат с именем f1_new. Для этого используется функция ехраnd(имя переменной). 

- Затем над f1_new нужно выполнить операцию свертки и получить результат с именем f1_old. Для этого используется функция simple(имя переменной). 

- Признаки правильного выполнения операций - при свертке результата развертки восстанавливается исходная функция.

Пример выполнения

f 1 (х)=(а+х)3

f2(x)=sin(x)/x

% Задача 1

% Определить символьные переменные

syms а х;

% Функция

f1=(a+x)^3

pretty(f1)

% Расширить ее

f1_new=expand(f1)

% Свернуть расширенное

f1_old=simple(f1_new)

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

>> c=sym('sqrt(2)');

>> cn=vpa(c)

 cn =

1.4142135623730950488016887242097

 

По умолчанию вычисляется 32 значащие цифры. Второй входной параметр команды vpa() служит для задания точности:

>> cn=vpa(c,70)

 cn =

1.414213562373095048801688724209698078569671875376948073176679737990732

Важно: Выходной аргумент команды vpa() является символьной переменной.

2. Дифференцирование и интегрирование выражений.

При дифференцировании выражения находится производная по выбранной переменной. При интегрировании выражения находится неопределенный интеграл (первообразная) по выбранной переменной. Константа по умолчанию - нуль.

- Начать надо с указания символьных переменных. Для этого применяется функция: syms перечень имен переменных через пробел).

- Затем надо ввести исходную функцию и отобразить ее в командном окне в естественном виде (команда pretty).

- Далее следует выполнить операцию дифференцирования и получить результат с именем f1_new. Для этого используется функция diff(f1,'x',n). здесь f1- имя функции, 'х' - имя переменной (вводится, как строка, в апострофах), по которой производится дифференцирование, n - порядок производной. Например,

>> P= diff('atan(x)',x,1);

>> pretty(P)

                                      1

                                   ------

                                        2

                                   1 + x

- Затем над f1_new нужно выполнить операцию интегрирования и получить результат с именем f1_old. Для этого используется функция int(f1_new,'x'). здесь f1_new - имя функции, 'х' - имя переменной (вводится, как строка), по которой производится интегрирование.

- Признаки правильного выполнения операций - при интегрировании результата дифференцирования восстанавливается исходная функция.

% Задача 2

% Определить символьные переменные

syms a x;

% Функция

f1=(a+x)^3

pretty(f1)

% Найти первую производную по х

f1_new=diff(f1,'x',1)

% Найти неопределенный интеграл по х

f1_old=int(f1_new,'x')

3. Разложение в ряд Тейлора.

Для заданного выражения находится ряд Тейлора с остаточным членом, величина которого зависит от точности, выбираемой при выполнении операции. Остаточный член отбрасывается.

- Начать надо с указания символьных переменных. Для этого применяется функция: syms перечень имен переменных через пробел

- Затем надо ввести исходную функцию.

- Далее следует выполнить операцию разложения в ряд Тейлора и получить результат с именем f1_new. Для этого используется функция taylor(f1,n,'x',a). Здесь f1 - имя функции, переменной, n - порядок остаточного члена, , 'x' - имя переменной (вводится, как строка, в апострофах), по которой производится разложение, а - значение переменной, для которого делается разложение (если оно пропускается, то предполагается а=0).

- Затем над f1_new нужно выполнить операцию свертки и получить результат с именем f1_old. Для этого используется функция simple(имя переменной).

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

- Для построения графиков символьных функций имеется процедура ezplot(f2,-h,h);grid on. Здесь f2 - имя символьной функции, (-h h) - нижний и верхний предел значений аргумента, grid on – включает в графике координатную сетку. В заголовок графического окна помещается описание функции. По этой причине в одно графическое окно можно вывести только один график.

% Задача З

% Определить символьные переменные

syms x;

% Функция

f2=sin(x)/x

% Найти разложение Тейлора по х в точке О

f2_new=taylor(f2,5,'x',0)

% Диапазон просмотра

п=4;

% График f2

figure(1);

ezplot(f2,-h,h);grid on

% График f2_new

figure(2);

ezplot(f2_new,-h,h);grid on

4. Оболочка  funtool

 Для работы с символьными функциями предусмотрена функция оболочка - funtool. Она представляет собой интерактивный графический калькулятор, позволяющий быстро построить две функции одной переменной f(x) и g(х). выводятся три автономных окна: два графических и управляющее.

Графики отображаются в отдельных окнах с заголовками.

Управляющее окно содержит:

- Два поля ввода функций.

- Поле ввода пределов переменной х в формате [min.max].

- Поле ввода масштабирующего коэффициента а.

Управление осуществляется кнопками, сгруппированными в 4 ряда:

- Первый - тип символьного преобразования f(x).

- Второй - тип масштабирования f(x): f+a, f-a, f*a, f/a, f^a, f(x+a), f(x*a).

- Третий - тип замены f(x) на комбинацию f(x) и g(x).

- Четвертый - управляющие операции:

—>  Insert - ввести f(x) в библиотеку встроенных функций,

—> Cycle - циклически вызвать f(x) из библиотеки встроенных функций,

—>  Delete - удалить f(x) из библиотеки встроенных функций,

—> Reset - установить утилиту в исходное состояние,

—> Help - вызов справки.

—> Demo - демонстрация использования,

—> Close - закрыть.

Работа с функцией f1 (x)

Работа с функцией f2(x)

Внимание: funtool использует средства символьной математики. Поэтому при вычислении sin(x)/x неопределенность при х=0 раскрывается. Отрабатываются также бесконечно большие значения.

5. Исследование скорости роста символьной функции, описывающей некоторые параметры модели объекта

Построение математической модели для исследования указанной  задачи состоит  в построении касательной функции в некоторой точке X0, затем создания анимации процесса  построения касательной в точках диапазона [X0-1,X0+1].

Алгоритм, реализующий решение поставленной задачи, включает следующие шаги:

1. Определение символьной функции по входной строковой переменной при помощи sym.

2. Нахождение производной в символьном виде.

3. Формирование символьного выражения для касательной.

4. Построение графика символьной функции на некотором интервале [X0-1,X0+1] с шагом 0.1.

5. Построение движущейся точки касания и графика касательной в этой точке.

 Рекомендации по выполнению задания:

A. Следует создать файл-функцию tangent1(‘x^2’,0), возвращающую символьную строку yt, которая содержит символьную запись уравнения производной в некоторой точке X0.

1. В создаваемую файл-функцию tangent1 следует передать в качестве параметра f1 - строку символов, содержащую запись исследуемой функции (см. вариант) и в качестве параметра Х0 - некоторое значение переменной х,  для которого необходимо построить касательную.

1. Для вычисления значения Y0 символьной функции f10, соответствующей строке f1, в точке X0 следует использовать:

sym x

f10=sym(f1);

Y0=subs(f10,’x’,X0);

2. Для символьного задания уравнения касательной следует использовать уравнение прямой, проходящей через точку (x0,y0), и команду sym

>> yt=sym('y0+k*(x-x0)')

yt =

y0+k*(x-x0)

3. Для вычисления коэффициента K наклона касательной следует продифференцировать исходное уравнение и найти его значение в точке X0, используя команды

 f11=diff(f10,’x’,1);

и  K = subs(f11,’x’,X0);

4. Последовательно подставить значения коэффициента k и координат точки x0, y0

>> K=3;  %K – необходимо вычислить на предыдущем шаге

>>   %K=3 выбрано в качестве примера

>> yt=subs(yt,'k',K)

yt =

y0+3*x-3*x0

>> yt=subs(yt,'x0',X0);

>> yt=subs(yt,'y0',Y0);

В.  Построение анимации движения касательной

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

% анимациz

% последовательного построения касательной к графику

% функции y=x^2 в точках x0 от -1 до 1

% h3 – дескриптор, используемый для анимации движения точки касания

% h1 – дескриптор, используемый для анимации положения касательной

clear;

x=[-1:0.1:1];        % интервал изменения переменной х с шагом 0.1

% для построения графика кривой

x1=[-1.5:0.1:1.5]; % интервал изменения переменной х с шагом 0.1

% для построения отрезка касательной

% задать дескриптор точки касаниz

x0=x(1);

y0=x0*x0;        % в лаб. работе

% y0 вычисляется на основе символьной функции

h3=line(x0,y0);

set(h3,'Marker','o');

set(h3,'color','b');

set(h3,'EraseMode','xor');

% задать дескриптор графика функции y=x^2

y2=x.*x;  % в лаб. работе

% y2 вычисляется на основе символьной функции

% команды subs и вектора х

h2=line(x,y2);

set(h2,'color','r');

% задать дескриптор уравнениz касательной в точке (x0,y0)

y1=y0+2*x0*(x1-x0);

h1=line(x1,y1);

set(h1,'color','g');

set(h1,'EraseMode','xor');     %'background');

% зададим диапазон изменениz переменных вдоль осей Х и Y

axis([-2 2 -1 4]);

axis manual;

% принудительный вывод графиков, заданных дескрипторами

pause(0.1);

k=length(x);

% бесконечная анимация, завершить - Ctrl+C

while 1

   for i=1:k

       x0=x(i);

       y0=x0*x0;        % в лаб. работе

% y0 вычисляется на основе символьной функции

       y1=y0+2*x0*(x1-x0);   % 2*x0 – это коэффициент наклона касательной

% для функции x^2

    % в лаб. работе для нахождения y1 надо

% использовать символьную функцию, записанную в строку yt 

% команду subs и вектор х1

% yt – здесь находится для каждой точки х0

 % прорисовка точки и касательной в новом месте

       set(h3,'XData',x0,'YData',y0);

       set(h1,'XData',x1,'YData',y1);

       pause(0.1);

   end

end

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

Задания лабораторной работы

1. Выполнить развертку и свертку аналитического выражения.

Ввести выражение f1 (x).

Вывести в командное окно выражение f1 (x) в естественном виде (команда pretty).

Развернуть выражение f1 (x).

Полученное выражение свернуть.

Сравнить результат c f1(x).

2. Выполнить дифференцирование и интегрирование аналитическое выражение.

Ввести выражение f1 (x) и найти производную по х.

Вывести в командное окно выражение f1 (x) в естественном виде (команда pretty).

Для полученного выражения найти неопределенный интеграл.

Сравнить с f1 (x).

3. Разложить в ряд Тейлора функцию, заданную аналитическим выражением.

Ввести выражение f2(x) и найти его разложение в ряд Тейлора.

Построить XY график для f2(x) и его разложения в ряд Тейлора F2(x).

4. Работа с командой funtool

Задать функцию f1 и выполнить с ней операции задачи 2.

Задать функцию f2 и выполнить с ней операцию символьного дифференцирования.

5. Исследование скорости роста символьной функции, описывающей некоторые параметры модели объекта в точке X0=0  и в диапазоне [X0-1,X0+1].

Необходимо написать следующие файл-функции:

а) файл-функция, входными аргументами которой являются:

-  строка с символьным представлением функции f1(x) одной переменной х,

- числовое значение абсциссы точки, в которой следует провести касательную.

б) файл-функция анимации процесса построения касательной в точках диапазона

[X0-1,X0+1].

Варианты:

Для всех вариантов: a=4, b=5.

f1(x)

f2(x)

1

(1+x)2

ax3+bx2+cx+d

2

(1-х)2

sin(ax)

3

(а+х)2

cos(ax)

4

(а-х)2

sec(x)

5

(1+х)3

exp(ax)

6

(1-х)3

x(ln(x)-1)

7

(а+х)3

-csec(x)

8

(а-х)З

1/(1+x2)

9

(1+x)4

1/(a+bx)

10

(1-х)4

1/(1-x2)

PAGE  1


 

А также другие работы, которые могут Вас заинтересовать

10980. Факторный анализ. Задача однофакторного анализа 89.48 KB
  Факторный анализ Ранее была рассмотрена проверка значимости различия выборочных средних двух совокупностей. На практике часто возникает необходимость обобщения задачи т.е. проверки существенности различия выборочных средних совокупностей . Например требуется оцен
10981. Однофакторный дисперсионный анализ 136.3 KB
  Однофакторный дисперсионный анализ Для описания данных в большинстве случаев оказывается приемлема аддитивная модель. Она предполагает что значение отклика можно представить в виде суммы вклада воздействия фактора и независимой от вкладов факторов случайной велич...
10982. Однофакторный анализ в системе statistica 6.0 168.06 KB
  Однофакторный анализ в системе statistica 6.0 Рассмотрим типичную задачу однофакторного анализа реально возникшую на производстве. Пример.На заводе разработаны две новые технологии Т1 и Т2. Чтобы оценить как изменится дневная производительность при переходе на новые техн...
10983. Однофакторный анализ в системе statistica 6.0. Критерий Кронкхиера 257.69 KB
  ОДНОФАКТОРНЫЙ АНАЛИЗ В СИСТЕМЕ Statistica 6.0 Критерий Кронкхиера Если известно что имеющиеся группы результатов упорядочены по возрастанию убыванию влияния фактора то в таких случаях можно использовать статистику Джонкхиера более чувствительную более мощную против...
10984. Двухфакторный анализ 146.5 KB
  Двухфакторный анализ Бывает что в рамках однофакторной модели влияние интересующего нас фактора не проявляется хотя логические соображения указывают что такое влияние должно быть. Иногда это влияние проявляется но точность выводов о количественной оценке этого вли...
10985. ДВУХФАКТОРНЫЙ АНАЛИЗ В СИСТЕМЕ Statistica 6.0 216.58 KB
  Двухфакторный анализ продолжение ПримерДВУХФАКТОРНЫЙ АНАЛИЗ Исследуем зависимость частоты самопроизвольного дрожания мышц рук тремора от тяжести специального браслета одеваемого на запястье. Полученные результаты приведены в табл.1 причем каждое значение ср
10986. Кластерный анализ 44.7 KB
  Кластерный анализ Если процедура факторного анализа сжимает в малое число количественных переменных данные описанные количественными переменными то кластерный анализ сжимает данные в классификацию объектов. Синонимами термина кластерный анализ являются автомати...
10987. Кластерный анализ. Анализ временных рядов 79.16 KB
  КЛАСТЕРНЫЙ АНАЛИЗ ПРОДОЛЖЕНИЕ Монотонность Для графического представления процесса объединения все индивиды группы размещаются в соответствующем порядке на оси абсцисс. Последовательность объединений иерархия или дендрограмма требует чтобы каждое объединени
10988. Сглаживание временного ряда (выделение неслучайной компоненты) 98.62 KB
  Сглаживание временного ряда выделение неслучайной компоненты Одной из важнейших задач исследования временного ряда является выявление основной тенденции изучаемого процесса выраженной неслучайной составляющей тренда либо тренда с циклической или/и сезонной ком...