Matlab Spezis anwesent? Lösung gesucht...

loopy83

Moderator, HWLUXX OC-Team, TeamMUTTI
Thread Starter
Mitglied seit
31.01.2006
Beiträge
12.232
Ort
Jena / Thüringen
Hallo zusammen,

ich habe ein größeres mathematisches Problem und denke, dass es mit Matlab zu lösen geht. Ich weiss nur nicht wie:

Problem:
Ich möchte eine Varistorkennlinie in folgender Form approximieren.

varaproxip5.jpg


Gegeben habe ich meine Kennlinie des Vartistor.
Gegeben sind also mehrere I (Strom) und dazugehörige Spannungswerte U.

Die Kennlinie sieht in etwa so aus:
vargiagrammtq0.jpg


Die Charakteristik der Kennlinie wird mit den Parametern b1-b4 beschrieben.

Ich suche also eine Möglichkeit, mit der ich oben genannte Gleichung mit den b1-b4 Werte ergänzen kann, dass meine gegebene Kennlinie rauskommt.

Ich habe etwa 10 Wertepaare.
Damit könnte ich im Prinzip 10 Gleichungen aufstellen, in denen jeweils b1-b4 enthalten ist.
Nur kann ich dann ohne weiteres durch ein Eliminierungsverfahren einzelne b-Parameter auschliessen und somit b1-b4 berechnen?

Gibt es andere Lösungsvorschläge?

VIELEN DANK !!!
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Kannst Du mal die Aufgabe im Orginal uppen? Denn irgendwie ist die Aufgabestellung komisch. Du hast eine Funktion und den Graphen der Funktion und sollst daraus dann die Parameter bestimmen?

Also, Du kannst mal versuchen mit dem gaußschen' Eleminationsverfahren zu schauen, ob das ein sinnvolles Ergebnis für b1-b4 produziert.Oder Du versuchst die Gleichung zu vereinfachen.

Edit: das mit der Vereinfachung ist Quatsch, sry. Versuch' mal Gauß.
 
Zuletzt bearbeitet:
Einfach die Koeffizienten zu eliminieren wird hier vermutlich nicht reichen, der Graph deutet ja an, dass die Werte eben nicht alle auf der Kurve liegen, sondern eine Toleranz von < 10 haben sollen, also wird man wohl in irgendeiner Form fitten müssen.
Ausserdem ist bestimmt die Gleichung falsch, die Koeffizienten b2 und b4 werden jeweils mit log(l) multipliziert, dann kann man (für reelle l) exp(-log(l)) schreiben als 1/l.
 
Die Kurven sind nur exemplarisch, also ich habe eine Kurve ohne Toleranz, diese Vereinfachnung kann ich machen.

das exp(-log(I)) = -1/I ist wage ich mal zu bezweifeln, denn es ist ja log und nicht ln....

Und wieso sollte die Gleichung falsch sein, wenn zwei Paratemter den gleichen Faktor haben?

DANKE erstmal :)
 
Hmm, du hast natürlich recht, ich als Physiker hab da an den ln gedacht, der bei uns (aus welchem Grund auch immer) oft als log geschrieben wird.

Und das mit den beiden Parametern muss natürlich nicht falsch sein, es macht nur auch nicht wirklich viel Sinn :d
 
das mit dem b2 und b4 ist aber echt nicht so klug. Die kann man auch zusammenfassen, ansonsten koenntest du , sobald du eine loesung gefunden hast, unendlich viele gleichwertige loesung erzeugen, indem du b2' beliebig waehlst und b4' = b2+b4-b2'.
 
Hier steht die Originalgleichung drin....
http://www.ce-mag.com/archive/1999/mayjune/Holzer.html
(zwischen den ersten beiden Bildern)

Hab ich die x und das kleingeschriebene log(I) vielleicht falsch interpretiert?
Aber ein Kreuzprodukt kann ich mir in diesem Fall wirklich nicht vorstellen :d

Aber mal angenommen, die Gleichung stimmt so, war ja meine eigentliche Frage, wie ich solch ein überbestimmtes Gleichungssystem (habe ja 10 Gleuchungen und nur 4 Parameter) einfach und schnell im Matlab lösen kann.

Von Hand geht das sicher auch, nur leider sehe ich dann den Anspruch einer Diplomarbeit gefährdet.... denn von Hand rechnen gehört sich einfach nicht, weil es eben mit dem Rechner schneller geht.

DANKE
 
Hmm, das ist ja echt merkwürdig, kannst du deine Wertepaare mal hier reinstellen?
 
An sich reichen ja fikive Werte, aber wenns hilft :)

Ich gebe euch gerne 10 Beispiele und das passende excel Diagramm dazu:
exceltr7.jpg
 
Mit dem merkwürdigen Matlab kriege ich das nicht hin, aber dafür kann ich mit gnuplot einen Fit produzieren, kannst ja mal mit deinen Mess(?)daten gucken ob das Sinn macht.
Code:
# test.dat
10	784.148
20	814.463
50	846.799
100	869.03
200	885.198
500	905.408
1000	917.534
2000	925.618
5000	939.765
10000	949.87
6400000	1089.319
Und dann im selben Verzeichnis gnuplot ausführen, und da folgendes machen:
Code:
f(x)=b0+b1*log(x)+b2*exp(-log(x))
fit f(x) 'test.dat' using (log($1)):(log($2)) via b0, b1, b2 
plot f(x), 'test.txt' using (log($1)):(log($2))
Als Ergebnisse bekommt man dann folgenden Graphen
994btest.png

und für die Parameter
Code:
Final set of parameters            Asymptotic Standard Error
=======================            ==========================

b0              = 6.35287          +/- 0.06881      (1.083%)
b1              = 0.21931          +/- 0.02531      (11.54%)
b2              = 0.316766         +/- 0.1263       (39.86%)


correlation matrix of the fit parameters:

               b0     b1     b2
b0              1.000
b1             -0.993  1.000
b2             -0.981  0.959  1.000
Vielleicht hilft dir das ja ein bisschen weiter.
 
Also ich löse solche Aufgabenstellungen immer im Origin.
Da kann man auch ganz einfach Fit-Funktionen erstellen.

Hab mit deinen Werten einfach mal nen Fit gemacht...
Keine Ahnung ob die Werte hinkommen können :d
 
WOW sehr gut.... wenns ein anderes Programm ist, geht es ja auch, auch wenn die Professoren auf matlab übel abgehen :d

@ TheWarrior:
Kann es sein, dass du die Ausgangsgleichung nicht ganz fehlerfrei übernommen hast?
Aber das Bsp zeigt mir ausreichend, wie das Programm funktioniert, werde ich dann mal austesten.

@ Mandel:
Das Origin schau ich mir mal an....
Hast du auch die Originalgleichung zu Grunde gelegt?
Sieht mir etwas genauer und übersichtlicher aus.
Kannst du eienn kurzen Abriss geben, was genau ich machen muss, um deine Ergebnisse zu reproduzieren?

DANKE an euch beide.

Ich schau mir das morgen auf Arbeit mal an, ich hoffe ich kann nochmal nachfragen, wenn Probleme bei der Bedienung auftauchen :)
 
Ich hab nicht auf 1, sondern auf 0 angefangen zu zählen, und dann den Teil mit b4 weggelassen, da wie Roland ja schon geschrieben hat, diese in der Gleichung eh nicht eindeutig zu bestimmen sind.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh