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

Funktion_aufruf

 

Derick
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 21.05.13
Wohnort: HAMBURG
Version: ---
     Beitrag Verfasst am: 08.04.2014, 16:38     Titel: Funktion_aufruf
  Antworten mit Zitat      
Hallo Zusammen,

Eine Formel für die Rückstrahlung der Meeresoberfläche wenn ein sound ins Meer entritt , ist gegeben. Diese Formelf is von der Windgeschwindigkeit, die Frequenz der Sound und eine Winkel abhängig.

Mit dieser Formel möchte ich Öberflächerückstrahlung .vs Winkel bei konstanter Frequenz und variable Windgesch in mehreren subplot darstellen.

1. Erstens habe ich eine Function geschrieben, die die Formel berechnet mit Eingabeparam, frequenz,Windgesch, und winkel

So sieht meine funktion aus.
Code:
function [S1] = Surface_Reverberation(f1,ws1,theta)

 beta = 4*((ws1+2)/(ws1+1))+ (2.5*((f1+0.1)^(-1/3))-4).*(cosd(theta).^(1/8));
 S1 = 10*log10(10^(-5.05)*((1+ws1)^(2))*(f1+0.1)^(ws1/150).*(tand(theta)).^(beta));
 

2. Zweitens möchte ich die Function in zwei vorschleifen aufrufen
und danach ploten.
Code:
% sound frequency
f1 = [50 100 200 400];
% Wind speed induced roughness
ws1 = [5 10 20 40];
% Grazin angel
theta = [0 20 40 60 80];

for i = 1:length(f1)
    for j = 1:length(ws1)
                 
             S(i,j) = Surface_Reverberation(f1(i),ws1(j),theta)
    end
end
figure;
subplot(221)
plot(theta,S1(1,1),theta,S1(1,2),theta,S1(1,3),theta,S1(1,4));
subplot(222)
plot(theta,S1(2,1),theta,S1(2,2),theta,S1(2,3),theta,S1(2,4));
subplot(223)
plot(theta,S1(3,1),theta,S1(3,2),theta,S1(3,3),theta,S1(3,4));
subplot(224)
plot(theta,S1(4,1),theta,S1(4,2),theta,S1(4,3),theta,S1(4,4));
 


Frage:
ich bekomme dieser fehler:
Subscripted assignment dimension mismatch.

Error in Third_Assignment (line 12)
S(i,j) = Surface_Reverberation(f1(i),ws1(j),theta)

Anscheinend liegt der Fehler schon in meiner Vorschleife, weiß jemand was ich falsch mache?

vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 08.04.2014, 17:00     Titel:
  Antworten mit Zitat      
In Surface_Reverberation wird S1 zurückgegeben - im Beispiel der Größe 1x5. In der Schleige wird jedoch etwas Zweidimensionales erwartet: S(i,j)

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Derick
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 21.05.13
Wohnort: HAMBURG
Version: ---
     Beitrag Verfasst am: 08.04.2014, 19:17     Titel:
  Antworten mit Zitat      
Hallo Andreas,
ich habe versucht das problem mit der function zu lösen aber geht nicht
Ich habe dann ohne Function implementiert und es klappt.
Hier ist der code
Code:
%% surface_reverberation
% sound frequency
f1 = [50 100 200 400];
% Wind speed induced roughness
ws1 = [5 10 20 40];
% Grazin angel
theta = [0:90];

for i = 1:length(f1)
    for j = 1:length(ws1)
        for k = 1:length(theta)
        beta = 4*((ws1(j)+2)./(ws1(j)+1))+ (2.5.*((f1(i)+0.1)^(-1/3))-4).*(cosd(theta(k)).^(1/8));
        S1(i,k,j) = 10*log10(10^(-5.05)*((1+ws1(j)).^(2))*(f1(i)+0.1)^(ws1(j)/150).*(tand(theta(k))).^(beta));
        end
   end
end
figure;
subplot(221)
plot(theta,S1(1,:,1),theta,S1(1,:,2),theta,S1(1,:,3),theta,S1(1,:,4));
axis([0 90 -70 10]);grid on
ylabel('Surface Reverberation[dB/m^2]');
xlabel('grazing angle[deg]'); legend('Ws = 5','Ws = 10','Ws = 20','Ws = 40',...
    'Location','Best'); title('Frequenz = 50 kHz')
subplot(222)
plot(theta,S1(2,:,1),theta,S1(2,:,2),theta,S1(2,:,3),theta,S1(2,:,4));
axis([0 90 -70 10]);grid on
ylabel('Surface Reverberation[dB/m^2]');
xlabel('grazing angle[deg]'); title('100 kHz');
subplot(223)
plot(theta,S1(3,:,1),theta,S1(3,:,2),theta,S1(3,:,3),theta,S1(3,:,4));
axis([0 90 -70 10]);grid on
ylabel('Surface Reverberation[dB/m^2]');
xlabel('grazing angle[deg]'); title('200 kHz');
subplot(224)
plot(theta,S1(4,:,1),theta,S1(4,:,2),theta,S1(4,:,3),theta,S1(4,:,4));
axis([0 90 -70 10]);grid on
ylabel('Surface Reverberation[dB/m^2]');
xlabel('grazing angle[deg]'); title('400 kHz');

Mit der Function wäre bestimmt schöner weil weniger code gebraucht wird.
Der Code oben is für den fall wenn wo die Frequenz contanst ist bei variable Ws.

Wenn ich aber versuche mit variable frequenz und constant Ws, habe auch Problem habe der gleiche Fehler wie bei der Function.
Code:
for i = 1 :length(ws1)
    for j = 1:length(f1)
        for k = 1:length(theta)
            beta = 4*((ws1(i)+2)./(ws1(i)+1))+ (2.5.*((f1(j)+0.1)^(-1/3))-4).*(cosd(theta(k)).^(1/8));
        S2(i,k,j) = 10*log10(10^(-5.05)*((1+ws1(i)).^(2))*(f1(j)+0.1)^(ws1(i)/150).*(tand(theta(k))).^(beta));
           
        end
    end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 09.04.2014, 08:56     Titel:
  Antworten mit Zitat      
Wenn ich den neuen Beispielcode ausführe läuft er fehlerfrei durch. Wenn ich die dreifachverschachtete Schleife durch den Code ganz unten im Posting ersetze läuft der auch durch...

Also hilft nur debuggen.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Derick
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 21.05.13
Wohnort: HAMBURG
Version: ---
     Beitrag Verfasst am: 09.04.2014, 14:56     Titel:
  Antworten mit Zitat      
Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2025 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.