<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mathematical Engineering - LRT &#187; Matlab Projekt</title>
	<atom:link href="http://me-lrt.de/kategorie/arbeiten-berichte/matlab-projekt-tutorial-aufgaben/feed" rel="self" type="application/rss+xml" />
	<link>http://me-lrt.de</link>
	<description>Lernhilfen für das Studium, Übungsaufgaben mit Musterlösungen, Zusammenfassungen und Skripte, auch für andere technische Studiengänge relevant</description>
	<lastBuildDate>Wed, 18 Aug 2010 13:53:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>023 &#8211; Summe von zwei abundanten Zahlen</title>
		<link>http://me-lrt.de/summe-zwei-abundante-zahlen</link>
		<comments>http://me-lrt.de/summe-zwei-abundante-zahlen#comments</comments>
		<pubDate>Tue, 20 Jul 2010 21:59:22 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Matlab Projekt]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=5455</guid>
		<description><![CDATA[Eine natürliche Zahl wird vollkommene Zahl genannt, wenn sie genauso groß ist wie die Summe ihrer positiven echten Teiler (also aller Teiler außer sich selbst). Zum Beispiel ist die Summe der echten Teiler von 28: 1+2+4+7+14=28, also ist 28 eine vollkommene Zahl.
Ist diese Summe der Teiler kleiner als die Zahl selbst, heißt die Zahl defizient. [...]]]></description>
			<content:encoded><![CDATA[<p>Eine natürliche Zahl wird vollkommene Zahl genannt, wenn sie genauso groß ist wie die Summe ihrer positiven echten Teiler (also aller Teiler außer sich selbst). Zum Beispiel ist die Summe der echten Teiler von 28: 1+2+4+7+14=28, also ist 28 eine vollkommene Zahl.</p>
<p>Ist diese Summe der Teiler kleiner als die Zahl selbst, heißt die Zahl defizient. Ist die Teilersumme dagegen größer, so spricht man von einer abundanten Zahl.</p>
<p>Da 12 die kleinste abundante Zahl ist, ist die kleinste Zahl, die als Summe von zwei abundanten Zahlen geschrieben werden kann, 24. Mit mathematischer Analysis kann gezeigt werden, dass alle natürlichen Zahlen, die größer als 28123 sind, als Summe von zwei abundanten Zahlen geschrieben werden können. Dieses obere Limit kann nicht weiter gedrückt werden, obwohl bekannt ist, dass die größte Zahl, die nicht als Summe von zwei abundanten Zahlen ausgedrückt werden kann, sehr viel kleiner ist (kleiner als 21000).</p>
<p>Finde die Summe aller positiven natürlichen Zahlen, die nicht als Summe zweier abundanten Zahlen ausgedrückt werden können.</p>
<h2>Lösung</h2>
<p>Hier könnte man zu einem Brute-Force Ansatz greifen, indem man alle abundanten Zahlen von 1 bis 21000 bestimmt, alle Kombinationen aus diesen bildet, die doppelten Kombinationen löscht, den Vektor sortiert und prüft, welche Zahlen nicht darin enthalten sind. Dies sind die Zahlen, die nicht als Summe von zwei abundanten Zahlen geschrieben werden können.</p>
<p>Da aber ungefähr jede dritte Zahl abundant ist, gibt es zwischen 1 und 21000 ca. 7000 abundante Zahlen, also 49000000 Kombinationen. Diese zu berechnen dauert relativ lange.</p>
<p>Statt dessen können wir von jeder betrachteten Zahl in einer Schleife die abundanten Zahlen abziehen und prüfen, ob bei der Subtraktion wieder eine abundante Zahl herauskommt. In diesem Fall kann die Zahl als Summe von zwei abundanten Zahlen ausgedrückt werden und wir können mit der nächsten Zahl weitermachen. So sparen wir sehr viel Rechenzeit, da die Schleifen vorzeitig mit break verlassen werden können.</p>
<p>Matlab-Code:</p>
<pre class="brush: matlabkey;">
function  euler023

    clear
    tic

    target = 21000;

    abundant = 0;
    for i = 1 : target
        if i &lt; divSum(i)
            abundant = [abundant i];
        end
    end
    abundant = abundant(2 : length(abundant));
    toc

    tic
    notPossible = 0;
    for i = 1 : target
        possible = 0;
        for a = 1 : length(abundant)
            comp = i - abundant(a);
            if comp &lt;= 0
                break
            end
            if find(abundant == comp) ~= 0
                possible = 1;
                break
            end
        end
        if possible == 0
            notPossible = [notPossible i];
        end
    end
    sum(notPossible)
    toc
end

function d = divisors(z)

    d = 1;
    for i = 2 : z / 2
        if mod(z, i) == 0
            d = [d i];
        end
    end
end

function s = divSum(z)

    s = sum(divisors(z));
end
</pre>
<p>Ergebnis: 4179871<br />
Rechenzeit: 49.913802 Sekunden</p>
<p>Es gibt elegantere Lösungen für diese Aufgabe!</p>
]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/summe-zwei-abundante-zahlen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>022 &#8211; Alphabetischer Wert von Namen aus einer Datei</title>
		<link>http://me-lrt.de/alphabetischer-wert-namen-datei</link>
		<comments>http://me-lrt.de/alphabetischer-wert-namen-datei#comments</comments>
		<pubDate>Tue, 20 Jul 2010 21:44:25 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Matlab Projekt]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=5451</guid>
		<description><![CDATA[Für diese Aufgabe wird die folgende Datei benötigt:
names-opt.txt
Diese 36K Textdatei enthält über 5000 Vornamen. Beginne damit, die Namen alphabetisch zu sortieren. Anschließend ermittle den alphabetischen Wert jedes Namens und multipliziere diesen mit der Position in der Liste, um die Punktzahl des Namens zu finden.
Beispiel:
Wenn die Liste alphabetisch sortiert ist, ist COLIN der 938ste Name. Der [...]]]></description>
			<content:encoded><![CDATA[<p>Für diese Aufgabe wird die folgende Datei benötigt:</p>
<p><a href="http://me-lrt.de/upload/names-opt.txt">names-opt.txt</a></p>
<p>Diese 36K Textdatei enthält über 5000 Vornamen. Beginne damit, die Namen alphabetisch zu sortieren. Anschließend ermittle den alphabetischen Wert jedes Namens und multipliziere diesen mit der Position in der Liste, um die Punktzahl des Namens zu finden.</p>
<p><strong>Beispiel</strong>:</p>
<p>Wenn die Liste alphabetisch sortiert ist, ist COLIN der 938ste Name. Der Wert des Namens ist <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-553d3833aaf08941630d6c6296a2e678.gif" alt="3+15+12+9+14=53" title="3+15+12+9+14=53" style="vertical-align: -1px; border: none;"/>. Die Punktzahl ist also <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-836be3bdfa3dcd2b3b713591e1af0d42.gif" alt="938\cdot 53 = 49714" title="938\cdot 53 = 49714" style="vertical-align: -1px; border: none;"/>.</p>
<p>Was ist die Summe aller Punktzahlen in der Datei?</p>
<h2>Lösung</h2>
<p>Durch die Verwendung der Matlab-Funktion &#8220;textread&#8221; können wir die lowlevel-Routinen umgehen und erhalten direkt einen Vektor mit Namen. Diesen zu sortieren kostet nur einen weiteren Befehl. Anschließend werden die Buchstabenwerte ermittelt, wobei jeweils 64 abgezogen werden muss, damit das A den Wert 1 bekommt.</p>
<p>Matlab-Code:</p>
<pre class="brush: matlabkey;">
function euler022

    clear
    tic

    names = textread('names-opt.txt', '%s');
    names = sort(names);

    n = length(names);
    res = 0;

    for i = 1 : n
        c = char(names(i));
        d = double(c) - ones(1, length(double(c))) * 64;
        res = res + sum(d) * i;
    end

    res
    toc
end
</pre>
<p>Ergebnis: 871198282<br />
Rechenzeit: 0.158471 Sekunden</p>
]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/alphabetischer-wert-namen-datei/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>021 &#8211; Befreundete Zahlen unter 10000</title>
		<link>http://me-lrt.de/befreundete-zahlen-10000</link>
		<comments>http://me-lrt.de/befreundete-zahlen-10000#comments</comments>
		<pubDate>Tue, 20 Jul 2010 21:32:20 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Matlab Projekt]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=5448</guid>
		<description><![CDATA[Sei  definiert als die Summe der echten Teiler von  (Zahlen kleiner als , durch die  ohne Rest teilbar ist).
Wenn  und  gilt mit , dann sind  und  ein Paar befreundeter Zahlen und  und  werden befreundete Zahlen genannt.
Beispiel:
Die echten Teiler von 220 sind 1, 2, 4, 5, 10, [...]]]></description>
			<content:encoded><![CDATA[<p>Sei <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-989e739eeb70800a4e5cda063eaf3d97.gif" alt="d\left(n\right)" title="d\left(n\right)" style="vertical-align: -4px; border: none;"/> definiert als die Summe der echten Teiler von <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-7b8b965ad4bca0e41ab51de7b31363a1.gif" alt="n" title="n" style="vertical-align: 0px; border: none;"/> (Zahlen kleiner als <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-7b8b965ad4bca0e41ab51de7b31363a1.gif" alt="n" title="n" style="vertical-align: 0px; border: none;"/>, durch die <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-7b8b965ad4bca0e41ab51de7b31363a1.gif" alt="n" title="n" style="vertical-align: 0px; border: none;"/> ohne Rest teilbar ist).</p>
<p>Wenn <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-19d7b8e55e34611d155720afc70b0314.gif" alt="d\left(a\right)=b" title="d\left(a\right)=b" style="vertical-align: -4px; border: none;"/> und <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-655529637585eccd0765827b3d4f9b4a.gif" alt="d\left(b\right)=a" title="d\left(b\right)=a" style="vertical-align: -4px; border: none;"/> gilt mit <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-c4e9ca5c895faa198b7e85a0c8e31977.gif" alt="a \ne b" title="a \ne b" style="vertical-align: -4px; border: none;"/>, dann sind <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-0cc175b9c0f1b6a831c399e269772661.gif" alt="a" title="a" style="vertical-align: 0px; border: none;"/> und <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-92eb5ffee6ae2fec3ad71c777531578f.gif" alt="b" title="b" style="vertical-align: 0px; border: none;"/> ein Paar befreundeter Zahlen und <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-0cc175b9c0f1b6a831c399e269772661.gif" alt="a" title="a" style="vertical-align: 0px; border: none;"/> und <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-92eb5ffee6ae2fec3ad71c777531578f.gif" alt="b" title="b" style="vertical-align: 0px; border: none;"/> werden befreundete Zahlen genannt.</p>
<p><strong>Beispiel</strong>:</p>
<p>Die echten Teiler von 220 sind 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 und 110. </p>
<p>Es ist also <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-e4b61919d6deda4b0e71cdf7b3249fd9.gif" alt="d\left(220\right)=284" title="d\left(220\right)=284" style="vertical-align: -4px; border: none;"/></p>
<p>Die echten Teiler von 284 sind 1, 2, 4, 71 und 142.</p>
<p>Es ist also <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-64f3620c55cc17b130b989faa00fd134.gif" alt="d\left(284\right)=220" title="d\left(284\right)=220" style="vertical-align: -4px; border: none;"/></p>
<p>Finde die Summe aller befreundeten Zahlen unter 10000!</p>
<h2>Lösung</h2>
<p>In einer Schleife werden alle Zahlen von 1 bis 10000 mit der Summe der Teiler der Summe der Teiler von sich selbst verglichen. Wenn diese gleich sind, muss noch ausgeschlossen werden, dass es sich um eine vollkommene Zahl handelt. Eine natürliche Zahl wird vollkommene Zahl  (auch perfekte Zahl) genannt, wenn sie genauso groß ist wie die Summe ihrer positiven echten Teiler.</p>
<p>Um die Teiler herauszufinden, implementieren wir eine eigene kleine Funktion.</p>
<p>Matlab-Code:</p>
<pre class="brush: matlabkey;">
function  euler021

    clear;
    tic

    amicable = 0;
    for i = 1 : 10000
        if i == divSum(divSum(i)) &amp;&amp; i ~= divSum(i)
            amicable = [amicable i];
        end
    end

    sum(amicable)
    toc
end

function d = divisors(z)

    d = 1;
    for i = 2 : z / 2
        if mod(z, i) == 0
            d = [d i];
        end
    end
end

function s = divSum(z)

    s = sum(divisors(z));
end
</pre>
<p>Ergebnis: 31626<br />
Rechenzeit: 4.948899 Sekunden</p>
]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/befreundete-zahlen-10000/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>020 &#8211; Fakultät und Quersumme</title>
		<link>http://me-lrt.de/fakultat-quersumme-factorial</link>
		<comments>http://me-lrt.de/fakultat-quersumme-factorial#comments</comments>
		<pubDate>Sat, 17 Jul 2010 13:50:22 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Matlab Projekt]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=5442</guid>
		<description><![CDATA[Die Fakultät einer Zahl ist definiert als
.
Was ist die Quersume der Fakultät von 100?
Lösung
Da Matlab nicht symbolisch rechnet, erhalten wir für die Fakultät von 100 nur eine Näherung. Die Eingabe

factorial(100)

ergibt als Ergebnis: 9.3326e+157
Dies hilft uns nicht bei der Berechnung der Quersumme, aber immerhin wissen wir so schon, wie viele Stellen das Ergebnis hat (nämlich 158).
Wir [...]]]></description>
			<content:encoded><![CDATA[<p>Die Fakultät einer Zahl ist definiert als</p>
<p><img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-b45ff7d302c5e52a07739f4ae66c7a22.gif" alt="n! := n \cdot \left(n &#8211; 1\right) \cdot \ldots \cdot 2 \cdot 1" title="n! := n \cdot \left(n &#8211; 1\right) \cdot \ldots \cdot 2 \cdot 1" style="vertical-align: -4px; border: none;"/>.</p>
<p>Was ist die Quersume der Fakultät von 100?</p>
<h2>Lösung</h2>
<p>Da Matlab nicht symbolisch rechnet, erhalten wir für die Fakultät von 100 nur eine Näherung. Die Eingabe</p>
<pre class="brush: matlabkey;">
factorial(100)
</pre>
<p>ergibt als Ergebnis: 9.3326e+157</p>
<p>Dies hilft uns nicht bei der Berechnung der Quersumme, aber immerhin wissen wir so schon, wie viele Stellen das Ergebnis hat (nämlich 158).</p>
<p>Wir erstellen daher einen Vektor mit Integerwerten von 0 bis 9 und der Länge 160, speichern in der letzten Stelle die 1 und lassen dann die Zahlen von 2 bis 100 mit einer eigenen Multiplikationsfunktion verarbeiten. Dabei wird der jeweilige Faktor mit jeder Stelle des Vektors multipliziert. Anschließend wird jeweils der Übertrag in die höheren Felder übernommen, so dass die Einträge des Vektors einstellig bleiben.</p>
<p><strong>Matlab-Code</strong>:</p>
<pre class="brush: matlabkey;">
function euler020

    clear;
    tic

    vecLength = 160;
    n = 100;

    f = zeros(1, vecLength);
    f(vecLength) = 1;

    for i = 2 : n
        f = multiply(f, i);
    end

    sum(f)
    toc
end

function m = multiply(f, g)

    vecLength = length(f);
    m = zeros(1, vecLength);
    for i = vecLength : -1 : 1
        if f(i) &gt; 0
            m(i) = m(i) + f(i) * g;
            j = i;
            while m(j) &gt; 9
                m(j - 1) = m(j - 1) + floor(m(j) / 10);
                m(j) = mod(m(j), 10);
                j = j - 1;
            end
        end
    end
end
</pre>
<p>Ergebnis: 648<br />
Rechenzeit: 0.003774 Sekunden</p>
]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/fakultat-quersumme-factorial/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>019 &#8211; Sonntage am 1. des Monats</title>
		<link>http://me-lrt.de/019-sonntage-am-1-des-monats</link>
		<comments>http://me-lrt.de/019-sonntage-am-1-des-monats#comments</comments>
		<pubDate>Wed, 24 Feb 2010 19:07:19 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Matlab Projekt]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=4739</guid>
		<description><![CDATA[Wie viele Sonntage sind im letzten Jahrhundert (1.1.1901 &#8211; 31.12.2000) auf den ersten Tag eines Monats gefallen?
Lösung
Möglichkeit 1
Wir wissen:
Der 1.1.1901 war ein Dienstag.
Die Monate eines Jahres haben [31 (x) 31 30 31 30 31 31 30 31 30 31] Tage.
(x) ist 28, oder bei einem Schaltjahr 29.
Jedes Jahr, das durch 4 teilbar ist, ist ein [...]]]></description>
			<content:encoded><![CDATA[<p>Wie viele Sonntage sind im letzten Jahrhundert (1.1.1901 &#8211; 31.12.2000) auf den ersten Tag eines Monats gefallen?</p>
<h2>Lösung</h2>
<h3>Möglichkeit 1</h3>
<p>Wir wissen:</p>
<p>Der 1.1.1901 war ein Dienstag.<br />
Die Monate eines Jahres haben [31 (x) 31 30 31 30 31 31 30 31 30 31] Tage.<br />
(x) ist 28, oder bei einem Schaltjahr 29.<br />
Jedes Jahr, das durch 4 teilbar ist, ist ein Schaltjahr, außer den Jahren die durch 100 teilbar sind, es sei denn sie sind auch durch 400 teilbar.</p>
<p>Matlab-Code:</p>
<pre class="brush: matlabkey;">
tag = 2; % Dienstag
monatTage0 = [31 28 31 30 31 30 31 31 30 31 30 31];
monatTage1 = [31 29 31 30 31 30 31 31 30 31 30 31];
schaltJahr = zeros(100, 1);

treffer = 0;

for jahr = 4 : 4 : 100
    schaltJahr(jahr) = 1;
end

for jahr = 1 : 100
    if schaltJahr(jahr) == 0
        for monat = 1 : 12
            if mod(tag, 7) == 0
                treffer = treffer + 1;
            end
            tag = mod(tag + monatTage0(monat), 7);
        end
    else
        for monat = 1 : 12
            if mod(tag, 7) == 0
                treffer = treffer + 1;
            end
            tag = mod(tag + monatTage0(monat), 7);
        end
    end
end

treffer
</pre>
<p>Ergebnis: 171<br />
Rechenzeit: 0.000573 Sekunden</p>
<h3>Möglichkeit 2</h3>
<p>Wir haben 100 Jahre zu je 12 Monaten, also 1200 Monate. Es gibt 7 Wochentage. Es fängt zwar nicht jeder siebte Monat mit einem Montag an, bei 100 Jahren stimmt diese Aussage aber statistisch in etwa. </p>
<p>1200 / 7 = 171.43</p>
<p>Abgerundet: 171</p>
]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/019-sonntage-am-1-des-monats/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>018 &#8211; Weg mit maximaler Summe in Dreieck</title>
		<link>http://me-lrt.de/018-weg-mit-maximaler-summe-in-dreieck</link>
		<comments>http://me-lrt.de/018-weg-mit-maximaler-summe-in-dreieck#comments</comments>
		<pubDate>Sat, 20 Feb 2010 16:55:03 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Matlab Projekt]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=4705</guid>
		<description><![CDATA[Wenn man an der Spitze des folgenden Dreiecks startet und entlang der angrenzenden Zahlen nach unten geht, dann ist der Weg mit der größten Summe 23:

3
7 4
2 4 6
8 5 9 3

3 + 7 + 4 + 9 = 23
Finde den Weg mit der größten Summe von der Spitze zur Basis des folgenden Dreiecks:

75
95 64
17 [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man an der Spitze des folgenden Dreiecks startet und entlang der angrenzenden Zahlen nach unten geht, dann ist der Weg mit der größten Summe 23:</p>
<div align="center">
3<br />
7 4<br />
2 4 6<br />
8 5 9 3
</div>
<p>3 + 7 + 4 + 9 = 23</p>
<p>Finde den Weg mit der größten Summe von der Spitze zur Basis des folgenden Dreiecks:</p>
<div align="center">
75<br />
95 64<br />
17 47 82<br />
18 35 87 10<br />
20 04 82 47 65<br />
19 01 23 75 03 34<br />
88 02 77 73 07 63 67<br />
99 65 04 28 06 16 70 92<br />
41 41 26 56 83 40 80 70 33<br />
41 48 72 33 47 32 37 16 94 29<br />
53 71 44 65 25 43 91 52 97 51 14<br />
70 11 33 28 77 73 17 78 39 68 17 57<br />
91 71 52 38 17 14 91 43 58 50 27 29 48<br />
63 66 04 68 89 53 67 30 73 16 69 87 40 31<br />
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23
</div>
<h2>Lösung</h2>
<h3>Möglichkeit 1</h3>
<p>Für den Startpunkt gibt es nur eine Möglichkeit. Von dort aus haben wir in jedem Schritt zwei Auswahlmöglichkeiten, daher ist die Anzahl der möglichen Wege 2<sup>14</sup> = 16384. Das sind nicht zu viele, um sie alle durchzutesten. Die einfachste Lösung ist daher wieder eine brute-force Variante. Dazu könnte man einen rekursiven Algorithmus schreiben, oder einfach 14 for-Schleifen ineinander schachteln.</p>
<p>Matlab-Code:</p>
<pre class="brush: matlabkey;">
d =[75 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    95 64 00 00 00 00 00 00 00 00 00 00 00 00 00
    17 47 82 00 00 00 00 00 00 00 00 00 00 00 00
    18 35 87 10 00 00 00 00 00 00 00 00 00 00 00
    20 04 82 47 65 00 00 00 00 00 00 00 00 00 00
    19 01 23 75 03 34 00 00 00 00 00 00 00 00 00
    88 02 77 73 07 63 67 00 00 00 00 00 00 00 00
    99 65 04 28 06 16 70 92 00 00 00 00 00 00 00
    41 41 26 56 83 40 80 70 33 00 00 00 00 00 00
    41 48 72 33 47 32 37 16 94 29 00 00 00 00 00
    53 71 44 65 25 43 91 52 97 51 14 00 00 00 00
    70 11 33 28 77 73 17 78 39 68 17 57 00 00 00
    91 71 52 38 17 14 91 43 58 50 27 29 48 00 00
    63 66 04 68 89 53 67 30 73 16 69 87 40 31 00
    04 62 98 27 23 09 70 98 73 93 38 53 60 04 23];

maxWeg = 1;
aktWeg = d(1,1);

for s2 = 1 : 2
    for s3 = s2 : s2 + 1
        for s4 = s3 : s3 + 1
            for s5 = s4 : s4 + 1
                for s6 = s5 : s5 + 1
                    for s7 = s6 : s6 + 1
                        for s8 = s7 : s7 + 1
                            for s9 = s8 : s8 + 1
                                for s10 = s9 : s9 + 1
                                    for s11 = s10 : s10 + 1
                                        for s12 = s11 : s11 + 1
                                            for s13 = s12 : s12 + 1
                                                for s14 = s13 : s13 + 1
                                                    for s15 = s14 : s14 + 1
aktWeg = d(1,1) + d(2,s2) + d(3,s3) + d(4,s4) + d(5,s5) + d(6,s6)...
      + d(7,s7) + d(8,s8) + d(9,s9) + d(10,s10) + d(11,s11) + d(12,s12)...
      + d(13,s13) + d(14,s14) + d(15,s15);
  if aktWeg &gt; maxWeg
      maxWeg = aktWeg;
  end
                                                    end
                                                end
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end
    end
end
</pre>
<p>Ergebnis: 1074<br />
Rechenzeit: 0.005123 Sekunden</p>
<h3>Möglichkeit 2</h3>
<p>Die andere Möglichkeit besteht darin, logisch an das Problem heranzugehen. Wir betrachten folgendes Beispieldreieck:</p>
<p><img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-148ee557fb51111fad638b7b6183e75d.gif" alt="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} 2 &#038; 4 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 7 &#038; 7 &#038; 2 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 8 &#038; 5 &#038; 4 &#038; 1 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} " title="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} 2 &#038; 4 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 7 &#038; 7 &#038; 2 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 8 &#038; 5 &#038; 4 &#038; 1 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} " style="vertical-align: -46px; border: none;"/></p>
<p>In der letzten Zeile gibt es jeweils keine Entscheidungsmöglichkeit mehr. Wenn wir dort angekommen sind, steht fest, wie lang der Weg ist. In der vorletzten Zeile gibt es jeweils zwei Möglichkeiten. Der Algorithmus soll jeweils die bessere benutzen. Wir können also zu jedem Element der vorletzten Zeile jeweils das bessere der beiden möglichen Nachfolger addieren:</p>
<p><img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-b3d01b66a6306c0a3b6235766f1131a1.gif" alt="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} 2 &#038; 4 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 7 &#038; 7 &#038; 2 \\ \end{array} } \\ {\begin{array}{*{20}{c}} {8 + \max \left\{ {1,4} \right\}} &#038; {5 + \max \left\{ {4,2} \right\}} &#038; {4 + \max \left\{ {2,7} \right\}} &#038; {1 + \max \left\{ {7,5} \right\}} \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array}" title="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} 2 &#038; 4 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 7 &#038; 7 &#038; 2 \\ \end{array} } \\ {\begin{array}{*{20}{c}} {8 + \max \left\{ {1,4} \right\}} &#038; {5 + \max \left\{ {4,2} \right\}} &#038; {4 + \max \left\{ {2,7} \right\}} &#038; {1 + \max \left\{ {7,5} \right\}} \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array}" style="vertical-align: -46px; border: none;"/></p>
<p>Daraus wird:</p>
<p><img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-8f52dbfb14483acf36558f3e5f284d94.gif" alt="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} 2 &#038; 4 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 7 &#038; 7 &#038; 2 \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array}" title="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} 2 &#038; 4 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 7 &#038; 7 &#038; 2 \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array}" style="vertical-align: -46px; border: none;"/></p>
<p>Wir fahren fort mit der dritten Zeile:</p>
<p><img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-dd9829d4c1fba148ba95a77449d20c3a.gif" alt="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} 2 &#038; 4 \\ \end{array} } \\ {\begin{array}{*{20}{c}} {7 + \max \left\{ {12,9} \right\}} &#038; {7 + \max \left\{ {9,11} \right\}} &#038; {2 + \max \left\{ {11,8} \right\}} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} " title="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} 2 &#038; 4 \\ \end{array} } \\ {\begin{array}{*{20}{c}} {7 + \max \left\{ {12,9} \right\}} &#038; {7 + \max \left\{ {9,11} \right\}} &#038; {2 + \max \left\{ {11,8} \right\}} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} " style="vertical-align: -46px; border: none;"/></p>
<p>Daraus wird:</p>
<p><img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-9fffa31dec0c6a3129d9b2a6237546ea.gif" alt="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} 2 &#038; 4 \\ \end{array} } \\ {\begin{array}{*{20}{c}} {19} &#038; {18} &#038; {13} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} " title="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} 2 &#038; 4 \\ \end{array} } \\ {\begin{array}{*{20}{c}} {19} &#038; {18} &#038; {13} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} " style="vertical-align: -46px; border: none;"/></p>
<p>Die zweite Zeile:</p>
<p><img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-d0f52f20b0bde5dfdb3b46011c365221.gif" alt="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} {2 + \max \left\{ {19,18} \right\}} &#038; {4 + \max \left\{ {18,13} \right\}} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {19} &#038; {18} &#038; {13} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} \quad \Rightarrow \quad \begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} {21} &#038; {22} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {19} &#038; {18} &#038; {13} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} " title="\begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} {2 + \max \left\{ {19,18} \right\}} &#038; {4 + \max \left\{ {18,13} \right\}} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {19} &#038; {18} &#038; {13} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} \quad \Rightarrow \quad \begin{array}{*{20}{c}} 5 \\ {\begin{array}{*{20}{c}} {21} &#038; {22} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {19} &#038; {18} &#038; {13} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} " style="vertical-align: -46px; border: none;"/></p>
<p>Und zuletzt die erste Zeile:</p>
<p><img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-30d4b125829f117119dcbd505aa337fc.gif" alt="\begin{array}{*{20}{c}} {5 + \max \left\{ {21,22} \right\}} \\ {\begin{array}{*{20}{c}} {21} &#038; {22} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {19} &#038; {18} &#038; {13} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} \quad \Rightarrow \quad \begin{array}{*{20}{c}} {27} \\ {\begin{array}{*{20}{c}} {21} &#038; {22} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {19} &#038; {18} &#038; {13} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array}" title="\begin{array}{*{20}{c}} {5 + \max \left\{ {21,22} \right\}} \\ {\begin{array}{*{20}{c}} {21} &#038; {22} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {19} &#038; {18} &#038; {13} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array} \quad \Rightarrow \quad \begin{array}{*{20}{c}} {27} \\ {\begin{array}{*{20}{c}} {21} &#038; {22} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {19} &#038; {18} &#038; {13} \\ \end{array} } \\ {\begin{array}{*{20}{c}} {12} &#038; 9 &#038; {11} &#038; 8 \\ \end{array} } \\ {\begin{array}{*{20}{c}} 1 &#038; 4 &#038; 2 &#038; 7 &#038; 5 \\ \end{array} } \\ \end{array}" style="vertical-align: -46px; border: none;"/></p>
<p>Das Ergebnis ist 27.</p>
<p>Matlab-Code:</p>
<pre class="brush: matlabkey;">
d = zeros(15);
d(1,1) = 75;
d(2,1:2) = [95 64];
d(3,1:3) = [17 47 82];
d(4,1:4) = [18 35 87 10];
d(5,1:5) = [20 04 82 47 65];
d(6,1:6) = [19 01 23 75 03 34];
d(7,1:7) = [88 02 77 73 07 63 67];
d(8,1:8) = [99 65 04 28 06 16 70 92];
d(9,1:9) = [41 41 26 56 83 40 80 70 33];
d(10,1:10) = [41 48 72 33 47 32 37 16 94 29];
d(11,1:11) = [53 71 44 65 25 43 91 52 97 51 14];
d(12,1:12) = [70 11 33 28 77 73 17 78 39 68 17 57];
d(13,1:13) = [91 71 52 38 17 14 91 43 58 50 27 29 48];
d(14,1:14) = [63 66 04 68 89 53 67 30 73 16 69 87 40 31];
d(15,1:15) = [04 62 98 27 23 09 70 98 73 93 38 53 60 04 23];

opt = d;
for k = 14 : -1 : 1
    for p = 1 : k
    	opt(k, p) = opt(k, p) + max(opt(k + 1, p), opt(k + 1, p + 1));
    end
end

disp(opt(1,1))
</pre>
<p>Rechenzeit: 0.000105 Sekunden, also Faktor 50 schneller als die erste Version.</p>
]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/018-weg-mit-maximaler-summe-in-dreieck/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>017 &#8211; Anzahl der Buchstaben der Zahlen 1 bis 1000</title>
		<link>http://me-lrt.de/017-anzahl-der-buchstaben-der-zahlen-1-bis-1000</link>
		<comments>http://me-lrt.de/017-anzahl-der-buchstaben-der-zahlen-1-bis-1000#comments</comments>
		<pubDate>Sat, 20 Feb 2010 14:14:46 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Matlab Projekt]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=4701</guid>
		<description><![CDATA[Wenn man die englischen Zahlen von 1 bis 5 als Wörter schreibt, erhält man:
one two three four five
Die Anzahl der Buchstaben beträgt 3 + 3 + 5 + 4 + 4 = 19.
Wie viele Buchstaben werden benötigt, um die Zahlen von 1 bis 1000 (einschließlich) aufzuschreiben?
Hinweise:
Leerzeichen werden nicht gezählt.
Beispiele: 342 (three hundred and forty-two) enthält [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man die englischen Zahlen von 1 bis 5 als Wörter schreibt, erhält man:</p>
<p>one two three four five</p>
<p>Die Anzahl der Buchstaben beträgt 3 + 3 + 5 + 4 + 4 = 19.</p>
<p>Wie viele Buchstaben werden benötigt, um die Zahlen von 1 bis 1000 (einschließlich) aufzuschreiben?</p>
<p><strong>Hinweise</strong>:<br />
Leerzeichen werden nicht gezählt.<br />
Beispiele: 342 (three hundred and forty-two) enthält 23 Buchstaben und 115 (one hundred and fifteen) enthält 20 Buchstaben.</p>
<h2>Lösung</h2>
<p>Es werden zunächst die Anzahlen der Buchstaben der Zahlen 1 bis 19 festgelegt. Die anderen Zahlen werden kombiniert (siehe Kommentare im Programmtext).</p>
<p>Matlab-Code:</p>
<pre class="brush: matlabkey;">
z = zeros(1000, 1);

% Zahlen von 1 bis 19 manuell:
z(1:19) = [3, 3, 5, 4, 4, 3, 5, 5, 4, 3, 6, 6, 8, 8, 7, 7, 9, 8, 8];

% erste Ziffer von Zahlen 20 bis 99:
z(20:39) = 6;
z(40:69) = 5;
z(70:79) = 7;
z(80:99) = 6;

% zweite Ziffer von Zahlen 20 bis 99:
for d = 2 : 9
    for e = 1 : 9
        z(10 * d + e) = z(10 * d + e) + z(e);
    end
end

% erste Ziffer der Zahlen über 100
for h = 1 : 9
    z(100 * h : 100 * (h + 1) - 1) = z(h);
end

% &quot;hundret and&quot;:
z(100:999) = z(100:999) + 10;

% kein &quot;and&quot; für Vielfache von 100:
for h = 1 : 9
    z(100 * h) = z(100 * h) - 3;
end

% zweite und dritte Ziffer:
for h = 1 : 9
    z(100*h +1 : 100*(h+1) -1) = z(100*h +1 : 100*(h+1) - 1) + z(1 : 99);
end

% 1000:
z(1000) = 11;

summe = sum(z)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/017-anzahl-der-buchstaben-der-zahlen-1-bis-1000/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>016 &#8211; Quersumme von 2^1000</title>
		<link>http://me-lrt.de/quersumme-zweierpotenz</link>
		<comments>http://me-lrt.de/quersumme-zweierpotenz#comments</comments>
		<pubDate>Thu, 18 Feb 2010 15:41:59 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Matlab Projekt]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=4662</guid>
		<description><![CDATA[Es ist 215 = 32768 und die Quersumme ist 3+2+7+6+8 = 26.
Was ist die Quersumme von 21000?
Lösung
Da Matlab nicht von sich aus ausreichend genau mit so großen Zahlen zurechtkommt, müssen wir uns selber eine &#8220;Zahl&#8221; programmieren.
Idee:
Statt einer Zahl benutzen wir einen Vektor vec, dessen Elemente vec(i) für die Ziffern stehen. Wir brauchen 302 Ziffern (Länge [...]]]></description>
			<content:encoded><![CDATA[<p>Es ist 2<sup>15</sup> = 32768 und die Quersumme ist 3+2+7+6+8 = 26.</p>
<p>Was ist die Quersumme von 2<sup>1000</sup>?</p>
<h2>Lösung</h2>
<p>Da Matlab nicht von sich aus ausreichend genau mit so großen Zahlen zurechtkommt, müssen wir uns selber eine &#8220;Zahl&#8221; programmieren.</p>
<p><strong>Idee</strong>:</p>
<p>Statt einer Zahl benutzen wir einen Vektor vec, dessen Elemente vec(i) für die Ziffern stehen. Wir brauchen 302 Ziffern (Länge des Vektors). Im ersten Schritt setzen wir die erste Stelle von vec auf 1. Dann beginnen wir eine Schleife, in der in jedem Schritt der gesamte Vektor mit 2 multipliziert wird. Wird dabei eine der &#8220;Ziffern&#8221; größer als 10, muss eine 1 übertragen werden zur nächsten Ziffer.</p>
<p>Beispiel mit kürzerem Vektor:</p>
<p>Start:</p>
<p>vec = 1, 0, 0, 0</p>
<p>Multiplikation mit 2:</p>
<p>vec = 2, 0, 0, 0</p>
<p>keine Ziffer ist größer als 10. Multiplikation mit 2:</p>
<p>vec = 4, 0, 0, 0</p>
<p>keine Ziffer ist größer als 10. Multiplikation mit 2:</p>
<p>vec = 8, 0, 0, 0</p>
<p>keine Ziffer ist größer als 10. Multiplikation mit 2:</p>
<p>vec = 16, 0, 0, 0</p>
<p>erste Ziffer ist größer als 10, daher Übertrag:</p>
<p>vec = 6, 1, 0, 0</p>
<p>Multiplikation mit 2:</p>
<p>vec = 12, 2, 0, 0</p>
<p>erste Ziffer ist größer als 10, daher Übertrag:</p>
<p>vec = 2, 3, 0, 0</p>
<p>Der aktuelle Vektor stellt also die Zahl 32 dar. Die Multiplikation mit 2 führen wir 1000 mal durch. Anschließend summieren wir die Vektorelemente auf.</p>
<p>Matlab-Code:</p>
<pre class="brush: matlabkey;">
vec = zeros(1,302);
vec(1) = 1;

for i = 1 : 1000
    vec = vec .* 2;
    for j = 1 : 301
        if vec(j) &gt;= 10
            vec(j) = vec(j) - 10;
            vec(j + 1) = vec(j + 1) + 1;
        end
    end
end

summe = 0;
for j = 1 : 302
    summe = summe + vec(j);
end

summe
</pre>
<p>Ergebnis: 1366<br />
Rechenzeit: 0.004519 Sekunden</p>
]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/quersumme-zweierpotenz/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>015 &#8211; Anzahl der möglichen Wege im Gitter</title>
		<link>http://me-lrt.de/015-anzahl-der-moglichen-wege-im-gitter</link>
		<comments>http://me-lrt.de/015-anzahl-der-moglichen-wege-im-gitter#comments</comments>
		<pubDate>Thu, 18 Feb 2010 14:39:51 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Matlab Projekt]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=4659</guid>
		<description><![CDATA[Startet man in der oberen linken Ecke eines 2&#215;2 Gitters, gibt es 6 Wege (ohne in die falsche Richtung zu gehen) zur Ecke unten rechts.

Wie viele Wege gibt es in einem 20&#215;20 Gitter?
Lösung
Da man nicht in die falsche Richtung gehen darf, muss jeder Weg 20 Bewegungen nach rechts und 20 Bewegungen nach unten enthalten.
Gesucht ist [...]]]></description>
			<content:encoded><![CDATA[<p>Startet man in der oberen linken Ecke eines 2&#215;2 Gitters, gibt es 6 Wege (ohne in die falsche Richtung zu gehen) zur Ecke unten rechts.</p>
<p><img src="http://me-lrt.de/img/euler-15.PNG" alt="Anzahl der möglichen Wege im Gitter" /></p>
<p>Wie viele Wege gibt es in einem 20&#215;20 Gitter?</p>
<h2>Lösung</h2>
<p>Da man nicht in die falsche Richtung gehen darf, muss jeder Weg 20 Bewegungen nach rechts und 20 Bewegungen nach unten enthalten.</p>
<p>Gesucht ist daher die Anzahl der Permutationen dieser Bewegungen. Bei einem 2&#215;2 Gitter lässt sich dies leicht aufschreiben:</p>
<p>0: nach rechts<br />
1: nach unten</p>
<p>mögliche Wege:</p>
<p>0011<br />
0101<br />
0110<br />
1001<br />
1010<br />
1100</p>
<p>also 6 Möglichkeiten.</p>
<p>Die Anzahl der Permutationen lässt sich mit dem <strong>Binomialkoeffizienten</strong> berechnen:</p>
<p><img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-e411ea1bc3cf67c8e4e6b6b809a452b6.gif" alt="N = \left( {\begin{array}{*{20}{c}}<br />
   w  \\<br />
   r  \\<br />
 \end{array} } \right) = \frac{{w!}}<br />
{{r!\left( {w-r} \right)!}}" title="N = \left( {\begin{array}{*{20}{c}}<br />
   w  \\<br />
   r  \\<br />
 \end{array} } \right) = \frac{{w!}}<br />
{{r!\left( {w-r} \right)!}}" style="vertical-align: -17px; border: none;"/></p>
<p>Dabei ist <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-f1290186a5d0b1ceab27f4e77c0c5d68.gif" alt="w" title="w" style="vertical-align: 0px; border: none;"/> die Anzahl der zurückgelegten Wegstücke und <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-4b43b0aee35624cd95b910189b3dc231.gif" alt="r" title="r" style="vertical-align: 0px; border: none;"/> die Anzahl der Wege nach rechts. Es ist offensichtlich die Anzahl der nötigen Wegstücke das doppelte der Kantenlänge <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-8ce4b16b22b58894aa86c421e8759df3.gif" alt="k" title="k" style="vertical-align: 0px; border: none;"/>. Die Wegstücke nach rechts sind genau die Kantenlänge:</p>
<p><img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-3ca83e8074e1241d88ad0657b540e08c.gif" alt="N = \left( {\begin{array}{*{20}{c}}<br />
   w  \\<br />
   r  \\<br />
 \end{array} } \right) = \frac{{w!}}<br />
{{r!\left( {w-r} \right)!}} = \left( {\begin{array}{*{20}{c}}<br />
   {2k}  \\<br />
   k  \\<br />
 \end{array} } \right) = \frac{{\left( {2k} \right)!}}<br />
{{{{\left( {k!} \right)}^2}}}" title="N = \left( {\begin{array}{*{20}{c}}<br />
   w  \\<br />
   r  \\<br />
 \end{array} } \right) = \frac{{w!}}<br />
{{r!\left( {w-r} \right)!}} = \left( {\begin{array}{*{20}{c}}<br />
   {2k}  \\<br />
   k  \\<br />
 \end{array} } \right) = \frac{{\left( {2k} \right)!}}<br />
{{{{\left( {k!} \right)}^2}}}" style="vertical-align: -17px; border: none;"/></p>
<p>Dies ist eine Zeile in Matlab:</p>
<pre class="brush: matlabkey;">
factorial(40)/(factorial(20)*factorial(20))
</pre>
<p>Ergebnis: 137846528820</p>
]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/015-anzahl-der-moglichen-wege-im-gitter/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>014 &#8211; Collatz-Problem und Zahlenfolgen</title>
		<link>http://me-lrt.de/014-collatz-problem-und-zahlenfolgen</link>
		<comments>http://me-lrt.de/014-collatz-problem-und-zahlenfolgen#comments</comments>
		<pubDate>Thu, 18 Feb 2010 13:51:38 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Matlab Projekt]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=4656</guid>
		<description><![CDATA[Das Collatz-Problem, auch als (3n  + 1)-Vermutung oder Syracuse-Algorithmus bezeichnet, ist ein ungelöstes mathematisches  Problem, das 1937 von Lothar Collatz entdeckt wurde. Bei dem Problem geht es um Zahlenfolgen, die nach einem einfachen Bildungsgesetz konstruiert werden:
Beginne mit einer natürlichen Zahl n. Ist n gerade, so nimm als nächstes n / 2. Ist n [...]]]></description>
			<content:encoded><![CDATA[<p>Das Collatz-Problem, auch als (3n  + 1)-Vermutung oder Syracuse-Algorithmus bezeichnet, ist ein ungelöstes mathematisches  Problem, das 1937 von Lothar Collatz entdeckt wurde. Bei dem Problem geht es um Zahlenfolgen, die nach einem einfachen Bildungsgesetz konstruiert werden:</p>
<p>Beginne mit einer natürlichen Zahl n. Ist n gerade, so nimm als nächstes n / 2. Ist n ungerade, so nimm als nächstes 3n + 1.</p>
<p>Erstaunlicherweise endete die Folge bisher immer mit &#8230;, 4, 2, 1 – egal welche Startzahl man probiert hat. Die Collatz-Vermutung lautet: Jede so konstruierte Zahlenfolge endet im Zykel 4,2,1 egal, mit welcher natürlichen Zahl man beginnt. </p>
<p><strong>Beispiel</strong>: n = 13</p>
<p>Es resultiert die Folge: 13, 40, 20, 10, 5, 16, 8, 4, 2, 1</p>
<p>Wenn wir mit 13 anfangen, erhalten wir eine Folge mit 10 Gliedern. Aus welcher Startzahl n unter einer Millionen folgt die längste Collatz-Kette?</p>
<h2>Lösung</h2>
<p>Es werden alle Zahlen von 1 bis 1000000 auf die Länge ihrer Collatz-Kette geprüft:</p>
<pre class="brush: matlabkey;">
max = [1 1];

for it = 1 : 1000000
    coll = it;
    count = 1;
    while coll ~= 1
        if mod(coll, 2) == 0
            coll = coll / 2;
        else
            coll = coll * 3 + 1;
        end
        count = count + 1;
    end
    if count &gt; max(1)
        max(1) = count;
        max(2) = it;
    end
end

max
</pre>
<p>Ergebnis: Länge 525 für n = 837799<br />
Rechenzeit: 11.141164 Sekunden</p>
<h3>Verbesserungen</h3>
<p>Wir müssen die Zahlen <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-7b774effe4a349c6dd82ad4f4f21d34c.gif" alt="u" title="u" style="vertical-align: 0px; border: none;"/> von 1 bis 500000 nicht testen, da es jeweils ein <img src="http://me-lrt.de/wp-content/ql-cache/quicklatex-560799ac03a986f70423a4dda5aaa0a7.gif" alt="n=2u" title="n=2u" style="vertical-align: 0px; border: none;"/> gibt, das zu der gleichen Kette führt, nur mit einem zusätzlichen Glied vorweg.<br />
Wir müssen außerdem nur die ungeraden Zahlen testen, da die geraden Zahlen in der oberen Hälfte jeweils das Folgeglied einer ungeraden Zahl in der ersten Hälfte sind.</p>
<p>Verbesserter Algorithmus:</p>
<pre class="brush: matlabkey;">
max = [1 1];

for it = 500001 : 2 : 1000000
    coll = it;
    count = 1;
    while coll ~= 1
        if mod(coll, 2) == 0
            coll = coll / 2;
        else
            coll = coll * 3 + 1;
        end
        count = count + 1;
    end
    if count &gt; max(1)
        max(1) = count;
        max(2) = it;
    end
end

max
</pre>
<p>Rechenzeit: 3.036126 Sekunden</p>
]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/014-collatz-problem-und-zahlenfolgen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
