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

Fehlende Lösung bei dem solve-Befehl

 

TheWave

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2013, 13:52     Titel: Fehlende Lösung bei dem solve-Befehl
  Antworten mit Zitat      
Hallo Zusammen,

ich habe derzeit ein Problem mit dem Befehl solve.

Ich habe einen Peak eines Messschriebes sowohl nach der Cauchy-Verteilung als auch nach der Gaußverteilung gefittet. Hierduch habe ich zwei Funktionen erhalten. Die Kombination beider Funktionen liefert mir die Pseudo-Voigt Verteilung. Alle Funktionen sind in sich schlüssig und lassen sich plotten.
Im Weiteren möchte ich die Peakbreite bei halber Intensität bestimmen. Hierfür wird zunächst durch den max-Befehl die Intensität bestimmt und die Nullstellen der Funktion F(x)-Max/2 durch solve bestimmt. (siehe Code)


Code:

xP=66.5:0.05:71;    %xP : x-Werte des Peakes

% Aus vorherigen Berechnungen bestimmt
Hc=0.3184;
Hg=1.9616;
TwoThetaTC=69.0781;
TwoThetaTG=68.9876;
I_int=885.0498;


% Cauchy-Verteilung
syms C(x)
C(x)=2/pi*Hc/(Hc^2+4*(x-TwoThetaTC).^2)

% Gauß-Verteilung
syms G(x)
G(x)=2*sqrt(log(2))/(sqrt(pi)*Hg) * exp( -4*log(2)/Hg^2*(x-TwoThetaTG).^2 )

% Pseudo Voigt
eta=0.5;   % Gewichtungsfaktor
syms PV(x)
PV(x)=eta*C(x)+(1-eta)*G(x);

figure(1); clf; hold on;
plot(xP, C(xP),'b')
plot(xP, G(xP),'g')
plot(xP, PV(xP),'r')

% Bestimmung der Peakbreiten bei halber Intensität
[Cc,I]=max(eval(C(xP)));
NullC=double(solve(C(x)-Cc/2));

[Cg,I]=max(eval(G(xP)));
NullG=double(solve(G(x)-Cg/2));

[Cpv,I]=max(eval(PV(xP)));
NullPV=double(solve(PV(x)-Cpv/2))

 



Für die Funktionen C(x) und G(x) erhalte ich wie erwartet zwei Lösungen. Jedoch liefert mir der der solve-Befehl für die Funktion PV(x) nur die erste Lösung. Woran kann dies liegen? Und wie erhalte ich den zeiten Wert?
Ich hoffe ihr könnt den Fehler nachstellen und mir helfen.
Schonmal vielen Dank
Gruß
Tobias


Harald
Forum-Meister

Forum-Meister


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

eine Erklärung, warum die zweite Nullstelle nicht gefunden wird, habe ich nicht.
Ich würde hier numerisch arbeiten. Ausgehend von deinem bisherigen Code:

Code:
fh = matlabFunction(PV(x)-Cpv/2);
fzero(fh, [67  xP(I)])
fzero(fh, [xP(I) 75])


Ich für meinen Teil würde direkt numerisch und mit Function Handles arbeiten. Dann kannst du z.B. auch mit einer Funktion wie fminsearch direkt und viel genauer das Maximum bestimmen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2013, 09:52     Titel:
  Antworten mit Zitat      
Dank für den Tipp,

über den Weg funktioniert alles bestens.
Mich würde ja doch noch interessieren warum der andere Weg nicht funktioniert hat.

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