SPRAWOZDANIE
METODY NUMERYCZNE
ĆWICZENIE 5
Numeryczne rozwiązywanie równań i układów równań nieliniowych
Hubert Łuczak 171376
Tomasz Szumko 171423
Zadanie 1
M-funkcje - metody bisekcji, siecznych i Newtona:
%metoda bisekcji
A=1.8;
B=2.5;
fA=A*(2*exp(A-2)-A); %x=A
fB=B*(2*exp(B-2)-B); %x=B
if fA*fB==0
'a lub b jest rozwiązaniem równania'
return
elseif fA*fB>0
'Funkcja na krańcach jest tego samego znaku'
return
end
A(1)=A;
B(1)=B;
for i=2:50
p(i)=(B(i-1)-A(i-1))/2;
p1(i)=A(i-1)+p(i);
fp1(i)=p1(i)*(2*exp(p1(i)-2)-p1(i)); %x=p1(i)
fA(i)=A(i-1)*(2*exp(A(i-1)-2)-A(i-1)); %x=A(i-1)
fB(i)=B(i-1)*(2*exp(B(i-1)-2)-B(i-1)); %x=B(i-1)
if fA(i)*fp1(i)>0
A(i)=p1(i);
B(i)=B(i-1);
elseif fB(i)*fp1(i)>0
B(i)=p1(i);
A(i)=A(i-1);
end
if abs(p1(i)*(2*exp(p1(i)-2)-p1(i)))<0.00001 %x=p1(i)
p1(i)
break
end
end
0 | 0 | 0.2707 | 0 | -2.0000 |
2.1500 | 0.3734 | 3.0196 | 2.1500 | 0.1500 |
1.9750 | -0.0482 | 1.8531 | -0.1750 | -0.0250 |
2.0625 | 0.1371 | 2.3950 | 0.0875 | 0.0625 |
2.0187 | 0.0386 | 2.1143 | -0.0438 | 0.0187 |
1.9969 | -0.0062 | 1.9813 | -0.0219 | -0.0031 |
2.0078 | 0.0158 | 2.0472 | 0.0109 | 0.0078 |
2.0023 | 0.0047 | 2.0141 | -0.0055 | 0.0023 |
1.9996 | -0.0008 | 1.9977 | -0.0027 | -0.0004 |
2.0010 | 0.0020 | 2.0059 | 0.0014 | 0.0010 |
2.0003 | 0.0006 | 2.0018 | -0.0007 | 0.0003 |
2.0000 | -0.0001 | 1.9997 | -0.0003 | -0.0000 |
2.0001 | 0.0002 | 2.0007 | 0.0002 | 0.0001 |
2.0000 | 0.0001 | 2.0002 | -0.0001 | 0.0000 |
2.0000 | -0.0000 | 2.0000 | -0.0000 | -0.0000 |
2.0000 | 0.0000 | 2.0001 | 0.0000 | 0.0000 |
2.0000 | 0.0000 | 2.0000 | -0.0000 | 0.0000 |
Metoda ta jest zbieżna do wartości zerowej x=2.
%metoda siecznych
x(1)=2.5;
x(2)=2.4;
for i=1:30
x(i+2)=x(i+1)-[((x(i+1)*(2*exp(x(i+1)-2)-x(i+1)))*(x(i+1)-x(i)))/((x(i+1)*(2*exp(x(i+1)-2)-x(i+1)))-(x(i)*(2*exp(x(i)-2)-x(i))))];
if abs((x(i+2)*(2*exp(x(i+2)-2)-x(i+2))))<0.00001
x(i+2)
break
end
end
2.5000 | 1.9936 | 6.5410 | 0 | 0.5000 |
2.4000 | 1.4008 | 5.3444 | -0.1000 | 0.4000 |
2.1637 | 0.4156 | 3.1256 | -0.2363 | 0.1637 |
2.0641 | 0.1409 | 2.4054 | -0.0997 | 0.0641 |
2.0129 | 0.0264 | 2.0785 | -0.0511 | 0.0129 |
2.0012 | 0.0023 | 2.0070 | -0.0118 | 0.0012 |
2.0000 | 0.0000 | 2.0001 | -0.0011 | 0.0000 |
2.0000 | 0.0000 | 2.0000 | -0.0000 | 0.0000 |
Metoda ta jest zbieżna do wartości zerowej x=2.
%metoda Newtona/stycznych
x(1)=2.5;
for i=1:30
x(i+1)=x(i)-(x(i)*(2*exp(x(i)-2)-x(i)))/(2*exp(x(i)-2)+x(i)*(2*exp(x(i)-2)-1)-x(i));
if abs(x(i+1)*(2*exp(x(i+1)-2)-x(i+1)))<0.00001
x(i+1)
break
end
end
2.5000 | 1.9936 | 6.5410 | 0 | 0.5000 |
2.1952 | 0.5179 | 3.3776 | -0.3048 | 0.1952 |
2.0419 | 0.0891 | 2.2602 | -0.1533 | 0.0419 |
2.0024 | 0.0049 | 2.0147 | -0.0394 | 0.0024 |
2.0000 | 0.0000 | 2.0001 | -0.0024 | 0.0000 |
2.0000 | 0.0000 | 2.0000 | -0.0000 | 0.0000 |
2.0000 | 0.0000 | 2.0001 | 0.0000 | 0.0000 |
2.0000 | 0.0000 | 2.0000 | -0.0000 | 0.0000 |
Metoda ta jest zbieżna do wartości zerowej x=2.
%metoda bisekcji
A=0.3;
B=0.6;
fA=cos(pi*A)+pi*(A-0.5); %x=A
fB=cos(pi*B)+pi*(B-0.5); %x=B
if fA*fB==0
'a lub b jest rozwiązaniem równania'
return
elseif fA*fB>0
'Funkcja na krańcach jest tego samego znaku'
return
end
A(1)=A;
B(1)=B;
for i=2:50
p(i)=(B(i-1)-A(i-1))/2;
p1(i)=A(i-1)+p(i);
fp1(i)=cos(pi*p1(i))+pi*(p1(i)-0.5); %x=p1(i)
fA(i)=cos(pi*A(i-1))+pi*(A(i-1)-0.5); %x=A(i-1)
fB(i)=cos(pi*B(i-1))+pi*(B(i-1)-0.5); %x=B(i-1)
if fA(i)*fp1(i)>0
A(i)=p1(i);
B(i)=B(i-1);
elseif fB(i)*fp1(i)>0
B(i)=p1(i);
A(i)=A(i-1);
end
if abs(cos(pi*p1(i))+pi*(p1(i)-0.5))<0.00001 %x=p1(i)
p1(i)
break
end
end
0 | -0.5708 | 3.1416 | 0 | -0.5000 |
0.4500 | -0.0006 | 0.0387 | 0.4500 | -0.0500 |
0.5250 | 0.0001 | 0.0097 | 0.0750 | 0.0250 |
0.4875 | -0.0000 | 0.0024 | -0.0375 | -0.0125 |
0.5062 | 0.0000 | 0.0006 | 0.0187 | 0.0062 |
Metoda ta jest zbieżna do wartości zerowej x=0.5.
%metoda siecznych
x(1)=0.3;
x(2)=0.35;
for i=1:30
x(i+2)=x(i+1)-[((cos(pi*x(i))+pi*(x(i)-0.5))*(x(i+1)-x(i)))/((cos(pi*x(i+1))+pi*(x(i+1)-0.5))-(cos(pi*x(i))+pi*(x(i)-0.5)))];
if abs((cos(pi*x(i+2))+pi*(x(i+2)-0.5)))<0.00001
x(i+2)
break
end
end
0.3000 | -0.0405 | 0.6000 | 0 | -0.2000 |
0.3500 | -0.0172 | 0.3424 | 0.0500 | -0.1500 |
0.4370 | -0.0013 | 0.0613 | 0.0870 | -0.0630 |
0.5311 | 0.0002 | 0.0150 | 0.0941 | 0.0311 |
0.6150 | 0.0078 | 0.2029 | 0.0839 | 0.1150 |
0.6133 | 0.0075 | 0.1970 | -0.0017 | 0.1133 |
0.5742 | 0.0021 | 0.0851 | -0.0391 | 0.0742 |
0.5198 | 0.0000 | 0.0061 | -0.0544 | 0.0198 |
0.4643 | -0.0002 | 0.0197 | -0.0555 | -0.0357 |
0.4562 | -0.0004 | 0.0297 | -0.0081 | -0.0438 |
0.4658 | -0.0002 | 0.0181 | 0.0096 | -0.0342 |
0.4841 | -0.0000 | 0.0039 | 0.0183 | -0.0159 |
0.5045 | 0.0000 | 0.0003 | 0.0204 | 0.0045 |
Metoda ta jest zbieżna do wartości zerowej x=0.5.
%metoda Newtona/stycznych
x(1)=0.3;
for i=1:30
x(i+1)=x(i)-(cos(pi*x(i))+pi*(x(i)-0.5))/(pi-(pi*sin(pi*x(i))));
if abs(cos(pi*x(i+1))+pi*(x(i+1)-0.5))<0.00001
x(i+1)
break
end
end
0.3000 | -0.0405 | 0.6000 | 0 | -0.2000 |
0.3676 | -0.0119 | 0.2680 | 0.0676 | -0.1324 |
0.4120 | -0.0035 | 0.1194 | 0.0444 | -0.0880 |
0.4414 | -0.0010 | 0.0531 | 0.0294 | -0.0586 |
0.4609 | -0.0003 | 0.0236 | 0.0196 | -0.0391 |
0.4740 | -0.0001 | 0.0105 | 0.0130 | -0.0260 |
0.4826 | -0.0000 | 0.0047 | 0.0087 | -0.0174 |
0.4884 | -0.0000 | 0.0021 | 0.0058 | -0.0116 |
Metoda ta jest zbieżna do wartości zerowej x=0.5.
Zadanie 2
%metoda bisekcji
A=0.3;
B=0.6;
fA=(cos(pi*A)+pi*(A-0.5))/(pi-(pi*sin(pi*A))); %x=A
fB=(cos(pi*B)+pi*(B-0.5))/(pi-(pi*sin(pi*B))); %x=B
if fA*fB==0
'a lub b jest rozwiązaniem równania'
return
elseif fA*fB>0
'Funkcja na krańcach jest tego samego znaku'
return
end
A(1)=A;
B(1)=B;
for i=2:50
p(i)=(B(i-1)-A(i-1))/2;
p1(i)=A(i-1)+p(i);
fp1(i)=(cos(pi*p1(i))+pi*(p1(i)-0.5))/(pi-(pi*sin(pi*p1(i)))); %x=p1(i)
fA(i)=(cos(pi*A(i-1))+pi*(A(i-1)-0.5))/(pi-(pi*sin(pi*A(i-1)))); %x=A(i-1)
fB(i)=(cos(pi*B(i-1))+pi*(B(i-1)-0.5))/(pi-(pi*sin(pi*B(i-1)))); %x=B(i-1)
if fA(i)*fp1(i)>0
A(i)=p1(i);
B(i)=B(i-1);
elseif fB(i)*fp1(i)>0
B(i)=p1(i);
A(i)=A(i-1);
end
if abs((cos(pi*p1(i))+pi*(p1(i)-0.5))/(pi-(pi*sin(pi*p1(i)))))<0.00001 %x=p1(i)
p1(i)
break
end
end
0 | -0.1817 | 0.4292 | 0 | -0.5000 |
0.4500 | -0.0167 | 0.3342 | 0.4500 | -0.0500 |
0.5250 | 0.0083 | 0.3335 | 0.0750 | 0.0250 |
0.4875 | -0.0042 | 0.3334 | -0.0375 | -0.0125 |
0.5062 | 0.0021 | 0.3333 | 0.0187 | 0.0062 |
0.4969 | -0.0010 | 0.3333 | -0.0094 | -0.0031 |
0.5016 | 0.0005 | 0.3333 | 0.0047 | 0.0016 |
0.4992 | -0.0003 | 0.3333 | -0.0023 | -0.0008 |
0.5004 | 0.0001 | 0.3333 | 0.0012 | 0.0004 |
0.4998 | -0.0001 | 0.3333 | -0.0006 | -0.0002 |
0.5001 | 0.0000 | 0.3333 | 0.0003 | 0.0001 |
0.5000 | -0.0000 | 0.3333 | -0.0001 | -0.0000 |
0.5000 | 0.0000 | 0.3330 | 0.0001 | 0.0000 |
Metoda ta jest zbieżna do wartości zerowej x=0.5.
%metoda siecznych
x(1)=0.3;
x(2)=0.35;
for i=1:30
x(i+2)=x(i+1)-(((cos(pi*x(i))+pi*(x(i)-0.5))/(pi-(pi*sin(pi*x(i)))))*(x(i+1)-x(i)))/(((cos(pi*x(i+1))+pi*(x(i+1)-0.5))/(pi-(pi*sin(pi*x(i+1)))))-((cos(pi*x(i))+pi*(x(i)-0.5))/(pi-(pi*sin(pi*x(i))))));
if abs((cos(pi*x(i+2))+pi*(x(i+2)-0.5))/(pi-(pi*sin(pi*x(i+2)))))<0.00001
x(i+2)
break
end
end
0.3000 | -0.0676 | 0.3468 | 0 | -0.2000 |
0.3500 | -0.0504 | 0.3408 | 0.0500 | -0.1500 |
0.5466 | 0.0155 | 0.3340 | 0.1966 | 0.0466 |
0.6968 | 0.0665 | 0.3464 | 0.1502 | 0.1968 |
0.6510 | 0.0507 | 0.3409 | -0.0458 | 0.1510 |
0.4575 | -0.0142 | 0.3339 | -0.1934 | -0.0425 |
0.3063 | -0.0654 | 0.3459 | -0.1512 | -0.1937 |
0.3482 | -0.0510 | 0.3410 | 0.0418 | -0.1518 |
0.5385 | 0.0128 | 0.3338 | 0.1904 | 0.0385 |
0.6906 | 0.0643 | 0.3455 | 0.1521 | 0.1906 |
0.6526 | 0.0513 | 0.3411 | -0.0380 | 0.1526 |
0.4653 | -0.0116 | 0.3337 | -0.1873 | -0.0347 |
0.3125 | -0.0632 | 0.3451 | -0.1528 | -0.1875 |
0.3467 | -0.0515 | 0.3412 | 0.0342 | -0.1533 |
0.5310 | 0.0103 | 0.3337 | 0.1843 | 0.0310 |
0.6845 | 0.0622 | 0.3448 | 0.1535 | 0.1845 |
0.6539 | 0.0517 | 0.3412 | -0.0306 | 0.1539 |
0.4725 | -0.0092 | 0.3336 | -0.1814 | -0.0275 |
0.3184 | -0.0612 | 0.3444 | -0.1541 | -0.1816 |
0.3456 | -0.0519 | 0.3413 | 0.0272 | -0.1544 |
0.5241 | 0.0080 | 0.3335 | 0.1785 | 0.0241 |
0.6786 | 0.0602 | 0.3440 | 0.1546 | 0.1786 |
0.6549 | 0.0520 | 0.3413 | -0.0238 | 0.1549 |
0.4792 | -0.0069 | 0.3335 | -0.1756 | -0.0208 |
0.3242 | -0.0592 | 0.3437 | -0.1550 | -0.1758 |
0.3448 | -0.0522 | 0.3414 | 0.0205 | -0.1552 |
0.5176 | 0.0059 | 0.3334 | 0.1728 | 0.0176 |
0.6729 | 0.0582 | 0.3433 | 0.1554 | 0.1729 |
0.6555 | 0.0523 | 0.3414 | -0.0174 | 0.1555 |
0.4855 | -0.0048 | 0.3334 | -0.1701 | -0.0145 |
0.3298 | -0.0573 | 0.3430 | -0.1557 | -0.1702 |
0.3442 | -0.0524 | 0.3414 | 0.0144 | -0.1558 |
Metoda ta nie jest zbieżna do wartości zerowej x=0.5.
%metoda Newtona/stycznych
x(1)=0.3;
for i=1:30
x(i+1)=x(i)-((cos(pi*x(i))+pi*(x(i)-0.5))/(pi-(pi*sin(pi*x(i)))))/(((pi-(pi*sin(pi*x(i))))^2+pi^2*cos(pi*x(i))*(cos(pi*x(i))+pi*(x(i)-0.5)))/((pi-(pi*sin(pi*x(i))))^2));
if abs((cos(pi*x(i+1))+pi*(x(i+1)-0.5))/(pi-(pi*sin(pi*x(i+1)))))<0.00001
x(i+1)
break
end
end
0.3000 | -0.0676 | 0.0000 | 0 | -0.2000 |
0.4948 | -0.0017 | 0.0000 | 0.1948 | -0.0052 |
0.5000 | 0.0010 | 2.2363 | 0.0052 | -0.0000 |
0.5000 | 0.0002 | 0.3068 | -0.0000 | -0.0000 |
0.5000 | 0.0001 | 0.1071 | -0.0000 | -0.0000 |
0.5000 | 0.0000 | 0.0184 | -0.0000 | -0.0000 |
0.5000 | 0.0000 | 0.0068 | -0.0000 | -0.0000 |
0.5000 | 0.0000 | 0.0057 | -0.0000 | -0.0000 |
0.5000 | 0.0000 | 0.0011 | -0.0000 | -0.0000 |
Metoda ta jest zbieżna do wartości zerowej x=0.5.
Zadanie 3
x1 = fzero(@(x) x*(2*exp(x-2)-x), 1.8)
x1 = 2
x2 = fzero(@(x) cos(pi*x)+pi*(x-0.5), 0.3)
x2 = 0.5000
x3 = fzero(@(x) (cos(pi*x)+pi*(x-0.5))/(pi-(pi*sin(pi*x))), 0.3)
x3 = 0.5000
Wyniki są takie same jak te otrzymane przy użyciu napisanych przez nas funkcji.
Zadanie 4
W=[1 5 4 14 76 32 -198 -6 -333 -2245 -2750 -1000]
L1=Laguerre(W,0.001)
B1=bairstow(W,0.001)
R=roots(W)
L1 | B1 | R |
---|---|---|
-0.9992 | -0.9996 - 0.0005i | -4.0000 |
-1.0001 | -0.9996 + 0.0005i | 2.0000 |
-1.0007 | -1.0009 | 1.0000 + 2.0000i |
0.9996 + 1.9994i | 2.0001 | 1.0000 - 2.0000i |
2.0000 + 0.0000i | 0.9924 - 2.0016i | 1.0000 + 2.0000i |
0.9994 - 1.9997i | 0.9924 + 2.0016i | 1.0000 - 2.0000i |
-4.0000 + 0.0000i | 1.0078 - 1.9982i | -2.0000 + 1.0000i |
-2.0000 + 1.0000i | 1.0078 + 1.9982i | -2.0000 - 1.0000i |
-2.0000 - 1.0000i | -1.9988 - 1.0023i | -1.0000 |
1.0006 - 2.0003i | -1.9988 + 1.0023i | -1.0000 + 0.0000i |
1.0004 + 2.0006i | -4.0028 | -1.0000 - 0.0000i |
L2=Laguerre(W,0.00001)
B2=bairstow(W,0.00001)
L2 | B2 | R |
---|---|---|
-1.0000 | -1.0000 - 0.0000i | -4.0000 |
-1.0000 - 0.0000i | -1.0000 + 0.0000i | 2.0000 |
-1.0000 + 0.0000i | -1.0000 | 1.0000 + 2.0000i |
1.0000 - 2.0000i | 2.0000 | 1.0000 - 2.0000i |
2.0000 - 0.0000i | 0.9995 - 2.0001i | 1.0000 + 2.0000i |
1.0000 + 2.0000i | 0.9995 + 2.0001i | 1.0000 - 2.0000i |
-4.0000 + 0.0000i | 1.0005 - 1.9999i | -2.0000 + 1.0000i |
-2.0000 - 1.0000i | 1.0005 + 1.9999i | -2.0000 - 1.0000i |
-2.0000 + 1.0000i | -2.0000 - 1.0000i | -1.0000 |
1.0000 + 2.0000i | -2.0000 + 1.0000i | -1.0000 + 0.0000i |
1.0000 - 2.0000i | -4.0000 | -1.0000 - 0.0000i |
L3=Laguerre(W,0.000000001)
B3=bairstow(W,0.000000001)
L3 | B3 | R |
---|---|---|
-1.0000 | -1.0000 | -4.0000 |
-1.0000 - 0.0000i | -1.0000 | 2.0000 |
-1.0000 + 0.0000i | -4.0000 | 1.0000 + 2.0000i |
1.0000 - 2.0000i | -1.0000 | 1.0000 - 2.0000i |
2.0000 + 0.0000i | -2.0000 - 1.0000i | 1.0000 + 2.0000i |
1.0000 + 2.0000i | -2.0000 + 1.0000i | 1.0000 - 2.0000i |
-4.0000 + 0.0000i | 0.9972 - 1.9993i | -2.0000 + 1.0000i |
-2.0000 - 1.0000i | 0.9972 + 1.9993i | -2.0000 - 1.0000i |
-2.0000 + 1.0000i | 1.0028 - 2.0008i | -1.0000 |
1.0000 + 2.0000i | 1.0028 + 2.0008i | -1.0000 + 0.0000i |
1.0000 - 2.0000i | 2.0000 | -1.0000 - 0.0000i |
Trzy metody wyznaczania zer wielomianu W(x) dają mniej więcej takie same wyniki, w zależności od przyjętej wartości przybliżenia.
Zadanie 5
W=[1 5 4 14 76 32 -198 -6 -333 -2245 -2750 -1000]
L=Lehmer(W,0.00001)
L |
---|
-1.0000 + 0.0000i |
-1.0000 + 0.0000i |
2.0000 + 0.0000i |
-1.0000 - 0.0000i |
0.9995 + 1.9993i |
1.0005 + 2.0007i |
-2.0000 + 1.0000i |
-4.0000 + 0.0000i |
-2.0000 - 1.0000i |
0.9986 - 2.0024i |
1.0014 - 1.9976i |
Metoda Lehmera-Shure’a wyznacza miejsca zerowe wielomianu interpolującego badanej funkcji. Rozbieżnosci z poprzednimi wynikami wynikają z tego, iż wielomian ten jest przybliżeniem funkcji, stąd uzyskane miejsca zerowe również są przybliżone.
Zadanie 6
x=-3.3;
y=0.4;
Fxy=[x*y+x-y+3;x^2-2*x+y^2+2*y-15];
Fpochodna=[y+1,x-1;2*x-2,2*y+2];
x(1)=-3.3;
y(1)=0.4;
for i=1:40
d=-(inv([y(i)+1,x(i)-1;2*x(i)-2,2*y(i)+2])*[x(i)*y(i)+x(i)-y(i)+3;x(i)^2-2*x(i)+y(i)^2+2*y(i)-15]);
x(i+1)=x(i)+d(1,1);
y(i+1)=y(i)+d(2,1);
if [abs(x(i+1)*y(i+1)+x(i+1)-y(i+1)+3);abs(x(i+1)^2-2*x(i+1)+y(i+1)^2+2*y(i+1)-15)]<[0.00001;0.00001]
[x(i+1);y(i+1)]
break
end
end
Funkcja zwraca założone wartości x i y.