Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / Лабы 3 / Texti / LAB_03

.TXT
Скачиваний:
20
Добавлен:
17.04.2013
Размер:
3.7 Кб
Скачать
Лабораторная работа № 3

Графики функций. Определение корней полиномов и нулей функций.

Часть 1. Многочлены

1. (АиЭМ) Ознакомьтесь с системой помощи (help) в среде MATLAB. Для этого сначала
наберите в командной строке help дважды, т.е. >>help help. Затем просмотрите
из предложенных тем три: элементарные функции - help elfun; нелинейные
численные методы - help funfun и действия с многочленами help polyfun. Вы-
бирите команды, имеющие отношение к теме лабораторной работы.

2. Просмотрите помощь по основным командам для работы с многочленами: (help polyval,
roots, poly). Проверьте упражнение н/д (лекция 2):

polyval([1 -5 6], 2)

roots(([1 -5 6])

Проверьте полученные результаты построением графика этого многочлена (запишите его
выражение в тетрадке)

x=-1:.1:4;c=[1 -5 6];y=polyval(c,x);plot(x,y),grid

3. Найдите коэффициенты многочлена, корнями которого являются: 1, номер Вашего
компьютера (АиЭМ) или Ваш номер по списку группы (ФХ) и плюс-минус мнимая единица.
Покажите результат преподавателю. Проверьте корни командой roots. Постройте график
этого многочлена. Как по графику можно предположить наличие комплексных корней?

Часть 2. Произвольные функции

4. Вы будете сначала работать с тестовой функцией f(x)=exp(x)-10*x. Поэтому
создайте m-файл функцию для вычисления ее значений.
Например:

% Начало файла

function y=myfun(x)

% Тестовая функция лабораторной работы
% в m-файле (функции) с именем myfun.m

y=exp(x)-10*x;

% Конец файла

В тетрадке нарисуйте эскиз графика, определите примерный диапазон значений
х, в котором могут находиться ее корни. Постройте график этой функции в
MATLAB на отрезке [-10 10] с шагом .1, ответьте на вопрос почему
получается такой мало информационный график. Уменьшите область задания
аргумента для наилучшего наблюдения корней (воспользуйтесь командой grid
для подключения масштабной сетки).

5. Найдите меньший корень этой функции методом деления отрезка пополам (методом
бисекций). Оформите процедуру нахождения корня файлом bis.m. Задайте а=0 и в=3 и
сначала выполните процедуру несколько раз, вызывая ее в командной строке:

bis;c

В случае затруднений с созданием файла см. Приложение1. Затем составьте
процедуру поиска в автоматическом режиме. Убедитесь в том, что смещение а влево
не влияет на результат.

6. Исследуйте встроенную процедуру MATLAB fzero и с ее помощью найдите тот же
корень. Смещайте стартовую точку влево и обратите внимание на то, что, например,
при fzero('myfun',-6) вместо корня получается - что?
Вывод: при "бездумном" использовании стандартных процедур можно получить
"безумный" результат

7. Так же как в пп. 2 и 3 найдите больший корень.

8. Создайте m-файл функцию (myfun_p.m) для вычисления производной этой функции
и, используя метод касательных, найдите корни тестовой функции. Сравните
скорости сходимости этих двух методов.

9. Найдите корни тестовой функции (f(x)=exp(x)-10*x) методом итераций. Обоснуйте
выбор преставления x=q(x) для поиска каждого из корней.

10. Получите у преподавателя контрольное уравнение f(x)=0 и найдите его корни.
Например: exp(x)-x^2=0.
Приложение1

c=(a+b)/2;
if myfun(c)==0
['ноль найден точно' num2str(c)]
elseif abs(a-b)<10^(-6)
['ноль найден приближенно' ' c= ' num2str(c) ' f(c)= ' num2str(myfun(c))]
break %Выход из процедуры
elseif myfun(c)*myfun(a)<0
b=c;
else
a=c;
end

Если этот файл процедура назван bis.m, то вычисления в цикле можно выполнить
следующим например образом:

a=0;b=3;while abs(a-b)>.00000001,bis,end

Заметим, что необходимо аккуратно учесть соотношение между параметром окончания
цикла while и точностью определения точки с.
Соседние файлы в папке Texti