Verkefni 1: Splæsibrúun og jafnhæðarferlar

Σχετικά έγγραφα
Reikniverkefni VII. Sævar Öfjörð Magnússon. 22. nóvember Merki og ker Jónína Lilja Pálsdóttir

Meðalmánaðardagsumferð 2009

Þriggja fasa útreikningar.

PRÓFBÚÐIR Í LÍNULEGRI ALGEBRU VIÐ HR VOR 2014 HERKÚLES

x(t) = T 0 er minnsta mögulega gildi á T

Bústólpi ehf - Nýtt kjarnfóður H K / APRÍL 2014

Líkindi Skilgreining

Undirstöðuatriði RC-tengds magnara Ólafur Davíð Bjarnason og Valdemar Örn Erlingsson 28. apríl 2009

Aðskilnaður breytistærða í rúmi

Eðlisfræði 1. Dæmi 5.2 (frh.) Dæmi Dæmi (frh.) d) P = W tog. = 0, 47kW. = 9, 4kJ

Menntaskólinn í Reykjavík

Ályktanir um hlutföll og tengslatöflur

Borðaskipan í þéttefni

t 2 c2 2 Φ = 0. (2.1)

Forritunarkeppni Framhaldsskólanna 2014

GeoGebruhjálp Handbók með útgáfu 3.2

Span og orka í einfaldri segulrás

RAF301G Merki og kerfi Miðmisserispróf, lausn

Kaplan Meier og Cox. Aðferðafræði klínískra rannsókna haustið 2010 Fimmtudagur 11 nóvember. Thor Aspelund Hjartavernd og Háskóla Íslands

6. júní 2016 kl. 08:30-11:00

Gagnasafnsfræði Venslaalgebra og bestun fyrirspurna. Hallgrímur H. Gunnarsson

FRÆÐSLUSKRIFSTOFA RAFIÐNAÐARINS

H2S loftgæðamælingar í Norðlingaholti og í Hveragerði

4.01 Maður ekur 700 km. Meðalhraðinn er 60 km/klst fyrstu 250 km og 75 km/klst síðustu 450 km. Hver er meðalhraðinn?

Iðjuþjálfun LIE0103 Hrefna Óskarsd.

Nokkur valin atriði úr aflfræði

Greinargerð Trausti Jónsson. Sveiflur IV. Árstíðasveiflur í háloftunum yfir Keflavík

Að setja fastan og kvikan texta í myndaglugga GeoGebru

Stillingar loftræsikerfa

Veghönnunarreglur 03 Vegferill

BLDC mótorstýring. Lokaverkefni í rafmagnstæknifræði BSc. Halldór Guðni Sigvaldason

Guðbjörg Pálsdóttir Guðný Helga Gunnarsdóttir NÁMSGAGNASTOFNUN

H 2 S loftgæðamælingar við Hellisheiðarvirkjun og Nesjavallavirkjun

1) Birgðabreyting = Innkaup - Sala + Framleiðsla - Rýrnun - Eigin notkun. Almennari útgáfa af lögmálinu hér fyrir ofan lítur svona út:

Sæmundur E. Þorsteinsson, TF3UA

H 2 S loftgæðamælingar við Hellisheiðarvirkjun og við Nesjavallavirkjun

H2S loftgæðamælingar í Norðlingaholti og í Hveragerði

H 2 S loftgæðamælingar í Norðlingaholti og í Hveragerði

9 x 2 x 2 x 3 = 19 (9 + 2) 2 3 = 19

H 2 S loftgæðamælingar við Hellisheiðarvirkjun og við Nesjavallavirkjun

Fylgiseðill: Upplýsingar fyrir notanda lyfsins. Symbicort mite Turbuhaler 80 míkrógrömm/4,5 míkrógrömm/skammt, Innöndunarduft

Orkuumbreyting milli raforku og hreyfiorku

Niðurstöður aurburðarmælinga í Jökulsá í Fljótsdal árið 2003

Vísandi mælitæki (2) Vísandi mælitæki. Vísandi mælitæki (1) Vísandi mælitæki (3)

Viðskipta- og Hagfræðideild Tölfræði II, fyrirlestur 6

Veghönnunarreglur 02 Þversnið

Hugtakalisti fyrir 10. bekk. Listinn er ekki tæmandi!!!

SKALI STÆRÐFRÆÐI FYRIR UNGLINGASTIG KENNARABÓK. Grete Normann Tofteberg Janneke Tangen Ingvill Merete Stedøy-Johansen Bjørnar Alseth

Eðlisfræði II: Riðstraumur. Kafli 11. Jón Tómas Guðmundsson 10. vika vor 2016

Meistararitgerð. Verðlagning langlífisáhættu

CHEMISTRY. Bylgjueðli ljóss. Bylgjueðli ljóss. Rafeindabygging atóma. Bylgjueðli ljóss. Bylgjueðli ljóss. Bylgjueðli ljóss

H2S mælingar í Norðlingaholti og Hveragerði Skýrsla um mælingar árið 2013 Unnið fyrir Orkuveitu Reykjavíkur

barnatennurnar BÓKIN UM Bókin um barnatennurnar

Rit LbhÍ nr Áhrif aldurs áa, þunga, holda og framleiðsluára. á gagnasafni Hestbúsins

Hæðarkerfi og hæðir Þórarinn Sigurðsson Landmælingar Íslands

Um tölvur stýrikerfi og forritun

H 2 S loftgæðamælingar við Hellisheiðarvirkjun og við Nesjavallavirkjun

fyrirlestrapunktar vor 2009 Háskóli Íslands Mælingar tengdar í tíma. Kafli 7 (muna 5.5. og k. 1-4)

16 kafli stjórn efnaskipta

Tölfræði II. Lausnahefti við völdum dæmum. Haustönn 2004

HÖNNUN BURÐARVIRKIS IÐNAÐARHÚSS SAMANBURÐUR Á MISMUNANDI BYGGINGAREFNUM

HÖNNUN Á STRENGLÖGN 11KV ÞINGVALLASVEIT

Stær fræ i. Kennsluleiðbeiningar. Kennsluleiðbeiningar. 8tíu. NÁMSGAGNASTOFNUN 15. febrúar 2007

ÁLFHÓLAR BURÐARÞOLSHÖNNUN STÁLGRINDARHÚSS

C Q T. þessu blaði. 5. tbl. 23. árg. des. 2005

Skýrsla LV nr: LV Dags: desember Titill: Landbrot á bökkum Hálslóns í Kringilsárrana úttekt 2017

FOUCAULT þrír textar 2014

Stærðfræði. Lausnir. Lausnir. 8tíu. NÁMSGAGNASTOFNUN 20. apríl 2009

FYLGISEÐILL FYRIR. PHENOLEPTIL 100 mg töflur fyrir hunda

Skilaverkefni 1. Skil á þriðjudaginn

Tölfræði II Samantekt vor 2010

Kafli 1: Tímastuðull RC liður. Dæmi 1.1 A: 3,3ms B: 7,56V Dæmi 1.2 A: 425µF B: 1s Dæmi 1.3 A: 34,38V B: 48,1V Dæmi 1.4 A: 59,38s

Lauf_P :26 Page 1 Laufblaðið Gefið út af Landssamtökum áhugafólks um flogaveiki 2. tölublað 9. árg. 2001

FYLGISEÐILL. Dorbene Vet 1 mg/ml stungulyf, lausn fyrir hunda og ketti.

Hagrannsóknir II fyrirlestraglósur

Vinkill. Lausnir. Ítarefni í stærðfræði fyrir 10. bekk

Þjófavarnarkerfi fyrir bílstöðvar

SAMANTEKT Á EIGINLEIKUM LYFS

Vinkill 3. Ítarefni í stærðfræði fyrir 10. bekk

Skrifað út ; 18:59 gk. 6. kafli, dæmi og svör með útreikningum

Rafbók. Riðstraumsmótorar. Kennslubók

Hætta af rafmagni og varnir

Landskeppni í eðlisfræði 2014

Kafli 4 Línulegur kraftur og hreyfing

SAMANTEKT Á EIGINLEIKUM LYFS

Annar kafli Hraði, hröðun, kraftur og massi

Reglur um skoðun neysluveitna

Fylgiseðill: Upplýsingar fyrir notanda lyfsins. Daivobet 50 míkrógrömm/0,5 mg/g hlaup. kalsípótríól/betametasón

GPS-mælingar á Hengilssvæði í apríl og maí 2003

SKALI STÆRÐFRÆÐI FYRIR UNGLINGASTIG KENNARABÓK. Grete Normann Tofteberg Janneke Tangen Ingvill Merete Stedøy-Johansen Bjørnar Alseth

Grunnvatnsrannsóknir í Norðurþingi 2010

S t æ r ð f r æ ð i. Kennsluleiðbeiningar. Kennsluleiðbeiningar. 8tíu NÁMSGAGNASTOFNUN. 7. september 2006

11979 H: Lögum um aðildarskilmála og aðlögun að sáttmálunum aðild Lýðveldisins Grikklands (Stjtíð. EB L 291, , bls. 17),

Fylgiseðill: Upplýsingar fyrir notanda lyfsins

Grunnvatnsrannsóknir í Norðurþingi

Rafmagsfræði loftræsikerfa

SAMANTEKT Á EIGINLEIKUM LYFS

VIÐAUKI I SAMANTEKT Á EIGINLEIKUM LYFS

Fylgiseðill: Upplýsingar fyrir notanda lyfsins. Daivobet 50 míkrógrömm/0,5 mg/g smyrsli. kalsípótríól/betametasón

VIÐAUKI I SAMANTEKT Á EIGINLEIKUM LYFS

Transcript:

Verkefni 1: Splæsibrúun og jafnhæðarferlar Friðrik Freyr Gautason og Guðbjörn Einarsson I. SPLÆSIBRÚUN FORRITUÐ Hérna er markmiðið að útfæra forrit sem leyfir notanda að smella á teikniglugga eins oft og hann vill. Þegar allir punktarnir eru komnir þá á forritið að teikna 3. stigs splæsibrúun í gegnum punktana. Það á að vera hægt að velja á milli 4 askilyrða þ.e. ekki-hnúts, þvinguð, náttúruleg og lotubundin askilyrði. A. Móðurforritið: S-MOTHER.m Forritið S-MOTHER.m sér um að halda utan um smellta punkta og teiknar síðan splæsibrúunina. Það byrjar á að setja upp teiknigluggann og leyfir notanum að smella á hann með vinstri músarhnapp uns stutt er á einhvern annan hnapp. Um leið og smellt er, teiknar forritið hring utan um þann stað sem smellt var á. Þegar þessu er lokið og notandinn kýs að hætta þá hefur S-MOTHER.m geymt gildi á öllum smelltum punktum í vigrunum x og y. Forritið sir þessi gildi í splaesi.m sem reiknar út splæsibrúunarferil á milli punktanna. Vandamál kemur þó upp þegar ekki er smellt í vaxandi röð (það er að segja vaxandi x gildi) en auðvelt er að leysa það með því að líta á ferilinn sem stikaferill (x(t), y(t)), þá er splæst bæði x(t) og y(t) og í lokinn ferillinn teiknaður. %--- S-MOTHER.m ---% a=-1; b=1; c=-1; d=1; % Morkin a teiknifletinum axis([a b c d]) % Teikniglugginn settur upp hold on % Leyfir okkur ad teikna oftar en einu sinni hnappur = 1; % Erum ad lesa inn hnit ur glugganum x=[]; y=[]; % hnitavigrarnir while(hnappur == 1) [xtmp,ytmp,hnappur] = ginput(1); % Lesum inn hnitin if(hnappur) x=[x,xtmp]; % Baetum nyju hnitunum vid thau gomlu y=[y,ytmp]; plot(x,y, o ) x=[x x(1)]; y=[y y(1)]; n = length(x); % Teiknum hringi i kringum punktana % Lokum ferlinum til ad sja % betur ad lotubundnu skilyrdin virka %Ef adeins einn punktur er gefinn er hann adeins teiknadur if(n==1) plot(x,y, o ) %Annars er kalllad a spleasi.m til thess ad reikna ut splaestan feril %yy(tt) og xx(tt), haegt er ad lita a (xx(tt),yy(tt)) sem stikadan feril %sem sidan er teiknadur. else t=1:n; tt=linspace(1,n,1); xx=splaesi(t,x,4,,,tt); yy=splaesi(t,y,4,,,tt); plot(xx,yy)

Ath að fallið linspace býr til stikavigurinn tt með 1 punktum á milli 1 og lengdar x. B. Splæsiaðferðin sjálf: splaesi.m splaesi.m tekur inn vigur gildi x og y ásamt tilgreindum jaðarskilyrðum, afleiðum í apunktum ef með þarf og einnig vigurinn xx. xx segir til um þau gildi á splæsta ferlinum sem notandinn vill fá út í úttakið yy. splaesi.m kallar á fallið splaesistudlar.m sem gefur því, eins og nafnið gefur til kynna, splæsistuðlana í brúunarmargliðunum, en farið verður nánar í það fall á eftir. yy er einfaldlega reiknað út frá splæsistuðlunum og xx með tvöfaldri for lykkju. Fyrst er athugað á hvaða bili punktur í vigrinum xx er og því næst flett upp viðeigandi stuðlum og punkturinn í yy vigrinum reiknaður út. %--- splaesi.m ---% %Inntak er vigur x og fallgildi y, num sem tilgreinir jadarskilyrdi %df1 og df2 sem tilgreinir afleidur i apunkti og xx sem segir til %um hvad uttakid yy a ad vera. function yy = splaesi(x,y,num,df1,df2,xx) %Sed til thess ad splesi.m gefi uttak med thvi ad skilgreina strax yy. yy = []; %Athugad hvort vigurinn xx er innan gefins vigur x, annars er %villuskilabod gefid, og forritid haettir keyrslu. if ( max(xx)>max(x) min(x)>min(xx) ) disp VILLA: Oll stok xx verda ad vera innan staka x. ; return; %Kallad er a splaesistudlar.m til thess ad reikna ut studlana %a,b,c og d. [a,b,c,d] = splaesistudlar(x,y,num,df1,df2); %Ef einhver villa er gefin i splaesistudlar.m tha skilar forritid %ollum stokum sem -1, og gefur villuskilabod. Vid thurfum thvi ekki %ad gefa villuskilabod en vid haettum keyrslu. if(a(1) == -1 && b(1) == -1 && c(1) == -1 && d(1) == -1) return; %Her er yy reiknad ut fra a,b,c og d med thekktri formulu med notkun %tvofaldrar for-lykkju, fyrst er rennt i gegnum oll stok i xx og borin %saman vid oll stok i x til thess ad akvarda hvada studla a ad nota, sidan %er yy einfaldlega reiknad. for i=1:length(xx) for j=1:length(x)-1 if( xx(i) >= x(j) && x(j+1) > xx(i) x(j+1) == xx(i)) yy(i) = a(j) + b(j)*( xx(i) - x(j) ) + c(j)*( xx(i) - x(j) )^2 + d(j)*( xx(i) - x(j) )^3; Forritið splaesistudlar.m tekur inn sömu gildi og splaesi.m fyrir utan að vigrinum xx er sleppt þar sem hann er óþarfur. Útkoman úr því eru splæsistuðlarnir a, b, c, d sem eru stuðlar í brúunarmargliðunni. a stuðlarnir eru einfaldlega y gildin á inntakinu. c stuðlarnir eru fundnir út frá fylkjajöfnunni Ac = B þar sem fylkið A og vigurinn B eru ákvörðuð útfrá x, y og jaðarskilyrðunum. b og d eru síðan ákvörðuð með einföldum jöfnum. Í stuttu máli byrjar aðferðin á því að fylla inn í efstu og neðstu línur fylkisins A og vigursins B eftir gefnum jaðarskilyrðum, því næst er klárað að fylla út restina af fylkinu og vigrinum sem er eins fyrir öll jaðarskilyrði. Þá er einfalt að reikna restina af stuðlunum út með MATLAB aðferðum. %--- splaesistudlar.m ---%

%Uttak er splaesistudlarnir a,b,c og d fyrir splaesimarglidur %skv. venjum i namskeidinu. ATH: a,b,c,d eru vigrar. inntakid %er vigrar x og y asamt num sem tilgreinir jadarskilyrdi og %df1 og df2 sem tilgreinir fyrstu afleidur a jadrunum. function [a,b,c,d] = splaesistudlar(x,y,num,df1,df2) %Lengd vigurs x gefid gildi nx vegna mikillar notkunar. nx = length(x); %Ef vigrarnir eru mislangir er villuskilabod gefid og forritid %haettir keyrslu, ath ad uttakinu er gefid gildi -1. if(nx ~= length(y)) a = -1; b = -1; c = -1; d = -1; disp VILLA: Lengd vigra x,y verdur ad vera su sama. ; return; %Vid krefjumst lagmarksfjolda af punktum 3. if( 3 >= nx ) disp VILLA: Of fair punktar gefnir. a = -1; b = -1; c = -1; d = -1; return; %Vigrar og fylki eru skilgreind fyrir seinni notkun. h = []; A = zeros(nx,nx); B = zeros(nx,1); a = y; b = []; c = []; d = []; %fyllt er inn i h vigurinn skv venjum. for i=1:nx-1 h(i) = x(i+1)-x(i); %Her er fyllt inn i fylkid A og vigurinn B eftir hvert %jadarskilyrdi skal nota. Her er tho adeins fyllt i efstu %linu og nedstu baedi i A og B. Formulur ma finna i bok. %Theim stokum sem ekki er gefid gildi eru. %EKKI-HNUTS if(num==1) A(1,1) = h(2); A(1,2) = - ( h(1) + h(2) ); A(1,3) = h(1); A(nx,nx-2) = h(nx-2); A(nx,nx-1) = - h(nx-3) - h(nx-2); A(nx,nx) = h(nx-3); B(1) = ; B(nx) = ; %THVINGUD elseif(num==2)

%Her er krafist ad inntakid se 5 talsins. if(nargin ~= 5) disp VILLA: Breyturnar "df1" og/eda "df2" vantar. ; a = -1; b = -1; c = -1; d = -1; return; A(1,1) = 2*h(1); A(1,2) = h(1); A(nx,nx-1) = h(nx-2); A(nx,nx) = 2*h(nx-1); B(1) B(nx) = 3*( a(2) - a(1) )/h(1) - df1*3; = df2*3-3*( a(nx) - a(nx-1) )/h(nx-2); %NATTURULEG elseif(num==3) A(1,1) = 1; A(nx,nx) = 1; B(1) = ; B(nx) = ; %LOTUBUNDIN elseif(num==4) A(1,1) = 1; A(1,nx) = - 1; A(nx,1) = h(1); A(nx,nx-1) = h(nx-2); A(nx,nx) = 2*( h(1) + h(nx-2) ); B(1) = ; B(nx) = 3*( ( a(2) - a(1) )/h(1) - ( a(nx) - a(nx-1) )/h(nx-1) ); %Ef num tekur ekki gildi 1,2,3 eda 4 tha skilar forritid villu. else disp VILLA: Breytan "num" tekur ekki rett gildi ; a = -1; b = -1; c = -1; d = -1; return; %Restin af fylkinu er fyllt inn sem er eins fyrir oll skilyrdin for i=2:nx-1 A(i,i-1) = h(i-1); A(i,i) = 2*( h(i-1) + h(i) ); A(i,i+1) = h(i); B(i) = 3*( a(i+1) - a(i) )/h(i) - 3*( a(i) - a(i-1) )/h(i-1); %nu er jofnuhneppid Ac = B leyst sem gefur c studlana. c = A\B; %b og d studlar eru reiknadir skv. thekktum formulum nu thegar c er %thekkt. for i=1:nx-1 d(i) = ( c(i+1) - c(i) )/( 3*h(i) ); b(i) = ( a(i+1) - a(i) )/h(i) - h(i)*( 2*c(i) + c(i+1) )/3;

C. Prófun á aðferðinni Forritið S-MOTHER.m og splaesi.m var prufað fyrir öll 4 jaðarskilyrðin og útkoman eru myndir 1-4 þar sem 1 sýnir ekki hnúts jaðarskilyrði, 2 sýnir þvinguð jarðarskilyrði, 3 sýnir náttúruleg jaðarskilyrði og 4 sýnir lotubundin jaðarskilyrði. Mynd 5 sýnir skekkju frá réttu gildi fyrir öll 4 jaðarskilyrðin fyrir fallið sin(x) þegar 1 splæsipunktar eru notaðir á bilinu upp í 2π. Greinilegt er að þvinguð og náttúruleg jaðarskilyrði gefa hér bestu nálgunina en nálægt jöðrunum verður skekkjan töluverð hjá ekki-hnúts og lotubundun skilyrðum. Taylornálgun sin(x) um núll inniheldur ekki x 2 lið, það er c = sem er það sem náttúruleg jaðarskilyrði gera ráð fyrir. Þetta er ástæða þess að náttúruleg skilyrði virka vel í apunktunum. 1.8 Not a knot.6.4.2.2.4.6.8 1 1.5.5 1 Mynd 1: Sýnir prufukeyrslu á S-MOTHER.m fyrir ekki hnúts jaðarskilyrði á splaesi.m aðferðinni. 1.8 Clamped.6.4.2.2.4.6.8 1 1.5.5 1 Mynd 2: Sýnir prufukeyrslu á S-MOTHER.m fyrir ekki hnúts jaðarskilyrði á splaesi.m aðferðinni.

1.8 Natural.6.4.2.2.4.6.8 1 1.5.5 1 Mynd 3: Sýnir prufukeyrslu á S-MOTHER.m fyrir ekki hnúts jaðarskilyrði á splaesi.m aðferðinni. 1.8 Periodic.6.4.2.2.4.6.8 1 1.5.5 1 Mynd 4: Sýnir prufukeyrslu á S-MOTHER.m fyrir ekki hnúts jaðarskilyrði á splaesi.m aðferðinni. II. JAFNHÆÐARFERLAR Í þessum liði verkefnisins er fall útfært til þess að teikna jafnhæðarferla falls z = f(x, y). Forritað var móðurforritið C-MOTHER.m sem teiknar fallið f(x, y) á tvívítt plan með pcolor aðferð í MATLAB. Á myndina er svo unnt að smella, þá kallar móðurforritið á aðferðina jafnhaedarferill.m sem reiknar út jafnhæðarferilinn og skilar splæstum ferli út ásamt þeim punktum sem reiknaðir voru. Móðurforritið teiknar þá ferilinn sem liggur í gegnum punktinn sem á var smellt. Hægt er að smella eins oft og hugurinn girnist.

5 x 1 3 4 3 2 NAK CLAMPED NATURAL PERIODIC 1 1 2 3 4 5 1 2 3 4 5 6 7 Mynd 5: Sýnir mismun á splæstum gildum og raunverulegum fyrir allar gerðir askilyrða. Notaðir voru 1 splæsipunktar á bilinu upp í 2π fyrir fallið sin(x). A. Móðurforritið: C-MOTHER.m Forritið er nokkuð líkt í uppbyggingu eins og S-MOTHER.m nema nú er strax teiknað á svæðið gefið fall z = f(x,y). Fallið sjálft er skilgreint í annari aðferð fall.m til þess að auðvelda umskiptingu á föllum. Vigrarnir X og Y eru gefnir með meshgrid aðferðinni sem skilar fylki fyrir bæði X og Y, en fall.m er forritað miðað við það. Kosturinn við fall.m er að það getur hæglega reiknað út eitt fallgildi eða skilað vigri af gildum. Notast var við pcolor til þess að teikna fallið á svæðið með colormap spring sem gefur einkar fallega liti. %--- C-MOTHER.m ---% a=; b=1; c=; d=1; axis([a b c d]) hold on hnappur = 1; % Morkin a teiknifletinum % Teikniglugginn settur upp % Leyfir okkur ad teikna oftar en einu sinni % Erum ad lesa inn hnit ur glugganum %Vigrar(fylki) X og Y skilgr. [X,Y] = meshgrid(a:.5:b,c:.5:d); %Fallgildin reiknud ut med thvi ad kalla a fall.m Z = fall(x,y); %Vorlegt litval. colormap spring %Litmynd teiknud. pcolor(x,y,z) while(hnappur == 1) [x1,y1,hnappur] = ginput(1); % Lesum inn hnitin if(hnappur) %Upphafspunktur skilgr. P = [x1 y1]; %Kallad a jafnhaedarferill.m til thess ad reikna ut jafnhaedarferilinn. [xx,yy,p] = jafnhaedarferill(p,a,b,c,d); %Splaestur jafnhaedarferill asamt punktum sem splaest %er i gegunum teiknadir ofan a myndina. plot(xx,yy, -k,p(:,1),p(:,2), o )

Eins og sést af forritinu er staðsetning á músinni þegar smellt er stungið í vigur P sem síðan er notað sem inntak í jafnhaedarferill.m ásamt jaðri svæðisins. Forritið notar aðferð sem búin var til fyrir verkefnið í stað MATLAB contour aðferðarinnar en einfalt er að umbreyta því þannig að sú aðferð sé notuð. Hér sést einnig að ekki er einungis splæstur jafnhæðarferill teiknaður heldur eru punktarnir P sem jafnhaedarferill.m reiknar út einnig teiknaðir. %--- fall.m ---% function [Z] = fall(x,y) %jafnhaedarferill.m og C-MOTHER.m kalla a %fall.m til thess ad reikna ut fallgildin. %thetta audveldar breytingar. Z = X.^2+Y.^2; Aðferðin fall.m er eins og sést afar einföld en er aðeins notuð til hægðarauka. B. Aðferðin: jafnhaedarferill.m Hér fer lýsing á aðferðinni jafnhaedarferill.m sem er aðalforritið í verkefninu. Aðferðin virkar í stuttu máli þannig að upphafspunktur ásamt upplýsingum um fallið er tekið inn í lykkju sem reiknar næsta punkt á jafnæðarferlinum með því að stika línu í fjarlægð α í stefnu snertilsins við ferilinn, línan er stikuð þannig að hún liggji hornrétt á snertilinn. Hægt er að reikna snertilinn T með því að snúa þvervigrinum N um 9 gráður, en þvervigurinn reiknast út frá stiglinum með formúlunni N = grad f grad f. Síðan til þess að finna næsta punkt á ferlinum er jafnan f(x(t),y(t)) f(x,y ) = leyst tölulega, athugum að x(t) og y(t) tákna hér stikun á ofangreindri línu og punkturinn (x,y ) er upphaflegi punkturinn P sem er inntak inn í aðferðina. Þetta er gert uns ferillinn lokast eða hann lir utan skilgreiningarmengisins sem er inntak í aðferðina. Athgum að grad f er reiknað tölulega með aðferðinni ( f(x+h,y) f(x h,y) grad f =, 2h ) f(x,y+h) f(x,y h), 2h þannig að við þurfum að ákveða tvær stærðir, α og h. Við veljum h þannig að það sé um 1% af fjarlægð punktsins (x,y) frá jaðri mengisins, og notum viðeigandi h fyrir hvern punkt á ferlinum. Talsvert erfiðara er að ákvarða α en almennt má velja α um 1% af fjarlægð punktsins (x,y ) frá jaðri mengisins þar sem sama α er notað fyrir alla punktana á ferlinum. Við komumst að því að þegar upphafspunkturinn liggur nálægt jaðri verður α of lítil stærð og reiknitíminn verður of langur. Við settum því lággildi á α, en þá kom í ljós að ef ferillinn var lokaður nálægt miðju skilgreiningarmengisins þá varð α hugsanlega of stórt þannig að engin lausn var á jöfnunni f(x(t),y(t)) f(x,y ) = innan eðlilegra marka. Þetta gerist þegar α er stórt miðað við ferilinn sjálfan vegna þess að aðferðin snidill.m sem notuð er til þess að leysa jöfnuna er gölluð. Ef α er of stórt þá getur snidill.m lent í óanlegri lykkju og látið keyrsluna eyðileggjast. Betra hefði verið að gera öriggisventil á snidll.m þannig að hann skilar villustærð þegar stefnir í óefni og þá væri hægt að helminga α og keyra aftur í gegn, svo hefði aftur þurft örrigisventil á þá lykkju og ef ekkert dygði yrði ferillinn ekki teiknaður en forritið héldi áfram í keyrslu (það er að segja móðurforritið). Við reyndum að þessum sökum að setja hágildi á α en eftir tilraunir ákváðum við að stilla α á fast gildi sem virtist hentugast fyrir flestar gerðir ferla, það var um 1% af breidd (eða hæð) mengisins. %--- jafnhaedarferill.m ---% %Inntak er punktur a ferlinum P asamt staerd mengis D, gefid med %apunktum a, b, c og d. Fallid skilar svo splaestum ferli yy %sem fall af xx asamt osplaestum punktum sem eru reiknadir P. function [xx,yy,p] = jafnhaedarferill(p,a,b,c,d) lambda = fall(p(1),p(2)); %Fyrsta fallgildid reiknad P=[]; %Uttaksvigur P skilgr. P(1,:) = P; %Fyrsta gildi P gefid

i=1; %Teljari. %alpha er skilgreint sem 1% af breidd (eða haed) kassans alpha =.1*abs(min([b-a d-c])); %Staerdir fyrir snidill.m (gefid a uglunni) t=; eps = 1e-1; %Monitor parameter. l=; %ADAL LYKKJAN! %her eru punktar P reiknadir. %Lykkjan heldur afram ad ganga svo lengi sem l er ekki -1 og ferillinn hefur ekki %nad i skottid a ser. while(l~=-1 && (sqrt(sum((p-p(i,:)).^2)) > alpha 3 > i)) %h skilgreint fyrir hvern punkt P(i,:). h =.1*min([abs(P(i,1)-a) abs(p(i,1)-b) abs(p(i,2)-c) abs(p(i,2)-d)]); %Nalgun a gradient vigrinum reiknud, midad vid gefid h. gradz = [(fall(p(i,1)+h,p(i,2))-fall(p(i,1)-h,p(i,2)))/(2*h) (fall(p(i,1),p(i,2)+h)-fall(p(i,1),p(i,2)-h))/(2*h)]; %Gradientvigurinn stadladur til thess ad gefa einingarnormal. N = gradz/sqrt(sum(gradz.^2)); %Normal snuid um pi/2 til thess ad gefa snertil i punktinum P(i,:). T = [N(2),-N(1)]; %Punktur i fjarlaegd alpha i stefnu T fra punkti P(i,:) skilgr. Q = P(i,:) + alpha*t; %ATHUGAD: hvort Q li utan kassa, %THA: N gefid gildi vigurs samsida marka, % Q gefid gildi punkts a jadri. % og l gefid gildi -1 til thess ad a while lykkjuna. if (a>q(1)) N = [ 1]; Q = [a (P(2)-Q(2))*(a-P(1))/(P(1)-Q(1))+P(2)]; l =-1; elseif (Q(1)>b) N = [ -1]; Q = [b (Q(2)-P(2))/(Q(1)-P(1))*(b-Q(1))+Q(2)]; l =-1; elseif (c>q(2)) N = [-1 ]; Q = [(P(1)-Q(1))*(c-P(2))/(P(2)-Q(2))-P(1) c]; l =-1; elseif (Q(2)>d) N = [1 ]; Q = [(Q(1)-P(1))*(d-Q(2))/(Q(2)-P(2))-Q(1) d]; l =-1; %Stikud lina skilgreind i gegnum punkt Q i stefnu N.

linfunc = @(t) fall(q(1)+t*n(1),q(2)+t*n(2))-lambda; %Agiskun t1 gefid gildi skv. fyrirmaelum if (fall(q(1)+alpha*n(1),q(2)+alpha*n(2))>fall(q(1)-alpha*n(1),q(2)-alpha*n(2))) t1=-alpha; else t1=alpha; %lausnin r fundin med snidill.m r=snidill(linfunc,t,t1,eps); %Teljari haekkadur og fundinn punktur geymdur i P vigrinum. i=i+1; P(i,:) = Q+r*N; %l er -1 ef ferillinn for ut af jadri kassa. %Tha er adal lykkjan urtekin thar sem nu er snuid um -pi/2. if l==-1 i = i+1; %Talan j = i geymd fyrir notkun seinna. j = i; %Naesti punktur i vigrinum faer upphaflega gildid P. P(i,:) = P; %ADAL LYKKJAN ENDURTEKIN. %nu heldur hun afram ad ganga a medan l er ekki -2 en thad gerist thegar %ferillinn fer aftur ut af morkum kassans. vid leyfum hringamyndun afram %ef svo kynni ad gerast. while(l~=-2 && (sqrt(sum((p-p(i,:)).^2)) > alpha j+3 > i)) h =.1*min([abs(P(i,1)-a) abs(p(i,1)-b) abs(p(i,2)-c) abs(p(i,2)-d)]); gradz = [(fall(p(i,1)+h,p(i,2))-fall(p(i,1)-h,p(i,2)))/(2*h) (fall(p(i,1),p(i,2)+h) -fall(p(i,1),p(i,2)-h))/(2*h)]; N = gradz/sqrt(sum(gradz.^2)); T = [-N(2),N(1)]; %SNUID I OFUGA ATT! Q = P(i,:) + alpha*t; if (a>q(1)) N = [ 1]; Q = [a (P(2)-Q(2))*(a-P(1))/(P(1)-Q(1))+P(2)]; l =-2; elseif (Q(1)>b) N = [ -1]; Q = [b (Q(2)-P(2))/(Q(1)-P(1))*(b-Q(1))+Q(2)]; l =-2; elseif (c>q(2)) N = [-1 ]; Q = [(P(1)-Q(1))*(c-P(2))/(P(2)-Q(2))-P(1) c]; l =-2; elseif (Q(2)>d) N = [1 ]; Q = [(Q(1)-P(1))*(d-Q(2))/(Q(2)-P(2))-Q(1) d]; l =-2;

linfunc = @(t) fall(q(1)+t*n(1),q(2)+t*n(2))-lambda; if (fall(q(1)+alpha*n(1),q(2)+alpha*n(2))>fall(q(1)-alpha*n(1),q(2)-alpha*n(2))) t1=-alpha; else t1=alpha; r=snidill(linfunc,t,t1,eps); i=i+1; P(i,:) = Q+r*N; %Fjoldi punkta i vigri geymd (k), en m er aldrei notud. [k,m] = size(p); %ENDURRODUN A VIGRI! %P1 og P2 eru geymsluvigrar og their sidan settir saman i lokinn til thess %ad mynda P vigurinn a ny. Athugum ad P inniheldur P i saeti j sem vid %viljum losna vid. %P1 Skilgreindur. P1 = []; %Fyrstu j-1 stokin ur P geymd i P1, thetta eru punktar fra P og ad jadri. for i = 1:j-1 P1(i,:) = P(i,:); %P2 skilgreindur. P2 = []; %Seinustu j stokin ur P radad i ofugri rod i vigurinn P2, thannig ad fyrsta stakid %i P2 er punktur vid jadarinn og sidasti er punktur nalaegt P. for i=1:k-j P2(i,:) = P(k+1-i,:); %Tha er vigrunum augljoslega skeytt saman i P. P = []; P = [P2;P1]; %t og tt skilgreint til thess ad splaesa um. t=1:k-1; tt=linspace(1,k-1,1); %splaesi.m notad med EKKI-HNUTS jadarskilyrdum til thess ad splaesa saman ferilinn. xx=splaesi(t,p(:,1),1,,,tt); yy=splaesi(t,p(:,2),1,,,tt); %Ef l er tha er ljost ad vid hofum lokadan feril og thvi sjaum vid til thess ad sidasta %stakid i P se aftur upphafspunkturinn P. Thvi naest er t og tt og xx og yy fundid med %thvi ad kalla a splaesi.m med LOTUBUNDNUM askilyrdum. if (l==) P = [P;P]; [k,m] = size(p); t=1:k; tt=linspace(1,k,1);

xx=splaesi(t,p(:,1),4,,,tt); yy=splaesi(t,p(:,2),4,,,tt); Eins og sést er aðferðin talsvert löng vegna lélegrar forritunar og uppsetningar, en það kemur ekki að sök þegar hún er notuð. Við sjáum að ef ferillinn er ekki lokaður á skilgreiningarmenginu og lir á jaðri þess þá höfum við í raun aðeins hluta af jafnhæðarferlinum sem við viljum fá, við þurfum því að gefa merki um að við lentum á jaðrinum l=-1 og stoppa lykkjuna. Síðan hleypum við inn í samskonar lykkju og áður sem snýr þvervigrinum N nú í -9 gráður til þess að fá stefnuvigurinn T og reiknar punkta á ferlinum frá upphafspunkti í öfuga stefnu, að lokum urröðum við vigrinum þannig að hann snúi rétt eins og sést í aðferðinni. Nú þegar allir punktarnir eru fengnir er splæst á milli þeirra með splaesi.m á svipaðan hátt og gert er í S-MOTHER.m sem er þá úttakið. Athugum að þegar ferillinn er lokaður (l=) þá notum við lotubundin askilyrði, en þegar hann er ekki lokaður þá notum við ekki hnúts askilyrði í splaesi.m aðferðinni. C. Notkun á aðferðinni Við prófum fyrst aðferðinna á einföldum föllum f(x,y) = xy á menginu x [,1], y [,1] sem á að gefa okkur einungis opna ferla og hins vegar f(x,y) = x 2 + y 2 á menginu x [ 1,1], y [ 1,1] sem mun gefa okkur hringi sem jafnhæðarferla. 1.9.8.7.6.5.4.3.2.1.2.4.6.8 1 Mynd 6: Fallið f(x,y) = xy á menginu x [,1], y [,1]. Jafnhæðarferlar eru teiknaðir með svörtum línum ofan á graf fallsins ásamt því að reiknaðir punktar P eru teiknaðir með. Síðan er hægt að teikna tvinngild föll en þá sleppum við að teikna graf fallana og teiknum aðeins jafnhæðarferlana. Þetta gerðum við og sést afraksturinn á myndum 8,9 og 1.

1.8.6.4.2.2.4.6.8 1 1.5.5 1 Mynd 7: Fallið f(x,y) = x 2 +y 2 á menginu x [ 1,1], y [ 1,1]. Jafnhæðarferlar eru teiknaðir með svörtum línum ofan á graf fallsins ásamt því að reiknaðir punktar P eru teiknaðir með. 4 3 2 1 1 2 3 4 4 3 2 1 1 2 3 4 Mynd 8: Fallið f(z) = ln z 1 +ln z+1 á menginu x [ 4,4], y [ 4,4] þar sem z = x+iy. Jafnhæðarferlar eru teiknaðir með svörtum línum.

1.9.8.7.6.5.4.3.2.1.2.4.6.8 1 Mynd 9: Fallið f(z) = z 2 á menginu x [,1], y [,1] þar sem z = x+iy. Jafnhæðarferlar raunhlutans eru teiknaðir með bláum línum en þverhlutans með rauðum. 1.9.8.7.6.5.4.3.2.1.2.4.6.8 1 Mynd 1: Fallið f(z) = arcsin(z) á menginu x [,1], y [,1] þar sem z = x+iy. Jafnhæðarferlar raunhlutans eru teiknaðir með bláum línum en þverhlutans með rauðum.