Autor Beitrag
Endanwender
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 23.05.05 23:25 
Hallo alle Zusammen!

Ich versuche derzeit krampfhaft mir ein kleines Programm zu schreiben, mit dass sich eine nichtlineare Funktion, bestehend aus der Überlagerung einer quadratischen Funktion mit einem Voigt-Profil , anfitten läßt. Ehrlich gesagt hab ich keine Ahnung wie ich das machen, wollte mich da Stück für Stück rantesten, auch wenn es unter den jetzigen Bedingungen Jahre dauert, obwohl es für meine Diplomarbeit doch von recht großen nutzen wäre.

Deshalb werde ich mal hier meine erste von bestimmt vielen Fragen stellen!

Was jemand zufällig wie ich eine Funktion programmiere, die das Voigt-Profil wiederspiegelt?

ich hab folgendes versucht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
function Voigt(x,x0,y0,wL,wG,nu,A: Extended):Extended;
begin
  Voigt:=y0+A*(nu*(2/Pi)*(wL/(4*(x-x0)+sqr(wL)))+(1-nu)*(sqrt(4*Ln(2))
      *(sqrt(Pi)*wG))* Exp(-1*(4*Ln(2)/sqr(wG)*sqr((x-x0)))));
end;



Schöne Grüße
der Endanwender

PS: Im Dateianhang hab ich mal das Layout dargestellt was ich denke zu machen! Der Graph stellen die Messwerte da, die irgendwann einmalangefittet werden sollen. Bloß wie?

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.
Einloggen, um Attachments anzusehen!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 24.05.05 07:30 
Hi!

Ist es Teil der Diplomarbeit, ein eigenes Tool zu schreiben? Falls nicht, solltest Du mal schauen, ob es dort, wo Du die Diplomarbeit machst, das Programm "Origin" gibt. Der fittet auch Voigt-Profile (okay, es gibt wenig, was der nicht fittet ;-)). Das würde Dir eine Menge Arbeit ersparen und Du könntest Dir wesentlich sicherer sein, dass die Ergebnisse korrekt sind. (Obwohl ich Origin vorige Woche zur Strecke gebracht habe :mrgreen:)

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Endanwender
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 24.05.05 08:33 
Naja, Bestandteile meiner Diplomarbeit ist es nichts ein Programm zu schreiben! Aber das Fitten der Messdaten schon! Und ehrlich gesagt, haben wir Origin, aber ich hab keine Ahnung wie ich damit eine nichtlineare Kurve fitte. Vor allem durch die Komplexität der Messdaten!
Ideen nehme ich gerne entgegen!

Und die Programmierung solche eines Programms soll nur dazu dienen bisschen Programmieren zu lernen! Naja, wäre schön wenn es was wird, aber naja!

MFG
der Endanwender
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 24.05.05 21:36 
Äh, gehts hier um nonlineare Regression oder dergleichen? Ich meine, kennst Du in etwa die Stammfunktion? Ich habe hier ein Modul, das beliebige Funktionen an eine Punkteschar 'anfittet', man benötigt die Stammfunktion (y=ax+sin(y)*b+ exp(z/cos(c))) sowie die Ableitung.

Oder musst Du nur hinreichend glatte Kurven durchzeichnen. Dann nimm Bezierkurven.
Endanwender
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 25.05.05 13:05 
user profile iconalzaimar hat folgendes geschrieben:
Äh, gehts hier um nonlineare Regression oder dergleichen? Ich meine, kennst Du in etwa die Stammfunktion? Ich habe hier ein Modul, das beliebige Funktionen an eine Punkteschar 'anfittet', man benötigt die Stammfunktion (y=ax+sin(y)*b+ exp(z/cos(c))) sowie die Ableitung.


Jep es ist eine nichtlineare Regression! Die Funktion besteht aus einem Polynom 2.Ordnung überlagert mit dem Lambertschen Gesetz! Ungefähr so: FIT=(L*x*x+m*x+n)*(I*Exp(Voigt(x,x0,wL,wG))! Hierbei entspricht Voigt der Profilfunktion! Und darum suche ich eine numerische Funktion, die das Voigt-Profil wiederspiegelt!

Nun hab ich aber auch noch ne andere Frage:

Ist es möglich, dass man in einer For-Schleife mehrere Edit-Felder auslesen kann!
Dachte da an sowas wie:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure datasetP.ReadIn;
var i,Code: Integer;
begin
  for i:=1 to 23 do
    begin
    Val(Form1.Edit????.Text,Parameter[i],Code); //
    if Code <>0 then
       ShowMessage('Falsche Eingabe des Paramters '+ IntToStr(i));
    end;
end;


Paramter[i] ist hierbei an array[0..25]!

Oder muss ich doch alle einzeln einlesen!

Schöne Grüße
der Endanwender

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 25.05.05 20:50 
Mit der Voigtfunktion kenn ich mich nicht aus. Aber mit Delphi:
Du setzt die 'Tag' Eigenschaft (Tag: engl. in etwa "Etikett") jedes Editfeldes auf einen eindeutigen Wert. Also, z.B. Edit1.Tag := 1, Edit2.Tag := 2 usw...
Wenn Du dann Durch die Components iterierst, kannst Du einfach folgendes machen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
...
For i:=0 to ComponentCount - 1 do
  If Components[i] is TEdit Then Begin
    ParamIndex := TEdit(Components[i]).Tag;
    If ParamIndex > 0 Then
      Parameter[ParamIndex] := TEdit(Components[i]).Text;
    End;

Diese Tag-Property ist eigentlich die am meisten unterschätzte Eigenschaft aller Komponenten. Man kann damit Pointer mitschleppen, Komponenten indizieren etc. Praktische Sache.

Wie gesagt, wenn Du eine Funktion hast, kann ich Dir die Parameter mit nonlinearer Regression ausrechnen...