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

Schleifenproblem in Matlab

 

Poko1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2009, 19:12     Titel: Schleifenproblem in Matlab
  Antworten mit Zitat      
Code:
Ich habe folgendes Problem: Ich habe die Funktion x(t)=2.2*heaviside(t-3) und habe folgendes m-file gestaltet:

function x = Heaviside(t,s)
x=2.2*heaviside(t-3)
if 3<=t<=8
    x=2.2;  
else
    x=0;
end

ich möchte ihm hiermit nur sagen, dass er nach der Funktion x=2.2*heaviside(t-3) rechnen soll und speziell im Intervall zw. 3 u. 8 x=2.2 sonst x=0 ausgeben soll!
Das funktioniert aber leider nicht!
Hat hier jemand eine Idee wie ich die Schleife gestalten könnte oder soll man das Bsp ohne Schleife lösen! Vielen Dank schon mal jetzt für Eure Hilfe!


Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2009, 19:33     Titel:
  Antworten mit Zitat      
Servus Poko

Versuche mal anstatt
Code:


Code:
if 3 <= t || t >=8

_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Poko1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2009, 19:45     Titel:
  Antworten mit Zitat      
Code:
Geht leider auch net, da dann in der Zeile mit dem Befehl x=2.2*heaviside(t-3) leider immer noch

im mfile:"The value assigned here ti variable x might never be used" und

im command window:??? Undefined function or method 'le' for input arguments of type 'sym'.

Error in ==> Heaviside1 at 3
if 3<=t || t>=8

Hast du ne andere Idee-hab's auch schon mit switch/case/ohterwise-Befehlskette versucht!

Danke schon mal


Lg,Poko
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2009, 20:03     Titel:
  Antworten mit Zitat      
Servus nochmal

Erkläre mir mal bitte was genau Du brauchst.
Ich verstehe ein paar Sachen nicht:

1. Du definierst hier eine Funktion
Diese Funktion 'Heaviside' hat zwei Inputparameter t und s.
Die Funktion selbst liefert Dir x.
Code:

function x = Heaviside(t,s)
ok


2. Du verwendest in Deiner Funktion 'Heaviside' wieder eine Funktion mit dem Namen 'heaviside'.
Damit drehst Du Dich glaube ich im Kreis
Code:
x=2.2*heaviside(t-3)
?????


3. Die if- Schleife checkt den Wertebereich von t.
Aber ganz egal wie diese Prüfung ausgeht, x wird immer überschreiben ( entweder ist x = 2.2 oder 0). Vor der Schleife berechnest Du ja schon ein x!!
Code:
if 3<=t<=8
    x=2.2;  
else
    x=0;
end
?????



Erkläre mir bitte was für eine Funktion 'heaviside' sein soll/ ist, was und wie groß (einzelner Wert oder mehrere 100 Werte) t sein soll und was und wie groß s (einzelner Wert oder mehrere 100 Werte) sein soll.
_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 17.07.2009, 20:04     Titel:
  Antworten mit Zitat      
Auch wenn ich den Sinn der Funktion nicht verstehe, da du das auch ohne heaviside realisieren könntest, weil die Funktion ja mit deinen Anweisungen komplett überschrieben wird:

Code:

t=0:0.5:10;
x=2.2*heaviside(t-3) ;
x(t<=8 & t>=3)=2.2;
x(t<3 | t>8)=0;
 


Es würde ohne heaviside auch einfach reichen folgendes zu tun:

Code:

t=0:0.5:10;
x=zeros(1,length(t)) ;
x(t<=8 & t>=3)=2.2;
 


Die Eingabe für t ist dann ein Vektor, welcher wohl auch bei deiner Funktion, das Problem sein dürfte da die if-anweisung einen Vektor komplett mit einsen bräuchte um ausgeführt zu werden.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Poko1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2009, 21:40     Titel:
  Antworten mit Zitat      
Code:
Hallo Leute!

Das ist nur ein Teil eines Beispiels-ich wollte nicht gleich das ganze Beispiels ins Forum stellen;=)!
Die ganze Fragestellung lautete: Die Eintrittskonz. ist gegeben durch x(t)=2.2*U(t-3), die Mischungscharakteristik k(t)=0.5*t^2*exp(-t/10)-->mittels des Faltungssatzes sollte man nun y(t) im Intervall [0 100] ausrechnen!

Dafür habe ich auch bereits einen Lösungsweg mit folgenden Befehlsablauf, der mir plausibel erschien:
Ich habe die beiden Multiplikanten separat laplace-transformiert und das Produkt dann wieder zurücktransformiert!
Bestimmt gibt es da auch elegantere Lösungen!
Command window
>> tspan=[0 100];
>> syms t s k x
>>  x=Heaviside(t);
>> k=Polynom(t);
>> F=laplace(x,t,s);
>> G=laplace(k,t,s);
>> H=F*G
 
H =
 
11/5*exp(-3*s)/s/(s+1/10)^3

>> sol=ilaplace(H,s,t)
 
>>sol =
 
(-1639*exp(-1/10*t+3/10)-154*exp(-1/10*t+3/10)*t-11*exp(-1/10*t+3/10)*t^2+2200)*heaviside(t-3)

>>ezplot(sol,[0,100])

ad heaviside-fkt.:
Mir ist schon klar, dass x durch die Schleife überschrieben wird-Ich hatte jedoch das Problem, dass wenn ich die Funktionszeile mit x=2.2*heaviside(t-3) im m-File weggelassen hatte, dass er dann im command window keine Funktion finden konnte (function undefined)!  
Danke für Eure Antwort - ich werde es mal eingeben!
 

Poko
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2009, 22:16     Titel:
  Antworten mit Zitat      
Poko1 hat Folgendes geschrieben:
Code:
Hallo Leute!

Das ist nur ein Teil eines Beispiels-ich wollte nicht gleich das ganze Beispiels ins Forum stellen;=)!
Die ganze Fragestellung lautete: Die Eintrittskonz. ist gegeben durch x(t)=2.2*U(t-3), die Mischungscharakteristik k(t)=0.5*t^2*exp(-t/10)-->mittels des Faltungssatzes sollte man nun y(t) im Intervall [0 100] mit den Einschränkungen [x(t)=2.2 3<=t<=8, sonst x(t)=0]ausrechnen!

Dafür habe ich auch bereits einen Lösungsweg mit folgenden Befehlsablauf, der mir plausibel erschien:
Ich habe die beiden Multiplikanten separat laplace-transformiert und das Produkt dann wieder zurücktransformiert!
Bestimmt gibt es da auch elegantere Lösungen!
Command window
>> tspan=[0 100];
>> syms t s k x
>>  x=Heaviside(t);
>> k=Polynom(t);
>> F=laplace(x,t,s);
>> G=laplace(k,t,s);
>> H=F*G
 
H =
 
11/5*exp(-3*s)/s/(s+1/10)^3

>> sol=ilaplace(H,s,t)
 
>>sol =
 
(-1639*exp(-1/10*t+3/10)-154*exp(-1/10*t+3/10)*t-11*exp(-1/10*t+3/10)*t^2+2200)*heaviside(t-3)

>>ezplot(sol,[0,100])

ad heaviside-fkt.:
Mir ist schon klar, dass x durch die Schleife überschrieben wird-Ich hatte jedoch das Problem, dass wenn ich die Funktionszeile mit x=2.2*heaviside(t-3) im m-File weggelassen hatte, dass er dann im command window keine Funktion finden konnte (function undefined)!  
Danke für Eure Antwort - ich werde es mal eingeben!
 

Poko
 
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.