{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. Feladatsor\n", "\n", "\n", "\n", "
\n", "### Egyszerű iteráció (fixpont iteráció)\n", "1.feladat. Mutassuk meg, hogy a $\\varphi (x)=\\sqrt{x},\\ x\\in(1,2)$ leképezés kontrakció, de nincs fixpontja.
\n", "\n", "2.feladat. Tekintsük az alábbi függvényt:\n", "$$\n", "\\displaystyle \\varphi(x)=x+\\frac{1}{1+x},\\ x\\in[0,\\infty).\n", "$$\n", "Igazoljuk, hogy $|\\varphi (x)-\\varphi(y)|<|x-y|$ teljesül minden $x,y\\in[0,\\infty)$ esetén, viszont $\\varphi$-nek mégsincs fixpontja.
\n", "\n", "3.feladat. Alkalmazzuk az egyszerű iterációt és tegyünk meg vele négy lépést. Ellenőrizzük, hogy teljesülnek-e a fixponttétel feltételei. Amennyiben igen, akkor az $x_0=0$ pontból hány iterációs lépést kell megtennünk ahhoz, hogy $10^{-5}$ nagyságú hibával határozzuk meg az egyenlet megoldását, ha
\n", "\n", "(a) $x=\\sqrt{x+2}$, $x\\in[0,2]$
\n", "(b) $x=\\cos(x)$, $x\\in[0,1]$
\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x =\n", "\n", " 0.739085133215161\n", "\n", "\n", "n =\n", "\n", " 77.372266795527878\n", "\n", " 78\n" ] } ], "source": [ "% 3.feladat (a) resze egyszeru iteracio segitsegevel\n", "clear all;\n", "x=0; fun='cos(x)'; kmax=1000;\n", "format long\n", "k=0;\n", "while k\n", "\n", "4.feladat. Legyen $\\varphi\\in C^s(I),\\ \\varphi^{(j)}(x^*)=0$ minden $j=1,\\ldots,s-1$-re, de $\\varphi^{(s)}(x^*)\\neq 0$. Ekkor az egyszerû iterációval kapott $(x_n)$ sorozatra igaz, hogy $x_n\\to x^*$ $s$-edrendben.
\n", "\n", "5.feladat. (Beadható) Az $x-\\cos (x)=0,\\ x\\in[0,1]$ egyenlet megoldásának közelítéséhez tegyünk meg néhány lépést Aitken módszerével és az Aitken-Steffensen iterációval is az $x_0=0$ kezdõértékkel. Hasonlítsuk össze a kapott eredményeket a pontos $x^*=0.739085133215$ értékkel.
\n", "\n", "6.feladat. Az alábbi $\\varphi(x)=x$ alakok melyikére érdemes hozni az $x^2-2=0,\\ x\\in[1,2]$ egyenletet, hogy az egyszerû iterációt alkalmazni tudjuk?
\n", "\n", "(a) $\\displaystyle x=\\frac{2}{x}$
\n", "(b) $\\displaystyle x=1+\\frac{1}{1+x}$
\n", "(c) $\\displaystyle x=\\frac{1}{2}\\Big(x+\\frac{2}{x}\\Big)$
\n", "\n", "Tegyünk meg négy lépést az átírásokból származtatható $x_{n+1}=\\varphi(x_n)$ iterációk mindegyikével. Magyarázzuk meg, hogy mi okozza a módszerek közötti konvergencia rend eltérését.
\n", "\n", "7.feladat. Hozzuk az $x^3-x=1000,\\ x\\in[10,11]$ egyenletet olyan alakra, hogy egyszerû iterációval megoldható legyen.
\n", "\n", "### Klasszikus iterációk (intervallumfelezés, húr- és szelőmódszer, Newton-módszer\n", "\n", "8.feladat. Oldjuk meg az $x^2-x-6=0,\\ x\\in[1,4]$ egyenletet. Tegyünk meg három lépést a klasszikus módszerekkel (egyszerû iteráció, intervallumfelezés, húrmódszer, szelõmódszer) és a Newton-módszerrel.
\n" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x =\n", "\n", " 3.062500000000000\n" ] } ], "source": [ "% Intervallumfelezes\n", "clear all\n", "a=1; b=4; func='x^2-x-6'; kmax=4; toll=10^-10;\n", "\n", "format long\n", "k=0;\n", "while ktoll\n", " k=k+1;\n", " x=a+(b-a)/2;\n", " fx=eval(func);\n", " if fx>0 \n", " b=x;\n", " else\n", " a=x;\n", " end;\n", "end;\n", "x\n", "\n" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ans =\n", "\n", " 2.984615384615385\n" ] } ], "source": [ "% Húrmódszer\n", "clear all;\n", "format long\n", "\n", "a=1; b=4; func='x^2-x-6'; nmax=3; toll=10^-10; \n", "\n", "x=a; f=eval(func); fx=[f]; x=b; f=eval(func); fx=[fx, f]; \n", "nit=0; \n", "xvect=[a,b]; xdif=[]; f=toll+1; kprime=1;\n", "while (nit < nmax) & (abs(f) > toll),\n", "nit=nit+1; dim=length(xvect);\n", "x=xvect(dim); fxk=eval(func); xk=x; i=dim;\n", "while (i >= kprime), i=i-1; x=xvect(i); fxkpr=eval(func);\n", "if ((fxkpr*fxk) < 0), xkpr=x; kprime=i; break; end;\n", "end;\n", "x=xk-fxk*(xk-xkpr)/(fxk-fxkpr); xvect=[xvect, x]; f=eval(func);\n", "fx=[fx, f]; err=abs(x-xkpr); xdif=[xdif, err];\n", "end;\n", "xvect;\n", "xvect(2+nmax)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x =\n", "\n", " 2.500000000000000\n", "\n", "\n", "x =\n", "\n", " 2.909090909090909\n", "\n", "\n", "x =\n", "\n", " 3.010309278350515\n", "\n", "\n", "x =\n", "\n", " 2.999809487521433\n", "\n", "\n", "x =\n", "\n", " 2.999809487521433\n" ] } ], "source": [ "clear all;\n", "func='x^2-x-6'; kmax=4; toll=10^-10;\n", "x=1; fxold=eval(func); xold=x;\n", "x=4; fx=eval(func);\n", "format long\n", "err=toll+1;\n", "k=0;\n", "while ktoll\n", " k=k+1;\n", " xnew=x-(xold-x)*fx/(fxold-fx);\n", " xold=x;\n", " fxold=eval(func);\n", " x=xnew\n", " fx=eval(func);\n", " err=abs(x-xold);\n", "end;\n", "x\n", "\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x =\n", "\n", " -1\n" ] } ], "source": [ "% Newton-modszer\n", "\n", "clear all;\n", "%x=2; func='x^3+2*x^2+10*x-20'; funcder='3*x^2+4*x+10'; kmax=20; toll=10^-10;\n", "x=sqrt(5)/5; func='x^3-x'; funcder='3*x^2-1'; kmax=100; toll=10^-10;\n", "format long\n", "err=toll+1;\n", "k=0;\n", "while ktoll\n", " k=k+1;\n", " xold=x;\n", " x=x-eval(func)/eval(funcder);\n", " err=abs(x-xold);\n", "end;\n", "x\n", "format short\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "9.feladat. Az $x^3-x=0$ egyenlet $x^*=0$ gyökét szeretnénk Newton-módszerrel közelíteni. Az $x^*$ mekkora környezetébõl lehet az iterációt indítani, hogy biztosan konvergáljon a módszer? Milyen helyzet áll elõ, ha $\\displaystyle x_0=\\frac{\\sqrt{5}}{5}$-tel indulunk?" ] } ], "metadata": { "kernelspec": { "display_name": "Matlab", "language": "matlab", "name": "matlab" }, "language_info": { "codemirror_mode": "octave", "file_extension": ".m", "help_links": [ { "text": "MetaKernel Magics", "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" } ], "mimetype": "text/x-octave", "name": "matlab", "version": "0.11.0" } }, "nbformat": 4, "nbformat_minor": 2 }