Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zadania_na_2_semestr / Методическое пособие.pdf
Скачиваний:
377
Добавлен:
02.04.2015
Размер:
1.62 Mб
Скачать

Функция eval

Для выполнения команд MATLAB их необходимо записать в m-файл или ввести в

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

eval('выражение')

Функция eval принимает в качестве входного аргумента строку, которую интерпретирует интерпретирует как выражение MATLAB и вычисляет его.

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

function simplePlotDialog()

%функция для организации простого диалога для построения графика fprintf('Построение графика функции\n');

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

67

%корректность введенных данных проверять не будем fBody = input('Введите функцию: f(x) = ', 's');

%тело функции введено пользователем, теперь

%осталось составить саму функцию

%как помните, в лабораторной работе №2 упоминались анонимные функции,

%для объявления которых использовалось выражения типа:

%переменная = @(список_аргументов) тело_функции;

%так как тело функции уже введено пользователем, то

%создадим анонимную функция, которую используем

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

f = eval(['@(x)' fBody]);

%помните что строки это векторы-строки, поэтому

%для их конкатенации (объединения строк)

%можно использовать выражение:

%[срока_1 строка_2]

fprintf('Введите диапазон в которых будем строить график\n');

% ввод нижней границы диапазона xMin = NaN;

while isnan(xMin)

xMin = input('Нижняя граница диапазона: '); % проверка, что xMin это число

if ~isscalar(xMin) || isnan(xMin) || ~isreal(xMin) xMin = NaN;

fprintf('Ошибка, некорректные данные\n');

end

end

% ввод верхней границы диапазона xMax = NaN;

while isnan(xMax)

xMax = input('Верхняя граница диапазона: '); % проверка, что xMin это число

if ~isscalar(xMax) || isnan(xMax) || ~isreal(xMax) xMax = NaN;

fprintf('Ошибка, некорректные данные\n');

end

end

%подготовка данных к построению графика x = xMin : (xMax-xMin) / 200 : xMax;

y = zeros(size(x)); for i = 1:length(x); y(i) = f(x(i));

end

%строим график

plot(x, y);

68

xlabel('x');

ylabel('y'); xlim([xMin xMax]);

title(['f(x) = ' fBody]); grid on;

end

Приведем пример работы данной программы:

>> simplePlotDialog Построение графика функции

Введите функцию: f(x) = sin(x) / x

Введите диапазон в которых будем строить график Нижняя граница диапазона: [3 3] Ошибка, некорректные данные Нижняя граница диапазона: -30 Верхняя граница диапазона: 30

>>

В результате выполнения программы появится следующий график:

Задания на лабораторную работу

В соответствии в вариантом выбрать 3 функции. Написать программу, которая попросит пользователя ввести четвертую функцию (по аналогии с примером функции simplePlotDialog, которая была продемонстрирована выше). Попросить пользователя ввести диапазон для построения функций. Далее все четыре функции построить на одном графике. График и оси подписать, так же добавить к графику легенду с формулами построенных функций. На графике включить сетку. Стили линий, маркеров и цвета линий выбрать самостоятельно.

69

Варианты задания

Номер

функция 1

 

 

 

 

 

 

функция 2

 

 

функция 3

 

 

 

 

варианта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

f 3

(x )=10sin(0.1 x +

π

1

f 1 (x )=10sin( x)e 6 π

 

f 2(x )=−x2+5 x

2 )

2

 

 

 

x2

 

f 2(x )=x 25 x

f 3(x )=5sin (0.2 x )

 

 

f 1 (x )=5cos( x)e

4 π

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

f 1 (x )=sin(1.1 x )+sin(0.9 x)

f 2(x )=0.5 x

2

+5 x

f 3

(x )=2sin (0.3 x

π

)

 

 

 

2

 

 

 

 

 

 

 

 

4

f 1(x )=cos(x ) sin(20 x)

f 2(x )=0.5 x

2

5 x

f 3

(x )=cos(0.1 x +

π

)

 

 

 

 

2

 

 

 

 

 

 

 

 

 

5

f 1 (x )=sin( x) cos(20 x)

f 2 (x )=−0.3 x2 +x +10

 

f 3 (x )=sin(0.2 x)

 

 

 

6

f 1 (x )=sin(20 x) x

2

 

 

f 2 (x )=−0.6 x

2

+2 x+5

f 3

(x )=cos(0.3 x +

π

)

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

2

 

 

 

 

 

 

 

π

 

 

7

f 1(x )=sin( x )

 

 

 

 

 

f 2(x )=2 x

 

 

15

f

3

(x )=sin(0.4 x+

4

)

 

 

 

 

 

 

 

 

 

 

 

 

 

8

f 1 (x )=cos(x2 )

 

 

 

f 2 (x )=−2 x2 +15

 

f 3 (x )=cos(0.1 x)

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

2

f 3

(x )=sin(0.2 x

π

)

 

9

f 1 (x )=sin( x )

 

 

 

 

 

f 2 (x )=−0.1 x +x

2

 

 

 

 

 

 

 

 

 

 

 

10

f 1(x )=sin (x )

 

 

 

 

 

f 2(x )=0.1 x2 x

f 3

(x )=2cos(0.3 x +

π )

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

11

f 1 (x )=sin(10 x) e

 

x

 

f 2(x )=0.1 x2 3

 

f 3 ( x)=sin (0.4 x )

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

f 1 (x )=sin( x)cos(x)

 

f 2 (x )=0.3 x

2

3 x

f 3

(x )=cos(0.5 x +

π

)

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

2

 

 

 

 

 

π

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f 3

(x )=3sin(0.1 x

 

)

13

f 1(x )=sin(10 x)(50x )

f 2(x )=0.4 x +4

2

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

2

 

 

 

 

f 3

(x )=2cos(0.2 x +

π

)

14

f 1 (x )=sin(5 x )(x 10 x5)

f 2 (x )=0.5 x

 

 

 

x +1

2

 

 

 

 

 

 

 

 

15

f 1(x )=cos(4.9 x )+cos(5.1 x)

f 2(x )=0.16 x 2x +5

f 3(x )=2sin (0.3 x)

 

 

70