Matlab < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 15:45 Fr 26.01.2007 | Autor: | eps |
Aufgabe | Implementieren Sie die Dreitermrekursion mit dem algorithmus von miller. vergleichen sie diesen ansatz mit ihrem programm von blatt 6 und der geschlossenen lösung anhand der unten angegebenen iterationen.
[mm] R_{k+1}=-2R_{k}+3R_{k-1} [/mm] mit [mm] R_{0}=1 [/mm] und [mm] R_{-1}=1
[/mm]
[mm] R_{k+1}=-4R_{k}-3R_{k-1} [/mm] mit [mm] R_{0}=-0.1 [/mm] und [mm] R_{-1}=0.1
[/mm]
Geben Sie dazu die ersten 30 Iterationen für alle drei verfahren in einer Tabelle an. |
also etwas habe ich schon, es funktioniert aber leider nicht:
function f= MILLER(x0,K,n,a,b)
y(n)=1;
y(n+1)=0;
for k=n:-1:0
y(k-1)=(a*y(k)+y(k+1))/b;
end
f=x0*y(K)/y(0);
return
folgende fehlermeldung bekomme ich:
>> MILLER(1,30,100,2,3)
??? Attempted to access y(0); index must be a positive integer or logical.
Error in ==> MILLER at 7
y(k-1)=-(-a*y(k)-y(k+1))/b;
ich verstehe es nicht und brauch unbedingt hilfe!!!!!!! danke schonmal....
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Hallo,
das Problem ist simpel: In Matlab fangen die Arrays mit dem Index 1 an. Also musst du die Arrays so anlegen, dass alle Indizes um 1 höher sind.
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:35 Fr 26.01.2007 | Autor: | eps |
Das heisst also......
function f = Miller(x0,K,n,a,b)
y(n)=1;
y(n+1)=0;
for k=n:-1:0
y(k)= (a*y(k+1)+y(k+2))/b;
end
f=x0*y(K)/ y(1);
return
dann bekomm ich diese fehlermeldung:
>> Miller(-0.1, 30, 98, 4, -3)
??? Attempted to access y(100); index out of bounds because numel(y)=99.
Error in ==> Miller at 8
y(k)= (a*y(k+1)+y(k+2))/b;
muss ich statt y(n) jetzt y(n+1) schreiben?
und statt y(n+1) jetzt y(n+2) schreiben?
ich hab einiges ausprobiert, bekomm aber immer ne fehlermeldung ähnlich der oben.
sorry.... ich kenn mich nur ganz wenig mit matlab aus und hab da so meine probleme, brauche aber unbedingt volle punktzahl:-(
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 18:54 Fr 26.01.2007 | Autor: | ullim |
Hi,
> Das heisst also......
>
> function f = Miller(x0,K,n,a,b)
>
> y(n)=1;
> y(n+1)=0;
>
> for k=n:-1:0
>
In der FOR Schleife darf der Index auch nur bis 1 und nicht bis 0 laufen, dann läuft das Programm korrekt und endet mit 0.1 als Ergebnis.
mfg ullim
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 19:30 Fr 26.01.2007 | Autor: | eps |
....vielen Dank....!
und das ist korrekt????
>> Miller(-0.1, 30, 100, 4, -3)
ans =
0.1000
ich dachte, ich muss viiiieele werte rausbekommen und als graph darstellen....
aber vielleicht ist das auch der teil "...Blatt 6..."
auf jeden Fall danke ich recht herzlich für die schnelle hilfe:)
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 15:40 Sa 27.01.2007 | Autor: | eps |
>> Miller(1, 30, 100, 2, 3)
Miller:0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.74999 0.75004 0.74989 0.75034 0.74897 0.75309 0.74074 0.77778 0.66667
ans =
1
>> Miller(-0.1, 30, 100, 4, -3)
Miller:1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.5 -1.5 1.4999 -1.4998 1.4993 -1.4979 1.4938 -1.4815 1.4444 -1.3333
ans =
0.1000
stimmt das? die graphen sehen etwas seltsam aus......bitte um antwort und danke schonmal:)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:20 Mo 29.01.2007 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|