WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Fehlermeldung bei implementierter Funktion

 

blaueente

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2019, 17:11     Titel: Fehlermeldung bei implementierter Funktion
  Antworten mit Zitat      
Moin,
Ich habe eine Formel implementiert und wenn ich die Formle verwenden möchte,kommt immer die Fehlermeldung Matrix-Dimension must agree.
Ich habe schon ./ und .* durch / und * ersetzt aber es kommt dann immernoch die gleiche Fehlermeldung. Wäre super wenn mir jemand helfen mag und mir zeigt wo mein Fehler ist. Smile

Vielen Dank und einen schönen ersten Advent noch!
lg

Code:
%
function S = SignalMap(N,d,beta)


k = -(N-1)/2 : (N-1)/2;

theta = linspace(0,2*pi,360);
r = linspace(0,199,200);
S = zeros(360,200);


for n = 1:N
    x = sqrt(((r.*cos(theta)-k(n).*d).*(r.*cos(theta)-k(n).*d))+(r.*sin(theta).*(r.*sin(theta))));
    S = S + sin((x+k(n).*beta)./pi);

end

 


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2019, 17:50     Titel:
  Antworten mit Zitat      
Hallo,

bei Funktionen bitte immer den versuchten Aufruf mit angeben.

Eines der Probleme: du hast 360 theta-Werte und 200 r-Werte. Was soll r.*sin(theta) dann werden? Falls eine 360x200-Matrix aller Kombinationen: dann musst du r transponieren.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
blaueente

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2019, 18:05     Titel:
  Antworten mit Zitat      
Danke für deine Antowrt.
Es geht darum die Fomel des Bildes zu implementieren und S in Polarkoordinaten anzeigen zu lassen.
[img] https://www.bilder-upload.eu/bild-ebb97c-1575219687.jpg.html [/img]

Nun habe ich r transponiert und nun kommt die Fehlermeldung nicht mehr. Nun habe ich aber die gleiche Fehlermeldung in der Zeile S = S+sin(...

Hier ist einmal mein Aufruf der Funktion:
Code:

%single transducer ;

N = 1;
d = 0.5;
beta = 20;
S = SignalMap(N,d,beta);
S = abs(S);
figure(1)
polar(theta,-S/max(S));
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2019, 18:53     Titel:
  Antworten mit Zitat      
Hallo,

dann schau dir doch die Dimensionen der beteiligten Variablen an. Vielleicht noch etwas / anders transponieren?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
blaueente

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2019, 19:56     Titel:
  Antworten mit Zitat      
Super vielen Dank für deine Hilfe! Ich habe x noch transponiert und nun klappt es. Smile

Leider habe ich nun das Problem das beim verwenden von Polar die Fehlermeldung kommt das theta und rho (bei mir abs(S)) nicht die selbe Größe haben.
Ich weiß das theta ein Vektor von 0 bis 2pi mit 360 Werten ist und S eine Matrix der Größe 360x200.
Ich habe mir die Werte von S angeguckt und gesehen das jede der 360 Zeilen die gleichen Werte enthält. Dann kam ich auf die Idee nur eine Zeile mit den 200 Werten zu verwenden.
Ich habe herausgefunden das man S(1,: ) verwendet um nur die erste Zeile einer Matrix zu benutzen.
Wenn ich das nun bei meinen Befehl polar(theta, abs(S(1,: ))) einfüge kommt die Fehlermeldung immer noch.
Vielleicht hat ja jemand eine Idee und kann mir nochmal helfen?

Vielen Dank!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2019, 20:26     Titel:
  Antworten mit Zitat      
Hallo,

bitte poste deinen Code und kommentiere ihn ggf. Das ist viel leichter nachzuvollziehen als wortreiche Erklärungen.
Es klngt so, als ob repmat helfen könnte, die Variablen auf die gleiche Größe zu bringen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
blaueente

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2019, 21:02     Titel:
  Antworten mit Zitat      
Hier ist einmal der Code:

Code:

N = 1;
%wähle d und beta willkürlich
d = 0.5;
beta = 20;
S = SignalMap(N,d,beta);

figure(1)
%Ich möchte gerne S im Polarkoordinatensystem plotten
polar(theta,abs(S(1,:)));

 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2019, 22:01     Titel:
  Antworten mit Zitat      
Hallo,

und was ist der aktuelle Stand deiner Funktion?
Was sind die Dimensionen von theta und vor allem S? Wenn S 360x200 ist wie von dir angedeutet, dann wird es die Fehlermeldung so nicht geben.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
blaueente

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2019, 23:03     Titel:
  Antworten mit Zitat      
Das ist meine korrigierte Funktion.

Code:

function S = SignalMap(N,d,beta)

%Vektor k erstellen um n durch k(n) zu ersetzen da die Schleife keine
%negativen werte haben darf aber wir können k an der stelle n berechnen
k = -(N-1)/2 : (N-1)/2;

theta = linspace(0,2*pi,360);
r = linspace(0,199,200);
S = zeros(360,200);

%For Schleife um Werte S(theta,r) zu berechnen
%r.' ist der Vektor r transponiert und x.' ist der Vektor x transponiert
%Vektoren r und x transponieren, da sosnt die Matrix Dimensionen nicht
%übereinstimmen
for n = 1:N
    x = sqrt(((r.'*cos(theta)-k(n).*d).*(r.'*cos(theta)-k(n).*d))+(r.'*sin(theta).*(r.'*sin(theta))));
    S = S + sin((x.'+k(n).*beta./pi));

end
 


theta ist ein Vektor der Größe 1x360 und und S hat die Größe 360x200

Das ist die Fehlermeldung:
Error using polar (line 69)
THETA and RHO must be the same size.

Und als Rho habe ich ja S
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2019, 23:19     Titel:
  Antworten mit Zitat      
Hallo,

dann ist doch klar, dass theta (360 Elemente) nicht zur ersten Zeile von S (200 Elemente) passt.
Du könntest wie gesagt repmat verwenden:
Code:
T = repmat(theta', 1, 200)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
blaueente

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2019, 09:27     Titel:
  Antworten mit Zitat      
Vielen Dank nun klappt es! Smile
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.