nullstellen aus dem gradient < Matlab < Mathe-Software < Mathe < Vorhilfe
|
hallo,
bevor ich noch länger suche...
muß aus einer spalte einer matrix, einen filter drübe rlegen und den gradient bestimmten...soweit so gut..ist elerdigt...jetzt soll ich die nullstellen rauslesen, da dort die maxismas liegen und sie in eine rmatrix ablegen!
bitte um hilfe!
lg
BessyResi
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:01 Mi 17.01.2007 | Autor: | Martin243 |
Hallo,
kannst du mal posten, wie du das gelöst hast? Mir ist nämlich nicht klar, in welcher Form jetzt die Gradienten vorliegen.
Allgemein findest du die Indizes mit der find-Funktion, in etwa so:
indizes = find(grad=0);
extrema = daten(indizes);
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:22 Mi 17.01.2007 | Autor: | BessyResi |
hallo martin,
phbr_filt = sgolayfilt(phbr, 3, 41);
ableitung_phbr = gradient(phbr_filt);
ichhabe folgendes problem:
nullstellen_phbr = zeros(ableitung_phbr');
nimmt er nicht, da zahlen nicht integer
legt matrix mit nullen ab, erstellt anscheinend auch vektoren mit lauter nullen
nullstellen_phbr = roots(ableitung_phbr');
will er auch ned, macht gar nichts
nimmt er nur, weil es kein polynom ist?????
roots müßte aber der richtige weg sein, oder?
hab auch schon max gesucht im phbr_filt...jedoch liest er nur das absolute maximum aus und ich bräuchte sämtliche maximas...evtl eine schleife mit intervallen schreiben? falls ja, wie geht das?
danke, mein held!
BessyResi
|
|
|
|
|
Hallo,
> phbr_filt = sgolayfilt(phbr, 3, 41);
> ableitung_phbr = gradient(phbr_filt);
Hier fängt es an! Du bekomst so nur die partielle Ableitung nach x. Du brauchst:
[ablX, ablY] = gradient(phbr_filt);
grad_betr = sqrt(ablX.^2 + ablY.^2);
Nun hast du für jeden Punkt den Gradientenbetrag. Im Idealfall könnten wir nach Nullen suchen, aber ich würde sagen, dass wir uns vielleicht einen kleinen Schwellwert setzen sollten, der auch reicht, denn eine Null zu finden wäre bei echten Meßdaten ein ziemliches Glück. Also (nur als Beispiel):
schwelle = 0.2;
extremaIdx = find(grad_betr < schwelle);
extremaIdx enthalten nun Indizes der Extrema (sind das alles Maxima?). Auf die Werte an diesen Stellen kannst du so zugreifen:
extrema = phbr_filt(extremaIdx);
> ichhabe folgendes problem:
> nullstellen_phbr = zeros(ableitung_phbr');
> nimmt er nicht, da zahlen nicht integer
> legt matrix mit nullen ab, erstellt anscheinend auch vektoren mit lauter nullen
Äääh, ganz richtig: zeros ist dazu da, Nullmatrizen zu erzeugen und nicht, Nullen zu suchen! Ist deine Hilfe-Funktion kaputt?
> nullstellen_phbr = roots(ableitung_phbr');
> will er auch ned, macht gar nichts
> nimmt er nur, weil es kein polynom ist?????
Genau!
> roots müßte aber der richtige weg sein, oder?
Nein! Du hast ja kein Polynom.
> hab auch schon max gesucht im phbr_filt...jedoch liest er nur das absolute maximum aus und ich bräuchte sämtliche maximas...evtl eine schleife mit intervallen schreiben? falls ja, wie geht das?
Es wäre möglich, für jeden Punkt zu schauen, ob alle Nachbarn kleiner sind. Aber du hast ja schon den Ansatz mit dem Gradienten.
> danke, mein held!
Wo ist hier so ein Rotwerd-Smiley??? Nur nicht zu vorschnell...
Gruß
Martin
|
|
|
|
|
hallo martin,
lebst du noch oder hat es dich schon weggeweht?
bei uns fängt es soeben an!
mein ergebnis:
??? Error using ==> gradient
Too many output arguments.
Error in ==> splinetest at 96
[ablX, ablY] = gradient (phbr_filt);
frag mich lansgam, wieso klappt seit montag nichts mehr?!
bin wohl doch blond?! (ist eine rhetorische frage)!!!
lg
BessyResi
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:02 Do 18.01.2007 | Autor: | BessyResi |
x ist aber nur eine laufvariable, d.h. sie zählt die messwerte nur durch!
kann das ein problem sein?
danke
|
|
|
|
|
Hallo,
> lebst du noch oder hat es dich schon weggeweht?
> bei uns fängt es soeben an!
Nach dem heftigen Regen waren das recht gemütliche 3 Stunden im stehenden Zug. Dann habe ich ein Taxi genommen.
> mein ergebnis:
> ??? Error using ==> gradient
> Too many output arguments.
> Error in ==> splinetest at 96
> [ablX, ablY] = gradient (phbr_filt);
Oh, Moment! Du nimmst den Gradienten nur über eine Spalte und nicht über die gesamte Matrix. Dann würde ich doch eher rechnen:
grad_betr = abs(gradient(phbr_filt));
Dann bekommst du für deine Spalte eine Spalte mit Gradientenbeträgen. Der Rest sollte gehen.
> frag mich lansgam, wieso klappt seit montag nichts mehr?!
> bin wohl doch blond?! (ist eine rhetorische frage)!!!
Hmmm... Ein Spiegel sollte da weiterhelfen.
Gruß
Martin
|
|
|
|