Отчет по лаборатороным работам №6-7
.docxМинистерство науки и высшего образования Балтийский государственный технический университет «ВОЕНМЕХ» им. Д.Ф. Устинова
Кафедра: Информационные системы и программная инженерия (И5) Дисциплина: Программные средства автоматизации инженерных расчетов
Отчет по лабораторным работам №6-7 на тему «Решение типовых вычислительных задач в системе Matlab»
Выполнил студент группы
Преподаватель:
Санкт-Петербург
2020
Содержание
Общая задача 3
Содержание меню 3
Текст скрипт-файла 3
Результат 4
Описание пунктов меню 4
«Untitled61» 4
«Untitled62» 6
«Untitled63» 6
«Untitled64» 8
«Untitled65» 9
Общая задача
Используя встроенные функции, реализующие различные численные методы решения, средства символьного вычисления и файлы-функции, выполнить следующие задачи:
-
Вычислить корни полинома;
-
Решить систему линейных уравнений;
-
Вычислить локальный минимум и максимум функции;
-
Вычислить определенный интеграл;
-
Решить трансцендентное уравнение;
Решение всех задач различными способами объединить в файле-сценарии.
Содержание меню
Меню состоит из нескольких пунктов:
-
Нахождение корней полинома;
-
Решение системы линейных уравнений;
-
Нахождение максимума и минимума функции;
-
Вычисление интеграла;
-
Нахождение корней трансцендентного уравнения;
-
Выход.
Текст скрипт-файла
Тест скрипт-файла, написанный с использованием функций 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
Результат: