Uploaded by Евпатий Коловрат

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

advertisement
Ëàáîðàòîðíàÿ ðàáîòà 1
Öåëü ðàáîòû:
Èçó÷èòü ñèìâîëüíûå è ÷èñëåííûå ìåòîäû ðåøåíèÿ ñè-
ñòåì íåëèíåéíûõ óðàâíåíèé ïðè ïîìîùè ïàêåòà MATLAB è ïðàêòè÷åñêè
ïðîäåìîíñòðèðîâàòü ïðèîáðåò¼ííûå íàâûêè.
Çàäà÷à:
Ðåøèòå ñèñòåìó â ñèìâîëüíîì âèäå è ÷èñëåííûì ìåòîäîì:

 x2 − y − 4 = 0
 2x + y = 0
Ðåçóëüòàò ðàñ÷¼òîâ âûâåäèòå â ôàéë
result.txt
(1)
â ñëåäóþùåì âèäå:
Ñèñòåìà:
...
Ðåøåíèå, ïîëó÷åííîå â ñèìâ. âèäå:
x= ...
y= ...
×èñëåííîå ðåøåíèå:
x= ...
y= ...
Êîëè÷åñòâî èòåðàöèé:
...
Íà÷àëüíûå óñëîâèÿ: x0=..., y0=...
Õîä ðàáîòû
1. Çàïóñêàþ
ïðîãðàììó
Matlab.
Íàæàòèåì
íà
êíîïêó
¾New
Script¿ ñîçäàþ íîâûé ñöåíàðèé. Ñîõðàíÿþ åãî ïîä èìåíåì
¾solution_system_of_equation_symbol_method¿.
2. Îáúÿâëÿþ äâå ïåðåìåííûå ¾x¿ è ¾y¿, êîòîðûå ïåðåäàþ êîìàíäå
¾syms()¿ â êà÷åñòâå àðãóìåíòîâ.  ðåçóëüòàòå îíè ïðèîáðåòàþò çíà÷åíèå è èì ïðèñâàèâàåòñÿ ñèìâîëüíûé òèï.
3. Îïðåäåëÿþ äâà óðàâíåíèÿ ïîä èìåíàìè ¾eq1¿ è ¾eq2¿ è òóò æå èíèöèàëèçèðóþ èõ çíà÷åíèÿìè ôóíêöèé èç çàäàíèÿ.  ñëó÷àå âûïîëíåíèÿ
ñöåíàðèÿ MATLAB àâòîìàòè÷åñêè îïðåäåëÿåò äëÿ ïåðåìåííûõ ¾eq1¿
2
è ¾eq2¿ òèï ¾syms¿ è èíèöèàëèçèðóåò èõ çíà÷åíèÿìè èç óêàçàííûõ
óðàâíåíèé.
4. Äëÿ íàõîæäåíèÿ êîðíåé ñèñòåìû óðàâíåíèé èñïîëüçóþ êîìàíäó
¾solve()¿ , ïåðåäàþ åé â êà÷åñòâå àðãóìåíòîâ çíà÷åíèÿ ¾eq1¿ è ¾eq2¿
è èíèöèàëèçèðóþ èõ íóëåâûì çíà÷åíèåì ñ ïîìîùüþ êîìàíäû ¾==¿.
 ñëó÷àå âûïîëíåíèÿ ñöåíàðèÿ, ïðè ïîìîùè àëãîðèòìà çàëîæåííîãî
â îáúåêòå ¾solve¿, MATLAB îñóùåñòâëÿåò íàõîæäåíèÿ âñåõ âîçìîæíûõ êîðíåé ñèñòåìû â ñèìâîëüíîì âèäå è âîçâðàùàåò çíà÷åíèÿ ýòèõ
êîðíåé. Ïîñêîëüêó, â ðåçóëüòàòå âûïîëíåíèÿ äàííîé êîìàíäû âîçâðàùàåòñÿ îïðåäåë¼ííîå çíà÷åíèå, ìîæíî ïðèñâîèòü åìó èìÿ.  äàííîì
ñëó÷àå ÿ èíèöèàëèçèðóþ ýòèì çíà÷åíèåì ìàññèâ èç äâóõ ïåðåìåííûõ
¾solx¿ è ¾soly¿.
5. Äàëåå äëÿ íàãëÿäíîñòè è äëÿ óäîáñòâà íàõîæäåíèÿ êîðíåé ÷èñëåííûì
ìåòîäîì ñòðîþ ãðàôèêè ñîîòâåòñòâóþùèõ ôóíêöèé:
(a) Îáúÿâëÿþ ëîêàëüíûå ïåðåìåííûå ¾xx¿ è ¾yy¿.
(b) Ñíà÷àëà, ëîêàëüíóþ ïåðåìåííóþ ¾yy¿ èíèöèàëèçèðóþ çíà÷åíèåì ¾xx2 − 4¿ è ïàðàìåòðû ¾xx¿ è ¾yy¿ ïåðåäàþ ôóíêöèè ¾ezplot()¿ â êà÷åñòâå àðãóìåíòîâ. Çàòåì, âêëþ÷àþ êîìàíäó ¾hold¿, ëîêàëüíîé ïåðåìåííîé ¾yy¿ ïðèñâàèâàþ çíà÷åíèå
¾−2∗xx¿ è ñíîâà ïåðåäàþ îáå ïåðåìåííûå ôóíêöèè ¾ezplot()¿. Â
ðåçóëüòàòå âûïîëíåíèÿ áóäóò ïîñòðîåíû äâà ãðàôèêà ôóíêöèé.
(c) Äëÿ ëó÷øåãî ïîíèìàíèÿ ãðàôèêà ñ ïîìîùüþ êîìàíä ¾xlabel()¿,
¾ylabel()¿, ¾text()¿ è ¾title()¿ äîáàâëÿþ íà ãðàôèê ïîäïèñè îñåé
è ãðàôèêîâ.  ðåçóëüòàòå ïîëó÷àåòñÿ ëàêîíè÷íûé è íàãëÿäíûé
ãðàôèê äâóõ ôóíêöèé, èç êîòîðîãî ìîæíî âûáðàòü àäåêâàòíûå
íà÷àëüíûå óñëîâèÿ (ðèñ. 1).
3
Ðèñ. 1: Ãðàôèêè ôóíêöèé
6. Ñ ïîìîùüþ êîìàíäû ¾fopen()¿ ñîçäàþ íîâûé ôàéë ñ ðàñøèðåíèåì
¾txt¿, ïðèñâàèâàþ åìó èìÿ ¾result.txt¿ â êà÷åñòâå àðãóìåíòà è èíèöèàëèçèðóþ ýòèì çíà÷åíèåì ïåðåìåííóþ ¾le1¿.
7. Â ñîîòâåòñòâèè ñ çàäàíèåì çàïèñûâàþ â ýòîò ôàéë ñòðîêîâûå äàííûå,
êîòîðûå ïåðåäàþ êîìàíäå ¾fprintf()¿ â êà÷åñòâå àðãóìåíòîâ.
8. ×òîáû ðåøèòü óðàâíåíèå â ÷èñëåííîì âèäå íåîáõîäèìî âîñïîëüçîâàòüñÿ êîìàíäîé ¾fsolve()¿. Íî äëÿ íàõîæäåíèÿ êîðíåé ñèñòåìû óðàâíåíèé ýòîé êîìàíäå â êà÷åñòâå àðãóìåíòà íåîáõîäèìî ïåðåäàâàòü
ïåðåìåííóþ, êîòîðàÿ ññûëàåòñÿ íà ôóíêöèþ. Ïîñêîëüêó çàäàííàÿ
ôóíêöèÿ ïðåäñòàâëÿåò ñîáîé ñèñòåìó óðàâíåíèé, íåîáõîäèìî ñîçäàòü
îòäåëüíûé ñöåíàðèé äëÿ ýòîé ôóíêöèè è ïðèñâîèòü åìó èìÿ:
4
(a) Ñîçäàþ íîâûé ñöåíàðèé ñ èìåíåì ¾root2d¿.
(b) Îïðåäåëÿþ â íåì ïåðåìåííóþ òèïà ¾function¿ ñ èìåíåì ¾F¿ è
çíà÷åíèåì ¾root2d(x)¿.
(c) Íèæå èíèöèàëèçèðóþ ìàññèâ ¾F¿ ìàññèâîì ôóíêöèé èç çàäàíèÿ.
(d) Ñîõðàíÿþ ñöåíàðèé â áàçîâîì êàòàëîãå MATLAB ñ îñíîâíûì
ñöåíàðèåì.
9. ×òîáû íàéòè êîðíè ñèñòåìû ÷èñëåííûì ìåòîäîì íåîáõîäèìî çàäàòü íà÷àëüíûå óñëîâèÿ. Äëÿ ýòèõ öåëåé áóäó èñïîëüçîâàòü êîìàíäó
¾fsolve()¿. Äëÿ ýòîãî, íà ïîñòðîåííîì ãðàôèêå âèçóàëüíî íàõîæó òî÷êè ïåðåñå÷åíèÿ äâóõ ãðàôèêîâ è óêàçûâàþ ïðèáëèæ¼ííûå çíà÷åíèÿ
êîîðäèíàò. Èç ãðàôèêîâ âèäíî, ÷òî ñèñòåìà èìååò äâà êîðíÿ, ïîýòîìó áóäåò äâå ïàðû íà÷àëüíûõ óñëîâèé è ñîîòâåòñòâåííî äâà âûçîâà
êîìàíäû ¾fsolve()¿ ñ ðàçíûìè íà÷àëüíûìè óñëîâèÿìè.
10. Ïî çàäàíèþ íåîáõîäèìî ïîëó÷èòü èíôîðìàöèþ î êîëè÷åñòâå èòåðàöèé. Äëÿ ýòèõ öåëåé äëÿ êàæäîãî êîðíÿ ñîçäàþ ìàññèâ çíà÷åíèé èç
÷åòûð¼õ ïåðåìåííûõ, â êîòîðîì ïåðå÷èñëÿþ çíà÷åíèÿ êîðíÿ, ìåòêè âûõîäà è âûõîäíûå ïàðàìåòðû. Âûõîäíûå ïàðàìåòðû êîìàíäû
¾fsolve()¿ ïðåäñòàâëÿþò ñîáîé ìàññèâ ¾struct¿, êîòîðûé ñîñòîèò èç
ïåðåìåííûõ ðàçëè÷íûõ òèïîâ. Äëÿ ïîëó÷åíèÿ èíôîðìàöèè î êîëè÷åñòâå èòåðàöèé îáðàùàþñü ê ïåðåìåííîé ¾iterations¿ èç ìàññèâà
¾struct¿, êîòîðàÿ âîçâðàùàåò çíà÷åíèå ÷èñëà â íåèçâåñòíîì ôîðìàòå.
Èñïîëüçóþ êîìàíäó ¾double()¿ äëÿ ïðåîáðàçîâàíèÿ å¼ â òèï ¾double¿.
11. Çàïèñûâàþ ïîëó÷åííûå ðåçóëüòàòû â ôàéë ¾result.txt¿ â âèäå îïðåäåë¼ííîì çàäàíèåì.
5
12. Çàïóñêàþ íàïèñàííûé ñêðèïò. Â ðåçóëüòàòå âûïîëíåíèÿ ñêðèïòà â
áàçîâîì êàòàëîãå MATLAB ñîçäà¼òñÿ ôàéë ¾result.txt¿ ñ îòâåòàìè â
çàäàííîì âèäå.
Âûâîä
 ïðîöåññå âûïîëíåíèÿ ëàáîðàòîðíîé ðàáîòû áûëè èçó÷åíû ñèìâîëüíûå è ÷èñëåííûå ìåòîäû ðåøåíèÿ çàäà÷ ïðè ïîìîùè ïàêåòà MATLAB è
