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

Отчет по лаборатороным работам №6-7

.docx
Скачиваний:
16
Добавлен:
23.07.2020
Размер:
2.1 Mб
Скачать

Министерство науки и высшего образования Балтийский государственный технический университет «ВОЕНМЕХ» им. Д.Ф. Устинова

Кафедра: Информационные системы и программная инженерия (И5) Дисциплина: Программные средства автоматизации инженерных расчетов

Отчет по лабораторным работам №6-7 на тему «Решение типовых вычислительных задач в системе Matlab»

Выполнил студент группы

Преподаватель:

Санкт-Петербург

2020

Содержание

Общая задача 3

Содержание меню 3

Текст скрипт-файла 3

Результат 4

Описание пунктов меню 4

«Untitled61» 4

«Untitled62» 6

«Untitled63» 6

«Untitled64» 8

«Untitled65» 9

Общая задача

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

  • Вычислить корни полинома;

  • Решить систему линейных уравнений;

  • Вычислить локальный минимум и максимум функции;

  • Вычислить определенный интеграл;

  • Решить трансцендентное уравнение;

Решение всех задач различными способами объединить в файле-сценарии.

Содержание меню

Меню состоит из нескольких пунктов:

  1. Нахождение корней полинома;

  2. Решение системы линейных уравнений;

  3. Нахождение максимума и минимума функции;

  4. Вычисление интеграла;

  5. Нахождение корней трансцендентного уравнения;

  6. Выход.

Текст скрипт-файла

Тест скрипт-файла, написанный с использованием функций menu, while, eval, для вывода меню:

d=[ 'Untitled61'

'Untitled62'

'Untitled63'

'Untitled64'

'Untitled65'];

k=0;

while k~=6

k=menu('Лабораторная работа', 'нахождение корней полинома', 'решение системы линейных уравнений', 'нахождение максимума и минимума функции', 'вычисление интеграла', 'нахождение корней трансцендентного уравнения', 'выход');

eval(d(k,:))

end;

Результат

Результатом данного «скрипта» является выход всплывающего меню:

Описание пунктов меню

«Untitled61»

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

Текст скрипт-файла:

p=[5,0,1,-4];

disp('Введите границы построения графика:')

q=input('Левая граница x1=');

w=input('Правая граница x2=');

disp('Корни полинома (численный метод):')

v=roots(p);

disp(v)

k=q:0.005:w;

r=polyval(p,k);

plot(k,r);

hold on

d=v(imag(v)==0);

plot(d,0,'pr');

grid on

xlabel('ось х');

ylabel('ось у');

syms x

u=solve(5*x^3+x-4);

disp('Корни полинома (символьный метод):')

s=vpa(u);

disp(s)

d=s(imag(s)==0);

plot(d,0,'+b');

legend('5x^3+x-4','действ.корень','действ. корень (симв)');

title('Корни полинома');

Результат:

«Untitled62»

Задание: Решить систему линейных уравнений, осуществить проверку полученного решения.

Текст скрипт-файла:

A=[5,8,-1;1,2,3;2,-3,2];

B=[-7;1;9];

X=A\B;

disp('Корни системы уравнений (численный метод):')

disp(sprintf('x=%3.2f ',X))

disp('Проверка:')

B=A*X;

disp(sprintf('Ответ=%1.0f ',B))

syms x1 x2 x3 i o t;

[x1,x2,x3]=solve(5*x1+8*x2-x3==-7,x1+2*x2+3*x3==1,2*x1-3*x2+2*x3==9);

disp(sprintf('Корни системы уравнений (символьный метод):x1=%1.2f x2=%1.2f x3=%1.2f',x1,x2,x3))

disp('Проверка:')

[i o t]=solve(i==5*x1+8*x2-x3,x1+2*x2+3*x3==o,2*x1-3*x2+2*x3==t);

disp(sprintf('Ответ i=%1.0f o=%1.0f t=%1.0f',i,o,t))

Результат: >>Untitled62 Корни системы уравнений (численный метод): x=1.25 x=-1.54 x=0.94 Проверка: Ответ=-7 Ответ=1 Ответ=9 Корни системы уравнений (символьный метод): x1=1.25 x2=-1.54 x3=0.94 Проверка: Ответ i=-7 o=1 t=9

«Untitled63»

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

Текст скрипт-файла:

fplot(@a,[1 2.5])

hold on

grid on

[x,y]=fminbnd(@a, 1, 2.5);

disp(sprintf('Координаты минимума функции (численный метод) x=%2.2f, y=%2.2f', x, y))

plot(x,y,'*r');

[x y]=fminbnd( @(x)(-sqrt(x+1)*(sin(2*x)+3*x^2)), 1, 2.5);

disp(sprintf('Координаты максимума функции (численный метод) x=%2.2f, y=%2.2f', x, -y))

hold on

plot(x,-y,'*g');

xlabel('ось х');

ylabel('ось у');

legend('sqrt(x+1)*(sin(2*x)+3*x^2)','min','max');

title('Минимум и максимум функции(численный)');

Файл-функция:

function f=a(x)

f=(sqrt(x+1)*(sin(2*x)+3*x^2));

end

Результат:

«Untitled64»

Задание: вычислить интеграл , построить график подынтегральной функции, границы графика вводить с клавиатуры и закрасить площадь, ограниченную функцией на заданном отрезке;

Текст скрипт-файла:

A=input('Левая граница графика х1=');

B=input('Правая граница графика х2=');

[i,n]=quad('b',0.6,1.4,1e-8,1);

disp(sprintf('Значение интеграла (численный метод) i=%1.5f',i))

fplot(@b,[A B]);

hold on

grid on

x=A:0.0001:B;

y=b(x);

bar(x,y);

syms x

f=x.^2.*cos(x);

I=int(f,x,0.6,1.4);

O=vpa(I,3);

disp(sprintf('Значение интеграла (символьный метод) I=%1.5f',O))

legend('x^2*cos(x)','область под графиком');

title('Численное интегрирование')

xlabel('ось х');

ylabel('ось у');

Файл-функция:

function f=b(x);

f=(x.^2.*cos(x));

end

Результат:

«Untitled65»

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

Текст скрипт-файла:

a=input('Левая граница графика a=');

b=input('Правая граница графика b=');

fplot(@c,[a b])

grid on

hold on

x1=fzero('c',0);

disp('Корни трансцендентного уравнения (численный метод):')

disp(sprintf('x1=%1.2f ',x1))

plot(x1,0,'*r');

syms x

[x2]=solve(exp(x)-exp(-x)-2,x);

disp('Корни трансцендентного уравнения (символьный метод):')

disp(sprintf('x2=%1.2f ',x2))

plot(x2,0,'+b');

title('Решение трансцендентных уравнений');

legend('e^x-exp(-x)-2','x1(корни численного метода)','x2(корни символьного метода)');

xlabel('ось х');

ylabel('ось у');

Файл-функция:

function f=c(x);

f=(exp(x)-exp(-x)-2);

end

Результат: