{"id":181,"date":"2006-11-18T20:21:43","date_gmt":"2006-11-18T19:21:43","guid":{"rendered":"http:\/\/www.navision-blog.de\/2006\/11\/18\/approximation-des-natrlichen-logarithmus\/"},"modified":"2006-11-20T09:28:56","modified_gmt":"2006-11-20T08:28:56","slug":"approximation-des-natrlichen-logarithmus","status":"publish","type":"post","link":"http:\/\/www.navision-blog.de\/blog\/2006\/11\/18\/approximation-des-natrlichen-logarithmus\/","title":{"rendered":"Approximation des nat&uuml;rlichen Logarithmus"},"content":{"rendered":"<p>Da Navision\u00a0in Bezug auf mathematische Funktionen nur ganz rudiment&#228;re Funktionalit&#228;t bietet, m&#246;chte ich in einer kleinen Serie eine Mathe-Bibliothek in C\/AL entwickeln und dabei auf verschiedene Approximationsm&#246;glichkeiten der einzelnen Funktionen eingehen. <\/p>\n<p>Den Anfang m&#246;chte ich dieser Stelle mit der Approximation des nat&#252;rlichen Logarithmus machen:<\/p>\n<h5>M&#246;glichkeit 1 &#8211;\u00a0Potenzreihenentwicklung:<\/h5>\n<h6>Formel:<\/h6>\n<p><img alt=\"Ln-Potenzreihe &#252;ber Taylorentwicklung\" src=\"http:\/\/www.navision-blog.de\/images\/math\/ln_powerseries.gif\"><\/p>\n<h6>Implementierung:<\/h6>\n<\/p>\n<div class=\"wlWriterSmartContent\" id=\"57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:e52d599c-6280-41b2-8162-9f0fd3277e70\" contenteditable=\"false\" style=\"padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px\">\n<pre style=\"background-color:White;\">\r\n<div><!--\r\n\r\nCode highlighting produced by Actipro CodeHighlighter (freeware)\r\nhttp:\/\/www.CodeHighlighter.com\/\r\n\r\n--><span style=\"color: #000000; \">LOCAL PROCEDURE LN_PowerSeries@<\/span><span style=\"color: #000000; \">1000000038<\/span><span style=\"color: #000000; \">(x@<\/span><span style=\"color: #000000; \">1<\/span><span style=\"color: #000000; \"> : Decimal)\r\n  f : Decimal;\r\nVAR\r\n  x_@<\/span><span style=\"color: #000000; \">1000000002<\/span><span style=\"color: #000000; \"> : Decimal;\r\n  i@<\/span><span style=\"color: #000000; \">1000000003<\/span><span style=\"color: #000000; \"> : Integer;\r\n  f_old@<\/span><span style=\"color: #000000; \">1000000001<\/span><span style=\"color: #000000; \"> : Decimal;\r\nBEGIN\r\n  <\/span><span style=\"color: #808080; \">\/\/\/<\/span><span style=\"color: #008000; \"> <\/span><span style=\"color: #808080; \">&lt;summary&gt;<\/span><span style=\"color: #008000; \">\r\n  <\/span><span style=\"color: #808080; \">\/\/\/<\/span><span style=\"color: #008000; \"> Calculates the LN by the \"LN - Power Series\"\r\n  <\/span><span style=\"color: #808080; \">\/\/\/<\/span><span style=\"color: #008000; \"> Requires 0 <\/span><span style=\"color: #808080; \">&lt; x &lt;= 2\r\n<\/span><span style=\"color: #008000; \">  <\/span><span style=\"color: #808080; \">\/\/\/<\/span><span style=\"color: #008000; \"> <\/span><span style=\"color: #808080; \">&lt;\/summary&gt;<\/span><span style=\"color: #808080; \">\r\n<\/span><span style=\"color: #000000; \">\r\n  IF (x <\/span><span style=\"color: #000000; \">&lt;=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">0<\/span><span style=\"color: #000000; \">) OR (x <\/span><span style=\"color: #000000; \">&gt;<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">2<\/span><span style=\"color: #000000; \">) THEN\r\n    ERROR(ArgumentOutOfRange,x);\r\n\r\n  x_ :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> x <\/span><span style=\"color: #000000; \">-<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">1<\/span><span style=\"color: #000000; \">;\r\n  i :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">2<\/span><span style=\"color: #000000; \">;\r\n  f :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> x_;\r\n\r\n  REPEAT\r\n    f_old :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> f;\r\n    f :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> f <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> POWER(<\/span><span style=\"color: #000000; \">-<\/span><span style=\"color: #000000; \">1<\/span><span style=\"color: #000000; \">,i <\/span><span style=\"color: #000000; \">-<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">1<\/span><span style=\"color: #000000; \">) <\/span><span style=\"color: #000000; \">*<\/span><span style=\"color: #000000; \"> POWER(x_,i) <\/span><span style=\"color: #000000; \">\/<\/span><span style=\"color: #000000; \"> i;\r\n    i :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> i <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">1<\/span><span style=\"color: #000000; \">;\r\n  UNTIL ROUND(f_old,Precision) <\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> ROUND(f,Precision);\r\nEND;<\/span><\/div>\r\n<\/pre>\n<\/div>\n<h6>Einsch&#228;tzung:<\/h6>\n<p>Die Potenzreihenentwicklung ist wohl die bekannteste Formel zur Berechnung des Ln &#8211; gleichzeitig ist sie aber auch die Unpraktischste. Die zwei Hauptprobleme sind der kleine Definitionsbereich und die langsame Konvergenz.<\/p>\n<h5>M&#246;glichkeit 2 &#8211; Reihenentwicklung &#252;ber Areatangens Hyperbolicus:<\/h5>\n<h6>Formel:<\/h6>\n<p><img height=\"58\" alt=\"Areatangens Hyperbolicus - Potenzentwicklung\" src=\"http:\/\/www.navision-blog.de\/images\/math\/areatangens.gif\"><\/p>\n<p>mit Restglied<\/p>\n<p><img alt=\"Areatangens Hyperbolicus Restglied\" src=\"http:\/\/www.navision-blog.de\/images\/math\/areatangens_restglied.gif\"><\/p>\n<h6>Implementierung:<\/h6>\n<div class=\"wlWriterSmartContent\" id=\"57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:d515daa2-fd1d-4b77-8c76-059829bdbddc\" contenteditable=\"false\" style=\"padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px\">\n<pre style=\"background-color:White;\">\r\n<div><!--\r\n\r\nCode highlighting produced by Actipro CodeHighlighter (freeware)\r\nhttp:\/\/www.CodeHighlighter.com\/\r\n\r\n--><span style=\"color: #000000; \">LOCAL PROCEDURE LN_AreaTangensHyp@<\/span><span style=\"color: #000000; \">1000000040<\/span><span style=\"color: #000000; \">(x@<\/span><span style=\"color: #000000; \">1<\/span><span style=\"color: #000000; \"> : Decimal)\r\n  f : Decimal;\r\nVAR\r\n  i@<\/span><span style=\"color: #000000; \">1000000003<\/span><span style=\"color: #000000; \"> : Integer;\r\n  f_old@<\/span><span style=\"color: #000000; \">1000000001<\/span><span style=\"color: #000000; \"> : Decimal;\r\n  f_@<\/span><span style=\"color: #000000; \">1000000002<\/span><span style=\"color: #000000; \"> : Decimal;\r\nBEGIN\r\n  <\/span><span style=\"color: #808080; \">\/\/\/<\/span><span style=\"color: #008000; \"> <\/span><span style=\"color: #808080; \">&lt;summary&gt;<\/span><span style=\"color: #008000; \">\r\n  <\/span><span style=\"color: #808080; \">\/\/\/<\/span><span style=\"color: #008000; \"> Calculates the LN by the \"AreaTangens hyperbolicus - Power Series\"\r\n  <\/span><span style=\"color: #808080; \">\/\/\/<\/span><span style=\"color: #008000; \"> Requires x &gt; 0\r\n  <\/span><span style=\"color: #808080; \">\/\/\/<\/span><span style=\"color: #008000; \"> <\/span><span style=\"color: #808080; \">&lt;\/summary&gt;<\/span><span style=\"color: #808080; \">\r\n<\/span><span style=\"color: #000000; \">\r\n  IF x <\/span><span style=\"color: #000000; \">&lt;=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">0<\/span><span style=\"color: #000000; \"> THEN\r\n    ERROR(ArgumentOutOfRange,x);\r\n\r\n  f_ :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">0<\/span><span style=\"color: #000000; \">;\r\n\r\n  REPEAT\r\n    f_old :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> f_;\r\n    f_ :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> f_ <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> POWER((x<\/span><span style=\"color: #000000; \">-<\/span><span style=\"color: #000000; \">1<\/span><span style=\"color: #000000; \">)<\/span><span style=\"color: #000000; \">\/<\/span><span style=\"color: #000000; \">(x<\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \">1<\/span><span style=\"color: #000000; \">),<\/span><span style=\"color: #000000; \">2<\/span><span style=\"color: #000000; \">*<\/span><span style=\"color: #000000; \">i<\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \">1<\/span><span style=\"color: #000000; \">) <\/span><span style=\"color: #000000; \">\/<\/span><span style=\"color: #000000; \"> (<\/span><span style=\"color: #000000; \">2<\/span><span style=\"color: #000000; \">*<\/span><span style=\"color: #000000; \">i<\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \">1<\/span><span style=\"color: #000000; \">);\r\n    i :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> i <\/span><span style=\"color: #000000; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">1<\/span><span style=\"color: #000000; \">;\r\n  UNTIL f_old <\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> f_;\r\n  f :<\/span><span style=\"color: #000000; \">=<\/span><span style=\"color: #000000; \"> f_ <\/span><span style=\"color: #000000; \">*<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #000000; \">2<\/span><span style=\"color: #000000; \">;\r\nEND;<\/span><\/div>\r\n<\/pre>\n<\/div>\n<h6>Einsch&#228;tzung:<\/h6>\n<p>Diese Folge\u00a0hat f&#252;r x und 1\/x gleiches Konvergenzverhalten und ist umso genauer je n&#228;her x bei 1 liegt.\u00a0Damit man immer im idealen\u00a0Konvergenzbereich (1\/Wurzel(2) bis Wurzel(2))\u00a0ist kann man das Argument noch geeignet verschieben.\u00a0<\/p>\n<h5>M&#246;glichkeit 3 &#8211; Wurzeln&#228;herung:<\/h5>\n<h6>Formel:<\/h6>\n<p><img alt=\"Ln Wurzelentwicklung\" src=\"http:\/\/www.navision-blog.de\/images\/math\/ln_wurzel.gif\"><\/p>\n<h6>Einsch&#228;tzung:<\/h6>\n<p>Dies ist ein interessanter Ansatz, der in dieser Form erstmal f&#252;r die Praxis ungeeignet ist, aber mit einigen Abwandlungen als Briggsche Regel mit guter Genauigkeit programmiert werden kann. Voraussetzung ist nat&#252;rlich eine gute N&#228;herung f&#252;r die Quadratwurzel.<\/p>\n<h5>M&#246;glichkeit 4 &#8211; Berechnung &#252;ber den Dekadischen Logarithmus<\/h5>\n<h6>Formel:<\/h6>\n<p><img alt=\"Logarithmus Basisumrechnung\" src=\"http:\/\/www.navision-blog.de\/images\/math\/basiswechsel.png\"><\/p>\n<h6>Einsch&#228;tzung:<\/h6>\n<p>Das Logarithmusgesetz ist nat&#252;rlich erstmal unspektakul&#228;r &#8211;\u00a0aber den dekadischen Logarithmus kann man nach der Goldenen Regel (nach Briggs) immer auf 30 Stellen genau berechnen. Wie das geht soll der n&#228;chste Teil der Serie zeigen.<\/p>\n<h5>Weiterf&#252;hrende Quellen:<\/h5>\n<ul>\n<li><a title=\"Logarithmus Wikipedia\" href=\"http:\/\/de.wikipedia.org\/wiki\/Logarithmus\" target=\"_blank\">Wikipedia-Artikel &#252;ber Logarithmen<\/a><\/li>\n<li><a title=\"Briggs Wikipedia\" href=\"http:\/\/de.wikipedia.org\/wiki\/Henry_Briggs\" target=\"_blank\">Wikipedia-Artikel &#252;ber Henry Briggs<\/a><\/li>\n<li><a href=\"http:\/\/www.mathematik.ch\/anwendungenmath\/logarithmen\/\" target=\"_blank\">Logarithmus-Artikel auf mathematik.ch<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Da Navision\u00a0in Bezug auf mathematische Funktionen nur ganz rudiment&#228;re Funktionalit&#228;t bietet, m&#246;chte ich in einer kleinen Serie eine Mathe-Bibliothek in C\/AL entwickeln und dabei auf verschiedene Approximationsm&#246;glichkeiten der einzelnen Funktionen eingehen. Den Anfang m&#246;chte ich dieser Stelle mit der Approximation des nat&#252;rlichen Logarithmus machen: M&#246;glichkeit 1 &#8211;\u00a0Potenzreihenentwicklung: Formel: Implementierung: LOCAL PROCEDURE LN_PowerSeries@1000000038(x@1 : Decimal) f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8,5],"tags":[638,635],"_links":{"self":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/181"}],"collection":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/comments?post=181"}],"version-history":[{"count":0,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/181\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/media?parent=181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/categories?post=181"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/tags?post=181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}