ïîëó÷åíû ïðàêòè÷åñêèå íàâûêè. Áûëè îñâîåíû: ïîëüçîâàòåëüñêèé èíòåðôåéñ, ñèíòàêñèñ ÿçûêà, îñíîâíûå ïðèíöèïû ðåøåíèÿ ìàòåìàòè÷åñêèõ çàäà÷, îñíîâíûå êîìàíäû, ïðèíöèïû ïîñòðîåíèÿ ãðàôèêîâ è âûâîäà äàííûõ
â ôàéëû.
Áûëè èçó÷åíû íåêîòîðûå äîïîëíèòåëüíûå âîçìîæíîñòè, â ÷àñòíîñòè
äîïîëíåíèÿ ¾Symbolic Math Toolbox¿ è ñèìâîëüíûå ìåòîäû ðåøåíèÿ ñèñòåì íåëèíåéíûõ óðàâíåíèé.
Çàäàííàÿ ñèñòåìà óðàâíåíèé ðåøåíà â ñèìâîëüíîì âèäå è ÷èñëåííûì
ìåòîäîì, ðåçóëüòàò ðàñ÷¼òîâ âûâåäåí â ôàéë
âèäå:
Ñèñòåìà:
x^2-y-4=0
2x+y=0
Ðåøåíèå, ïîëó÷åííîå â ñèìâ. âèäå:
x= 1.2361, -3.2361
y= -2.4721, 6.4721
×èñëåííîå ðåøåíèå:
x= 1.2361, -3.2361
y= -2.4721, 6.4721
Êîëè÷åñòâî èòåðàöèé:
Ïðè íàõîæäåíèè ïåðâîãî êîðíÿ: 4
Ïðè íàõîæäåíèè âòîðîãî êîðíÿ: 3
Íà÷àëüíûå óñëîâèÿ:
Ïðè íàõîæäåíèè ïåðâîãî êîðíÿ: x0 = -4, y0 = 6
Ïðè íàõîæäåíèè âòîðîãî êîðíÿ: x0 = 1, y0 = -2
6
result.txt
è ïðåäñòàâëåíè â
Äàëåå ïðåäñòàâëåí ëèñòèíã èòîãîâîé ïðîãðàììû:
%Design_by_Medvedev_SS;-)
%Declare variable
syms x y;
%Set the system of eqation
eq1 = x^2-y-4;
eq2 = 2*x+y;
%find the roots by the method "solve"
[solx, soly] = solve(eq1==0, eq2==0);
%For convenient visualization let's build graphs of the
%corresponding functions
syms xx, yy = xx.^2-4;
ezplot(yy), grid on, hold on, yy = -2*xx;
ezplot(yy), hold off, axis ([-6 6 -10 20]);
%For better understanding I will create signatures to axes
%and to graph
xlabel ('x'); ylabel ('y');
text (1, - 7, 'y=-2x \rightarrow', 'FontSize', 16);
text (1, 12, 'y=x^2-4 \rightarrow', 'FontSize', 16);
title ({'Ãðàôèêè ôóíêöèé:', 'y=x^2-4', 'y=-2x'});
%Convert the result to a format "double"
ans1x = double(solx(1));
ans1y = double(soly(1));
ans2x = double(solx(2));
ans2y = double(soly(2));
%Create file "system of equation.txt"
file1 = fopen ('result.txt', 'wt');
%Writing data to this file
fprintf (file1, 'Ñèñòåìà:\nx^2-y-4=0\n2x+y=0\n\n');
fprintf (file1, 'Ðåøåíèå, ïîëó÷åííîå â ñèìâ. âèäå:\n');
7
fprintf (file1, 'x = %2.5g, %2.5g \n', ans1x, ans2x);
fprintf (file1, 'y = %2.5g, %2.5g \n\n', ans1y, ans2y);
%Let's create the another script with our system of equations
fun = @root2d;
%Define the start conditions
xy1 = [-4, 6];
xy2 = [1, -2];
%Solution
[ans1, fval1, exitflag1, output1] = fsolve(fun, xy1);
[ans2, fval2, exitflag2, output2] = fsolve (fun, xy2);
%Writing data
fprintf (file1, '×èñëåííîå ðåøåíèå:\n');
fprintf (file1, 'x = %2.5g, %2.5g \n', ans2(1), ans1(1));
fprintf (file1, 'y = %2.5g, %2.5g \n\n', ans2(2), ans1(2));
%Get the information from array of type "struct" and insert him
%in the our file
i1 = double(output1(1).iterations);
i2 = double(output2(1).iterations);
fprintf (file1, 'Êîëè÷åñòâî èòåðàöèé:\n');
fprintf (file1, 'Ïðè íàõîæäåíèè ïåðâîãî êîðíÿ - %2.2g \n', i1);
fprintf (file1, 'Ïðè íàõîæäåíèè âòîðîãî êîðíÿ - %2.2g \n\n', i2);
fprintf (file1, 'Íà÷àëüíûå óñëîâèÿ: \n');
fprintf (file1, 'Ïðè íàõîæäåíèè ïåðâîãî êîðíÿ - x0 ');
fprintf (file1, '= %2.2g, y0 = %2.2g\n',xy1(1),xy1(2));
fprintf (file1, 'Ïðè íàõîæäåíèè âòîðîãî êîðíÿ - x0 ');
fprintf (file1, '= %2.2g, y0 = %2.2g',xy2(1),xy2(2));
8
Download