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

Funktionen multipliziern un dann integrieren

 

buto1015
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 16.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2015, 15:19     Titel: Funktionen multipliziern un dann integrieren
  Antworten mit Zitat      
Hallo zusammen,
steh bisschen auf dem Schlauch gerade und bräuchte eure Hilfe.
Folgendes Problem:

Ich habe eine Kurve die aus drei Funktionen (g,Res,h) besteht. Jede Funktion hat seinen eigenen Geltungsbereich(a,b). Mit einer For-Schleife gebe ich über alpha die zusammenhängende Kurve wie folgt aus:
Code:
a=KW_reg(1,1); %Grenze für Regressionsfunktion Beginn
b=KW_reg(1,2); %Grenze für Regressionsfunktion Ende

Res=@(x) z(1)*exp(-((x-z(2))/z(3)).^2) + z(4)*exp(-((x-z(5))/z(6)).^2) + ...
    z(7)*exp(-((x-z(8))/z(9)).^2) + z(10)*exp(-((x-z(11))/z(12)).^2) +...
    z(13)*exp(-((x-z(14))/z(15)).^2);
g=@(x) m.*(x-A(1,1))+A(2,1);
h=@(x) (-1)*m.*(x-C(1,1))+C(2,1);


Code:
function D=Testfunktion(x,a,b,g,Res,h)
   
    if (x < a)
    D=g(x);
    elseif (x >= a) && (x <= b)
    D=Res(x);
    elseif (x > b)
    D=h(x);
    end
end

 



Nun habe ich nochmal zwei weitere Kurven die jedoch jeweils durch Fnktionen ausgedrückt werden können. Folgend die Funktionen:
Funktion vkn:
Code:
vkn=@(x)abs(((H/2).*(omega).*(sin(x*pi/180)+(lambda/2).*(sin(2*x*pi/180)./(sqrt(1-lambda.^2*(sin(x*pi/180)).^2))))/1000)*2)/(omega.*H/1000);

Funktion M:
Code:
M=@(x)p2(1)*x.^2+p2(2)*x+p2(3);


Nun möchte ich die Funktionen multiplizieren und anschliesend integrieren.
Mit
Code:
Su=@(x)vkn(x).*M(x).*Testfunktion(x,a,b,g,Res,h);
D=integral(Su,354,561.5);
 


Jedoch kommt dann folgender Fehler:
Code:
Operands to the || and && operators must be convertible to logical scalar values.

Error in Testfunktion (line 11)
    elseif (x >= a) && (x <= b)

Error in @(x)vkn(x).*M(x).*Testfunktion(x,a,b,g,Res,h)


Error in integralCalc/iterateScalarValued (line 314)
                fx = FUN(t);

Error in integralCalc/vadapt (line 132)
            [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

Error in integralCalc (line 75)
        [q,errbnd] = vadapt(@AtoBInvTransform,interval);

Error in integral (line 88)
Q = integralCalc(fun,a,b,opstruct);

Error in calc_DZN (line 26)
D=integral(Su,354,561.5);


Wenn ich aber eine Funktion z.B. res an der stelle von Testfunktion, dann funktioniert es.

Ich hoffe ich konnte euch mein Problem ausreichend genug erklären?!?!
Hoffe ihr könnt mir weiterhelfen!
_________________

Gruß
buto1015
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.04.2015, 15:30     Titel:
  Antworten mit Zitat      
Hallo,

die Funktionen müssen so definiert sein, dass sie Vektoren als Eingabeargumente akzeptieren. Notfalls muss man intern eine Schleife programmieren.
Das ist aber z.B. bei deiner Testfunktion nicht der Fall. Logische Indizierung sollte da helfen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
buto1015
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 16.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2015, 16:13     Titel:
  Antworten mit Zitat      
Hi,
vielen Dank für deine Antwort.
Also muss ich i.A. meine Testfunktion so aufbauen, dass für x Vektoren eingespeist werden können, denn im Moment sind nur skalare Werte für x erlaubt und dies erreich ich indem ich die if-Anweisungen mit Hilfe von logischen Operatoren ausdrücke. Stimmt das so?
_________________

Gruß
buto1015
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.04.2015, 16:31     Titel:
  Antworten mit Zitat      
Hallo,

ganz genau.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
buto1015
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 16.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2015, 10:25     Titel:
  Antworten mit Zitat      
Hi,
hab mich jetzt bisschen in die logische Indizierung eingelesen. Aber komme leider nicht weiter.
So hab ich jetzt meine Testfunktion umgeschrieben:
Code:
function T=Testfunktion(x,a,b,g,Res,h)
   
T(x<a)=g(x);
T(x>=a&x<=b)=Res(x);
T(x>b)=h(x);

end

 

Folgender Fehler jedoch:
Code:
In an assignment  A(I) = B, the number of elements in B and I must be the same.

Error in Testfunktion (line 9)
T(x<a)=g(x);

_________________

Gruß
buto1015
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.04.2015, 10:36     Titel:
  Antworten mit Zitat      
Hallo,

g(x) wird für alle x ausgewertet, aber nur einem Teil des Vektors zugewiesen. Zudem würde ich vorbelegen.

Code:
T = zeros(size(x));
T(x<a)=g(x(x<a));
...


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
buto1015
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 16.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2015, 10:41     Titel:
  Antworten mit Zitat      
Hi,
top....bin grad eben selbst drauf gekommen. Muss ja x in g einsetzten und nicht die logische Abfrage.

Super danke, läuft.
_________________

Gruß
buto1015
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.