Drehen mit Rotationsmatrix < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 17:50 Do 28.05.2009 | Autor: | mascht |
Aufgabe 1 | Berechen Sie die nachfolgend definierte sinct-Funktion für die Teilmenge [-6pi, 6pi]x[-3pi, 3pi] des Definitionsbereichs der Funktion Bei dieser Funktion handelt es sich um eine ins zweidimensionale verallgemeinerte Form der sinc-Funktion des eindimensionalen Falls:
sinctd(p):= 1 .... x=0
sinctd(p):=sin(x)/x ...x!=0
wobei gilt: alle (x,y) = p element aus R²
Stellen Sie den Graph der berechneten sinctd-Funktion zwecks bessern visuellen Verständinsses der Funktion durch von MatLab zur Verfügung gestellte Darstellungsmethoden dar. |
Aufgabe 2 | Analog der sinctd-Funktion berechnen Sie nachfolgende Fensterfunktion w und visualisiren Sie diese mit den selben Methoden, die Sie für die Darstellung der sinctd-Funktion benutzt haben. Bei den Darstellungen dieser und aller folgender Funktionen sollen die Graphen der Funktion in getrennten Grafiken platziert werden.
wlh(p):= 1 ... |x| <=l und |y|<=h
wlh(p):= 0 ... sonst
wobei gilt: alle (x,y) = p element aus R², l,h element R fest
Die Fensterfunktion w ist ebenfalls für die Teilmenge [-6pi, 6pi]x[-3pi, 3pi] zu berechnen. Hierbei kann zB l=4,5pi und h=2,25pi gesetzt werden. Achtung - Variablen die Funkionen parametrisieren, sollten in Ihren MatLab-Skripts/Funkionen ebenfalls durch Variablen - und nich durch Konstanten - ausgedrückt werden. Bei den Abgabegesprächen kann zB die Berechnung mit anderen - von den hier angeführten Wertebelegungen abweichenden Werten - gefordert werden. |
Aufgabe 3 | Kombinieren Sie nun die sinctd-Funktion und Fensterfunktion w durch Produktbildung der Funktionswerte der Funktionen wie folgt:
sinctdlh(p):=wlh(p)sinctdt(p) alle (x,y) = p element aus R², l,h element R fest
Berechnen Sie wieder analog der vorangeggangen Funktion diese neue Funktion sinctdlh und stellen Sie diese wieder zusätzlich zu den anderen Darstellungen dar (Teilmenge/Parameter wie oben). |
Aufgabe 4 | Abschließend modifizieren wir nun unsere sinctdlh-Funkition, indem wir den Definitionsbereich unserer Funktion einer Rotation unterziehen. Dh durch Einführung dieser Rotation läßt sich die Ausarbeitungsrichtung der Sinusschwingungen der sinctd-Funktion durch den Rotationswinkels alpha festlegen.
Die gewünschte Rotation kann durch die Funktion rot_alpha beschrieben werden.
( cos alpha - sin alpha )
rot_alpha(p):=(x, y) ( sin alpha cos alpha ) alle(x,y)=p elemt R², alpha element R fest
Erweitert man die sinctdlh-Funktion um die vorgeschaltete Rotation des Definitionsbereich von sincdtlh, so gelant man zu nachfolgender Funktion sinctdlhalpha:
sinctdlhalpha(p):=wlh(rot_alpha(p))sinctdt(rot_alpha(p)) alle (x,y) = p element aus R², l,h, alpha element R fest.
Berechnen Sie in bewehrter Weise diese neue Funktion sinctdlhalpha und stellen Sie diese wieder zusätzlich zu den anderen Darstellungen dar(Teilemengen/Parameter wie oben). Achten Sie dabei drauf, dass die Größe der Matrix, die die Werte der Funktion aufnimmt, unabhängig von Rotationswinkels alpha immer die gleiche Größe aufweist. Diese ist immer so groß zu wählen, dass unter jedem beliebigen Rotationswinkel alpha alle Funktionswerte innerhalb des Fensters wlh- dh dort wo wlh(p=1 gilt - in der Matrix vollständig repräsentiert sind und die Anzahl der Matrixelemente mit Werten von 0 minimal sein soll. |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Lösung Aufgabe 1:
function A = sinctd( xmin,xmax,xsteps,ysteps )
% ymin und ymax werden nicht benötigt!
X=repmat(linspace(xmin,xmax,xsteps),ysteps,1);
% linspace erzeugt Vecotor mit xsteps zwischen xmin und xmax
% repmat erweitert die ausmaße matrix X mit ysteps
%noch zur Sicherheit falls irgendwo 0 ist
findNULL=find(X==0);
A(findNULL)=1;
A=sin(X)./X;
end
A = sinctd(-6*pi,6*pi,150,150);
figure, surf(A);
-------------------------------------------------------------------------------------
Lösung Aufgabe 2:
function B = w(xmin,xmax,xsteps,ymin,ymax,ysteps,l,h)
[X,Y] = meshgrid(linspace(xmin,xmax,xsteps), linspace(ymin,ymax,ysteps));
% linspace erzeugt einen Vecotor mit xsteps zwischen xmin und xmax bzw mit ysteps zwischen ymin und ymax
% meshgrid transformiert die beiden Vectoren in ein Array mit X Y
% abs(X) liefert den Betrag X
[mm] hoeher_l=find(abs(X)>l);
[/mm]
% find liefert alle Beträge von X die größer als l sind
[mm] hoeher_h=find(abs(Y)>h);
[/mm]
% find liefert alle Beträge von Y die größer als h sind
B=ones(ysteps,xsteps);
% erstellt eine matrix ysteps mal xsteps mit 1er
[mm] B(hoeher_l)=0;
[/mm]
% setzt alle werter über l auf 0
[mm] B(hoeher_h)=0;
[/mm]
% setzt alle werte über h auf 0
end
%w
B=w(-6*pi,6*pi,150,-3*pi,3*pi,150,4.5*pi,2.5*pi);
figure, surf(B);
-------------------------------------------------------------------------------------
Lösung Aufgabe 3:
function C = sinctdlh( xmin,xmax,xsteps,ymin,ymax,ysteps,l,h)
A=sinctd(xmin,xmax,xsteps,ysteps);
B=w(xmin,xmax,xsteps,ymin,ymax,ysteps,l,h);
C=B.*A;
end
C=sinctdlh(-6*pi,6*pi,150,-3*pi,3*pi,150,4.5*pi,2.25*pi);
figure, surf(C);
-------------------------------------------------------------------------------------
Versuch Aufgabe 4:
function D = sinctdalpha( xmin,xmax,xsteps,ymin,ymax,ysteps,alpha )
% Diagonale berechenen
phyt=sqrt((xmax-xmin)*(xmax-xmin)+(ymax-ymin)*(ymax-ymin));
% Überstehendes bei min max berechnen und neues min max berechnen
drueber=phyt-(xmax-xmin);
xmin=xmin-drueber/2;
xmax=xmax+drueber/2;
drueber=phyt-(ymax-ymin);
ymin=ymin-drueber/2;
ymax=ymax+drueber/2;
% linspace erzeugt einen Vecotor mit xsteps zwischen xmin und xmax bzw mit ysteps zwischen ymin und ymax
% meshgrid transformiert die beiden Vectoren in ein Array mit X Y
[X,Y] = meshgrid(linspace(xmin,xmax,xsteps), linspace(ymin,ymax,ysteps));
% drehen
TEMP=X*cos(alpha)-Y*sin(alpha);
% bearbeiten
nuller=find(TEMP==0);
TEMP(nuller)=1;
D=sin(TEMP)./TEMP;
D(nuller)=1;
end
function F = walpha(xmin,xmax,xsteps,ymin,ymax,ysteps,l,h,alpha)
% Diagonale berechenen
phyt=sqrt((xmax-xmin)*(xmax-xmin)+(ymax-ymin)*(ymax-ymin));
% Überstehendes bei min max berechnen und neues min max berechnen
drueber=phyt-(xmax-xmin);
xmin=xmin-drueber/2;
xmax=xmax+drueber/2;
drueber=phyt-(ymax-ymin);
ymin=ymin-drueber/2;
ymax=ymax+drueber/2;
% linspace erzeugt einen Vecotor mit xsteps zwischen xmin und xmax bzw mit ysteps zwischen ymin und ymax
% meshgrid transformiert die beiden Vectoren in ein Array mit X Y
[X,Y] = meshgrid(linspace(xmin,xmax,xsteps), linspace(ymin,ymax,ysteps));
% drehen
xdrueber=find(abs(X*cos(alpha)-Y*sin(alpha))>l);
ydrueber=find(abs(X*sin(alpha)+Y*cos(alpha))>h);
% bearbeiten
F=ones(ysteps,xsteps);
F(xdrueber)=0;
F(ydrueber)=0;
end
was jedoch laut übungsleiter nicht stimmt bzw zu aufwändig ist, jetzt ist die komplette übungsgruppe planlos und knapp vor der verzweiflung.
Ich wär für eine Lösung sehr dankbar!
lg
martin
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:20 Fr 05.06.2009 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|