Harjoitus2 %Tein tehtävää 1 varten funktiosta f matlabfunktion h2t1f.m. Avaamalla funktion voit tutustua siihen, miten se on tehty. %Nyt voidaan piirtää f:n kuvaaja. a=-2:0.01:2; b=h2t1f(a); plot(a,b) nolla=0*a; hold on plot(a,nolla) %Luetaan likiarvot nollakohdille Matlabin "kuva-ammunnalla" eli graphical inputilla eli funktiolla ginput [c,~]=ginput [d,~]=ginput h2t1f(c+0.1) h2t1f(c-0.1) h2t1f(d-0.1) h2t1f(d+0.1) %Näyttää siltä, että c ja d ovat hyvät likiarvot. Käytetään näitä iteroitaessa. %Tehdään f:n derivaatasta myös matlabfunktio h2t1df. Aloitetaan iterointi. c(1)=c; d(1)=d; for i=1:10 c(i+1)=c(i)-h2t1f(c(i))/h2t1df(c(i)); end format long c' d' %Voidaan laskea f:n arvo saadussa nollakohdan likiarvossa. Näin voidaan katsoa, onko vastauksessa järkeä. h2t1f(c)' %Kokeillaan kumpi juuri saadaan, kun alkuarvo arvotaan satunnaisesti väliltä -2:2 e(1)=4*(rand(1)-0.5); %arvotaan satunnaisluku väliltä -2:2 for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end e' %Tehtävä 6 % %Tehtävässä 1 saatiin %c=-0.1875; %d=1.5948; %Nämä olivat siis graafisesti katsotut nollakohtien likiarvot % %Kokeillaan sekanttimenetelmää % %Alkuarvot c=[-0.25 0]; d=[1.5 2]; for k=1:10 c(k+2)=c(k+1)-(c(k+1)-c(k))*h2t1f(c(k+1))/(h2t1f(c(k+1))-h2t1f(c(k))); end (ja for k=1:10 d(k+2)=d(k+1)-(d(k+1)-d(k))*h2t1f(d(k+1))/(h2t1f(d(k+1))-h2t1f(d(k))); end ) c' ans = -0.2500 0 -0.1847 -0.1996 -0.1967 -0.1968 -0.1968 -0.1968 -0.1968 NaN NaN NaN >> %nyt siis verrattuna tehtäväpaperin kaavaan x_(k+1)=c(k+2),x_k=c(k+1),x_(k-1)=c(k) >> c(7)-c(6) ans = -1.0874e-007 >> h2t1f(c(7))-h2t1f(c(6)) ans = 6.8202e-007 >> %muutaman iterointikierroksen jälkeen tulee alivuoto/ylivuoto ja saadaan "Not a Numbereita"=NaN >> %c(9) lienee hyvä likiarvo >> c(9) ans = -0.1968 >> format long >> c(9) ans = -0.196760787015232 >> h2t1f(c(9)) ans = 0 for k=1:10 d(k+2)=d(k+1)-(d(k+1)-d(k))*h2t1f(d(k+1))/(h2t1f(d(k+1))-h2t1f(d(k))); end >> d' ans = 1.500000000000000 2.000000000000000 1.600077935642649 1.611913777623435 1.613425833372391 1.613418936140604 1.613418939680558 1.613418939680566 1.613418939680567 1.613418939680567 NaN NaN >> %taas tulee alivuoto/ylivuoto, mutta d(10) on hyvä likiarvo >> d(10) ans = 1.613418939680567 >> h2t1f(d(10)) ans = 4.440892098500626e-016 >> %siis liki nolla >> e-016 ans = Columns 1 through 5 -14.376832251697524 -14.386548950704213 -14.386581059967940 -14.386581060319434 -14.386581060319433 Columns 6 through 10 -14.386581060319434 -14.386581060319433 -14.386581060319434 -14.386581060319433 -14.386581060319434 Column 11 -14.386581060319433 >> h2t1f(d(10)+10^(-5)) ans = 3.391876581115838e-005 >> h2t1f(d(10)-10^(-5)) ans = -3.391853453549309e-005 >> h2t1f(c(9)+10^(-5)) ans = -6.271837189641971e-005 >> h2t1f(c(9)-10^(-5)) ans = 6.271969966364921e-005 >> %ok >> % %Tehtävä 4 >> % >> %arctan on Matlabissa atan >> N=10; >> x(1)=0.5; %muutellaan >> for k=1:N x(k+1)=x(k)-(1+x(k).^2),*atan(x(k)); ??? x(k+1)=x(k)-(1+x(k).^2),*atan(x(k)); | Error: Unexpected MATLAB operator. >> end ??? end | Error: Illegal use of reserved keyword "end". >> N=10; x(1)=0.5; %muutellaan for k=1:N x(k+1)=x(k)-(1+x(k).^2).*atan(x(k)); end >> x x = Columns 1 through 5 0.500000000000000 -0.079559511251008 0.000335302204005 -0.000000000025131 0 Columns 6 through 10 0 0 0 0 0 Column 11 0 >> x' ans = 0.500000000000000 -0.079559511251008 0.000335302204005 -0.000000000025131 0 0 0 0 0 0 0 >> y=1:length(x); >> y' ans = 1 2 3 4 5 6 7 8 9 10 11 >> plot(y,x) >> N=10; x(1)=0.5; %muutellaan for k=1:N x(k+1)=x(k)-(1+x(k).^2).*atan(x(k)); end >> y=1:length(x); >> plot(y,x) >> %Tätä voi käyttää >> N=10; x(1)=1; %muutellaan for k=1:N x(k+1)=x(k)-(1+x(k).^2).*atan(x(k)); end y=1:length(x); plot(y,x) >> N=10; x(1)=2; %muutellaan for k=1:N x(k+1)=x(k)-(1+x(k).^2).*atan(x(k)); end y=1:length(x); plot(y,x) >> axis([1 length(x) -5 5]) >> axis([1 length(x) -100 100]) >> axis([1 length(x) -10000 10000]) >> axis([1 length(x) -1000000 1000000]) >> N=10; x(1)=1.5; %muutellaan for k=1:N x(k+1)=x(k)-(1+x(k).^2).*atan(x(k)); end y=1:length(x); plot(y,x) ad88888ba 88 d8" "8b ,d ,d "" Y8, 88 88 `Y8aaaaa, 88 88 MM88MMM MM88MMM 88 88 88 ,adPPYYba, 888 `"""""8b, 88 88 88 88 88 88 88 "" `Y8 888 `8b 88 88 88 88 88 88 88 ,adPPPPP88 Y8a a8P "8a, ,a88 88, 88, "8a, ,a88 88 88, ,88 888 "Y88888P" `"YbbdP'Y8 "Y888 "Y888 `"YbbdP'Y8 88 `"8bbdP"Y8 888 ,88 888P" Harjoitus2 >> %Numeerinen analyysi s2012, Laskuharjoitus 2 >> % >> %Matlabia >> % >> %Tein tehtävää 1 varten funktiosta f matlabfunktion h2t1f.m. Avaamalla funktion voit tutustua siihen, miten se on tehty. >> % >> %Teko-ohje: >> %File->New->Function >> %sopiva koodi: >> % >> %function [y] = h2t1f(x) >> %jne. >> % >> %Tämän jälkeen tallenna funktio samalla nimellä, kuin millä sitä koodissa kutsutaan. Tässä tapauksessa siis h2t1f.m. >> %Nyt funktiota voi kutsua Matlabissa >> % >> %Nyt voidaan piirtää f:n kuvaaja. >> a=-3:0.01:3; >> b=f(a); Undefined function 'f' for input arguments of type 'double'. >> b=h2t1f(a); >> plot(a,b) >> a=-2:0.01:2; >> b=h2t1f(a); >> plot(a,b) >> A=rand(2,3) A = 0.8147 0.1270 0.6324 0.9058 0.9134 0.0975 >> nolla=0*a; >> hold on >> plot(a,nolla) >> %Tallennetaan kuva nimellä h2t1f.jpg >> print -djpeg 'h2t1f.jpg' >> %Luetaan likiarvot nollakohdille Matlabin "kuva-ammunnalla" eli graphical inputilla eli funktiolla ginput >> [~,c]=ginput c = -0.0676 >> [c,~]=ginput c = -0.1875 >> [d,~]=ginput d = 1.5948 >> %komennon jälkeen suurenna kuvaikkuna, klikkaa hiirellä ja paina Enteriä >> h2t1f(c) ans = -0.0575 >> h2t1f(d) ans = -0.0629 >> h2t1f(c+0.1) ans = -0.6101 >> h2t1f(c-0.1) ans = 0.6263 >> h2t1f(d-0.1) ans = -0.3859 >> h2t1f(d+0.1) ans = 0.2835 >> %Näyttää siltä, että c ja d ovat hyvät likiarvot >> c,d c = -0.1875 d = 1.5948 >> %Tehdään f:n derivaatasta myös matlabfunktio h2t1df >> a=-2:0.01:2; >> b=h2t1df(a); >> plot(a,b) >> hold on >> b=h2t1f(a); >> plot(a,b) >> %Etsitään nyt nollakohtia iteroimalla >> c(1)=c; >> d(1)=d; >> for i=2:10 end >> for i=1:10 c(i+1)=c(i)-h2t1f(c(i))/h2t1df(c(i)); end >> c c = Columns 1 through 8 -0.1875 -0.1969 -0.1968 -0.1968 -0.1968 -0.1968 -0.1968 -0.1968 Columns 9 through 11 -0.1968 -0.1968 -0.1968 >> format long >> c' ans = -0.187500000000000 -0.196852528857975 -0.196760795923276 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 >> h2t1f(c) ans = Columns 1 through 4 -0.057515991848934 0.000575451870440 0.000000055870395 0.000000000000001 Columns 5 through 8 -0.000000000000000 0 0 0 Columns 9 through 11 0 0 0 >> %Nyt siis c(11) on todella tarkka arvo >> c(11) ans = -0.196760787015232 >> %Sama toiselle nollakohdalle: >> for i=2:10 end for i=1:10 d(i+1)=d(i)-h2t1f(d(i))/h2t1df(d(i)); end >> d' ans = 1.594758064516129 1.613539765211843 1.613418944657118 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 >> h2t1f(d)' ans = -0.062891537159646 0.000409840774171 0.000000016879790 -0.000000000000000 0.000000000000000 -0.000000000000000 0.000000000000000 -0.000000000000000 0.000000000000000 -0.000000000000000 0.000000000000000 >> %Siis d(11) on hyvä likiarvo >> d(11) ans = 1.613418939680567 >> %kokeillaan vielä eri alkuarvoilla >> e(1)=0; >> for i=2:10 end for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end >> e' ans = 0 -0.250000000000000 -0.199592055311246 -0.196769245001276 -0.196760787090954 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 >> %saatiin c(11) >> e(1)=4*(rand(1)-0.5); %arvotaan satunnaisluku väliltä -2:2 for i=2:10 end for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end >> e' ans = -0.886007124531806 -0.490805919720862 -0.266208728724747 -0.201498131697172 -0.196784415939237 -0.196760787606206 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 >> e(1)=4*(rand(1)-0.5); %arvotaan satunnaisluku väliltä -2:2 for i=2:10 end for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end >> e' ans = 0.187526076819935 -0.489426251143029 -0.265633295010951 -0.201422703713940 -0.196783671428655 -0.196760787569552 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 >> e(1)=4*(rand(1)-0.5); %arvotaan satunnaisluku väliltä -2:2 for i=2:10 end for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end e' ans = 1.830027341737190 1.626763059727360 1.613478901328828 1.613418940906263 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 1.613418939680566 >> e(1)=4*(rand(1)-0.5); %arvotaan satunnaisluku väliltä -2:2 for i=2:10 end for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end e' ans = 1.859554140797106 1.630275593411184 1.613514315107829 1.613418942781513 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 1.613418939680566 >> e(1)=4*(rand(1)-0.5); %arvotaan satunnaisluku väliltä -2:2 for i=2:10 end for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end e' ans = -1.369547673289807 -0.870316781179030 -0.480061891212526 -0.261776481162446 -0.200931721204171 -0.196779115097216 -0.196760787370796 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 >> e(1)=4*(rand(1)-0.5); %arvotaan satunnaisluku väliltä -2:2 for i=2:10 end for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end e' ans = 1.882371127042463 1.633215651220823 1.613550133120316 1.613418945547769 1.613418939680567 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 >> e(1)=4*(rand(1)-0.5); %arvotaan satunnaisluku väliltä -2:2 for i=2:10 end for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end e' ans = 1.828667792971782 1.626609565218679 1.613477538080725 1.613418940851164 1.613418939680567 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 >> e(1)=4*(rand(1)-0.5); %arvotaan satunnaisluku väliltä -2:2 for i=2:10 end for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end e' ans = -0.058497405108635 -0.220853656725267 -0.197358980198904 -0.196761165529081 -0.196760787015384 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 -0.196760787015232 >> e(1)=4*(rand(1)-0.5); %arvotaan satunnaisluku väliltä -2:2 for i=2:10 end for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end e' ans = 1.201121875555200 1.708980270767466 1.616279132561336 1.613421721275897 1.613418939683204 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 1.613418939680566 1.613418939680567 >> %Eri alkuarvoilla saadaan eri nollakohta >> %Tehdään alkuarvoista vektori ja piirretään saatavan nollakohdan kuvaaja alkuarvon funktiona >> f=[-2:0.01:2]'; >> e=[-2:0.01:2]'; >> for i=2:10 end for i=1:10 e(i+1)=e(i)-h2t1f(e(i))/h2t1df(e(i)); end >> plot(e,e(11)) >> plot(e,e(2)) >> for i=2:10 end for i=1:10 e(i+1,:)=e(i,:)-h2t1f(e(i,:)).*(h2t1df(e(i,:))).^0.5; end >> plot(e,e(11)) Warning: Imaginary parts of complex X and/or Y arguments ignored >> e=[-2 -1 0 1 2]'; >> e=[-2 -1 0 1 2]' e = -2 -1 0 1 2 >> h2t1f(e) ans = 86.154374428866845 11.825619755848741 -1.000000000000000 -1.600423599106272 1.476974505942283 >> h2t1df(e) ans = 1.0e+02 * -1.575306366598724 -0.276512395116975 -0.040000000000000 0.017293294335268 0.042340392886958 >> e(:,2)=e(:,2)-h2t1f(e(:,2)).*(h2t1df(e(:,2))).^0.5; Index exceeds matrix dimensions. >> e(:,2)=e(:,1)-h2t1f(e(:,1)).*(h2t1df(e(:,1))).^0.5; >> e e = 1.0e+03 * -0.002000000000000 -0.002000000000000 - 1.081333972312468i -0.001000000000000 -0.001000000000000 - 0.062184366234834i 0 0.000000000000000 + 0.002000000000000i 0.001000000000000 0.003104620582390 0.002000000000000 -0.001039138140168 >> 1+(-1).^0.5 ans = 1.000000000000000 + 1.000000000000000i >> A=1+(-1).^0.5 A = 1.000000000000000 + 1.000000000000000i >> real(A) ans = 1 >> imag(A) ans = 1 >> e=[-2 -1 0 1 2]' e = -2 -1 0 1 2 >> e=[-2 -1 0 1 2]'; >> for i=1:10 e(:,i+1)=e(:,i)-h2t1f(e(:,i)).*(h2t1df(e(:,i))).^0.5; e=real(e); end >> e e = 1.0e+04 * Columns 1 through 4 -0.000200000000000 -0.000200000000000 -0.000200000000000 -0.000200000000000 -0.000100000000000 -0.000100000000000 -0.000100000000000 -0.000100000000000 0 0.000000000000000 0.000000000000000 0.000000000000000 0.000100000000000 0.000310462058239 -0.001551177842524 -1.406104740467749 0.000200000000000 -0.000103913814017 -0.000103913814017 -0.000103913814017 Columns 5 through 8 -0.000200000000000 -0.000200000000000 -0.000200000000000 -0.000200000000000 -0.000100000000000 -0.000100000000000 -0.000100000000000 -0.000100000000000 0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000 -Inf -Inf -Inf -Inf -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 Columns 9 through 11 -0.000200000000000 -0.000200000000000 -0.000200000000000 -0.000100000000000 -0.000100000000000 -0.000100000000000 0.000000000000000 0.000000000000000 0.000000000000000 -Inf -Inf -Inf -0.000103913814017 -0.000103913814017 -0.000103913814017 >> %tuli äärettömiä mukaan >> e' ans = 1.0e+04 * Columns 1 through 4 -0.000200000000000 -0.000100000000000 0 0.000100000000000 -0.000200000000000 -0.000100000000000 0.000000000000000 0.000310462058239 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.001551177842524 -0.000200000000000 -0.000100000000000 0.000000000000000 -1.406104740467749 -0.000200000000000 -0.000100000000000 0.000000000000000 -Inf -0.000200000000000 -0.000100000000000 0.000000000000000 -Inf -0.000200000000000 -0.000100000000000 0.000000000000000 -Inf -0.000200000000000 -0.000100000000000 0.000000000000000 -Inf -0.000200000000000 -0.000100000000000 0.000000000000000 -Inf -0.000200000000000 -0.000100000000000 0.000000000000000 -Inf -0.000200000000000 -0.000100000000000 0.000000000000000 -Inf Column 5 0.000200000000000 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 >> isfinite(0) ans = 1 >> isfinite(1/0) ans = 0 >> isinf(1/0) ans = 1 >> isinf(0) ans = 0 >> e=isfinite(e).*e; >> e' ans = 1.0e+04 * Columns 1 through 4 -0.000200000000000 -0.000100000000000 0 0.000100000000000 -0.000200000000000 -0.000100000000000 0.000000000000000 0.000310462058239 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.001551177842524 -0.000200000000000 -0.000100000000000 0.000000000000000 -1.406104740467749 -0.000200000000000 -0.000100000000000 0.000000000000000 NaN -0.000200000000000 -0.000100000000000 0.000000000000000 NaN -0.000200000000000 -0.000100000000000 0.000000000000000 NaN -0.000200000000000 -0.000100000000000 0.000000000000000 NaN -0.000200000000000 -0.000100000000000 0.000000000000000 NaN -0.000200000000000 -0.000100000000000 0.000000000000000 NaN -0.000200000000000 -0.000100000000000 0.000000000000000 NaN Column 5 0.000200000000000 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 -0.000103913814017 >> e=e(isfinite(e)==1) e = 1.0e+04 * -0.000200000000000 -0.000100000000000 0 0.000100000000000 0.000200000000000 -0.000200000000000 -0.000100000000000 0.000000000000000 0.000310462058239 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.001551177842524 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -1.406104740467749 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 >> e=e(e~=e+1) e = 1.0e+04 * -0.000200000000000 -0.000100000000000 0 0.000100000000000 0.000200000000000 -0.000200000000000 -0.000100000000000 0.000000000000000 0.000310462058239 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.001551177842524 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -1.406104740467749 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 -0.000200000000000 -0.000100000000000 0.000000000000000 -0.000103913814017 >> e=[-2 -1 0 1 2]'; >> for i=1:10 e=e-h2t1f(e).*(h2t1df(e)).^0.5; e=real(e); end >> e' ans = Columns 1 through 4 -2.000000000000662 -1.000000000000038 0.000000000000001 -Inf Column 5 -1.039138140168365 >> e(isfinite(e)==1) ans = -2.000000000000662 -1.000000000000038 0.000000000000001 -1.039138140168365 >> isfinite(e) ans = 1 1 1 0 1 >> for j=1:length(e) end >> E=isfinite(E); Undefined function or variable 'E'. >> E=isfinite(e); >> for j=1:length(e) if E(j)=1, E(j)=e; if E(j)=1, E(j)=e; | Error: The expression to the left of the equals sign is not a valid target for an assignment. >> E=isfinite(e); for j=1:length(e) if E(j)=1, E(j)=e; if E(j)=1, E(j)=e; | Error: The expression to the left of the equals sign is not a valid target for an assignment. >> E=isfinite(e); for j=1:length(e) if E(j)==1, E(j)=e; else E(j)=0; end end In an assignment A(:) = B, the number of elements in A and B must be the same. >> E=isfinite(e); for j=1:length(e) if E(j)==1, E(j)=e(j); else E(j)=0; end end >> e e = -2.000000000000662 -1.000000000000038 0.000000000000001 -Inf -1.039138140168365 >> E E = 1 1 1 0 1 >> E E = 1 1 1 0 1 N=10; e=[-2:0.01:2]'; for i=1:N e(:,i+1)=e(:,i)-h2t1f(e(:,i)).*(h2t1df(e(:,i))).^0.5; e=real(e); end >> F=e(:,N+1); >> G=e(:,1); >> Ga=G(isfinite(F)==1); >> Gb=G(isinf(F)==1); >> Fa=F(isfinite(F)==1); >> Hb=0.1*sin(100*Gb); >> plot(Ga,Fa) hold on plot(Gb,Hb)