Matroids Matheplanet Forum Index
Moderiert von viertel
Mathematik » Geometrie » Dreieckberechnung mit 2 Winkelhalbierenden und einer Seite
Thema eröffnet 2023-01-11 22:54 von ebikerni
Seite 2   [1 2]   2 Seiten
Autor
Schule Dreieckberechnung mit 2 Winkelhalbierenden und einer Seite
Knaaxx
Senior Letzter Besuch: im letzten Quartal
Dabei seit: 06.05.2006
Mitteilungen: 2730
  Beitrag No.40, eingetragen 2023-01-31

Hallo ebikerni Du brauchst Werners Antwort nur ein klein wenig erweitern und das Problem ist weg. Du führst eine zweite Konstante hh << h ein. Hier 1:1 in "Python" übersetzt \sourceon nameDerSprache """ Werners Antwort """ def w1(wa,wb,a,c0): n = 0 c = 0 h = 1e-5 hh= 1e-15 while abs(c-c0)>hh and n<100: c = c0 b = (a+c)*(1-(wb**2/(a*c)))**0.5 g1= b*c*(1-(a/(b+c))**2)-wa**2 b = (a+c+h)*(1-(wb**2/(a*(c+h))))**0.5 g2= b*(c+h)*(1-(a/(b+c+h))**2)-wa**2 c0= c-h*g1/(g2-g1) n = n+1 print('c = ', c,n,c0) w1(8,14,20,20) \sourceoff


   Profil
ebikerni
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 17.10.2020
Mitteilungen: 272
  Beitrag No.41, vom Themenstarter, eingetragen 2023-02-03

Hallo Knaaxx, Dein schönes Programm erbrachte aber einen Fehler: wha = 8.0 whb =14.0 a = 20.0 print("wha = ",wha) print("whb = ",whb) print("a = ",a) n=0 h = 1e-5 hh= 1e-15 c0=20.0 print("begin") while abs(c-c0)>hh and n<100: c=c0 b = (a+c)*(1-(wb**2/(a*c)))**0.5 g1= b*c*(1-(a/(b+c))**2)-wa**2 b = (a+c+h)*(1-(wb**2/(a*(c+h))))**0.5 g2= b*(c+h)*(1-(a/(b+c+h))**2)-wa**2 c0= c-h*g1/(g2-g1) n = n+1 print('c = ',c) print('n = ',n) print('c0 = ',c0) wha = 8.0 whb = 14.0 a = 20.0 begin Traceback (most recent call last): File "D:\PyWaWbA81420Neu\PyWaWbA81420.py", line 41, in while abs(c-c0)>hh and n<100: NameError: name 'c' is not defined Wie kann das Programm geändert Werden ? Gruß ebikerni


   Profil
Knaaxx
Senior Letzter Besuch: im letzten Quartal
Dabei seit: 06.05.2006
Mitteilungen: 2730
  Beitrag No.42, eingetragen 2023-02-03

Hallo, na ja, ich sag mal du hast "angepasst" und unterschlagen. Was denkst warum "c = 0" bei mir oben aufgeführt ist. Richtig, genau aus diesem Gund. Ist nicht mein Programm, das ist Werners Programm, ich hab das nur übertragen!


   Profil
ebikerni
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 17.10.2020
Mitteilungen: 272
  Beitrag No.43, vom Themenstarter, eingetragen 2023-02-05

Hallo Knaaxx, Nochmals herzlichen Dank für Deine wertvollen Hinweise. Ich konnte das Programm berichtigen. Auch für mich in interessanter Weise habe ich die Werte wa, wb und a, b getauscht und die gleichen Ergebnisse erhalten und habe wieder dazu gelernt. Gruß ebikerni


   Profil
werner
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 23.10.2004
Mitteilungen: 2296
Wohnort: österreich
  Beitrag No.44, eingetragen 2023-02-05

hurra!!!


   Profil
Knaaxx
Senior Letzter Besuch: im letzten Quartal
Dabei seit: 06.05.2006
Mitteilungen: 2730
  Beitrag No.45, eingetragen 2023-02-05

Hallo ebikerni Du bist noch nicht entlassen. Das funktioniert soweit gut, ist als "Notlösung" aber nicht perfekt. Rechne mal folgendes, a =20000000000000 wa=8000000000000 wb=14000000000000 oder auch a =20e-20 wa=8e-20 wb=14e-20 Die Dreiecke sind ähnlich zu a=20, wa=8, wb=14, deswegen solltest gleiches Ergebnis erhalten, nur eben Stellenverschoben. Du wirst aber ein Problem haben. (Arndt Brünner, rechnet das auch nicht)


   Profil
ebikerni
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 17.10.2020
Mitteilungen: 272
  Beitrag No.46, vom Themenstarter, eingetragen 2023-02-09

Hallo Knaaxx, wenn ich mit h=1e-5 berechne, dann erhalte ich in der Kontrollberechnung für die eingegebenen wa=8 und wb=14 für mich keine 15-stellige Genauigkeit : wha = 8.000023232649442 whaa = 8.000023232649442 whb = 13.999993183314805 whbb = 13.999993183314801 whc = 15.440098738436527 whcc = 15.440098738436527 verändere ich h=1e-5 --> h=1e-14, dann kommt für mich ein gutes Ergebnis: wha = 8.000000000000025 whaa = 8.000000000000027 whb = 13.999999999999993 whbb = 13.999999999999993 whc = 15.440079875060983 whcc = 15.440079875060986 Gruß ebikerni


   Profil
Knaaxx
Senior Letzter Besuch: im letzten Quartal
Dabei seit: 06.05.2006
Mitteilungen: 2730
  Beitrag No.47, eingetragen 2023-02-10

Hallo ebikerni Werners Programm ermittelt das c selbst bei einem Wert von h=100 (Einhundert!!) noch 1:1 korrekt. Die Iterationen steigen aber auf mehr als das Zehnfache an. Wenn das c korrekt ist, dann ist auch der Rest eindeutig bestimmt und korrekt. Also daran kanns nicht liegen. Du bist in eine Falle getappt. Du hast dir das fehlende b ausgeben lassen etwa durch "print('b= ',b) und das ergibt Müll weil in der Tat abhängig von h. für h=100 siehts so aus \sourceon nameDerSprache print('c = ', c,n,c0,'b = ',b) c = 11.982942742269481 82 11.982942742269481 b = 126.0756082865753 \sourceoff für h=1 \sourceon nameDerSprache print('c = ', c,n,c0,'b = ',b) c = 11.982942742269481 11 11.982942742269481 b = 16.331167872573456 \sourceoff für h=1e-14 \sourceon nameDerSprache print('c = ', c,n,c0,'b = ',b) c = 11.982942742269481 14 11.982942742269481 b = 13.650792046209693 \sourceoff und auch dieses letze b ist h modifiziert und weicht noch gering ab. Mit "print(b)" hast du dir das falsche b ausgeben lassen. Das richtige b ist in all diesen 3 h-Varianten b = 13.65079204620966. Vielleicht solltest du MontyPythagoras Programm auch mal versuchen. Aber bitte nicht abschreiben, da basteln sich unweigerlich Fehler rein. Copy und bei dir Einfügen, Laufen lassen, Ergebnisse ansehen. Erst wenn das Kopierte korrekt läuft kannst anfangen nach deinen Wünschen umzubasteln. Zwischendrin immer mal prüfen obs noch klappt. https://www.matheplanet.de/matheplanet/nuke/html/viewtopic.php?rd2&topic=261206&start=0#p1898630


   Profil
ebikerni
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 17.10.2020
Mitteilungen: 272
  Beitrag No.48, vom Themenstarter, eingetragen 2023-02-11

Hallo Knaaxx, ich habe die Werte von MontyPythagoras Programm auch angewendet, verglichen und die gleichen Werte mit h = 1e-14 !! erhalten. b = ... 20966 c = ... 269481. Mit h=1e-05 ist nur das b schon ab der 5.Stelle falsch. Für mich sind alle möglichen Kontrollberechnungen von großer Bedeutung und haben im jetzigen Beispiel keine Widersprüche. Gruß ebikerni


   Profil
Knaaxx
Senior Letzter Besuch: im letzten Quartal
Dabei seit: 06.05.2006
Mitteilungen: 2730
  Beitrag No.49, eingetragen 2023-02-11

ebikerni Mit h=1e-05 ist nur das b schon ab der 5.Stelle falsch. Das ist falsch. Siehst du es nicht?? In der while-Schleife ist das "b" 2 mal aufgeführt. Das obere "b" ist das Richtige, das untere "b" ist das falsche b. Das untere, das falsche b überschreibt das Richtige. Wenn die while-Schleife in den Abbruch geht, hat das falsche b das Richtige überschrieben. Deswegen liefert print('b = ', b) einen falschen Wert. Das ist NICHT b. Das ist b(h). Nicht überall wo b draufsteht ist auch b drin! Ohne Änderung am Programm kannst du das korrekte b NICHT abfragen, weil es durch den Programmablauf zerstört wird. Lösung: vorher \sourceon nameDerSprache while abs(c-c0)>hh and n<100: c = c0 # 1 b = (a+c)*(1-(wb**2/(a*c)))**0.5 # 2 richtiges b g1= b*c*(1-(a/(b+c))**2)-wa**2 # 3 b = (a+c+h)*(1-(wb**2/(a*(c+h))))**0.5 # 4 falsches b <-- g2= b*(c+h)*(1-(a/(b+c+h))**2)-wa**2 # 5 c0= c-h*g1/(g2-g1) # 6 n = n+1 # 7 \sourceoff nacher, geändert!! (Zeilen vertauscht 2,3 -> 4,5 und 4,5 -> 2,3) \sourceon nameDerSprache while abs(c-c0)>hh and n<100: c = c0 # 1 b = (a+c+h)*(1-(wb**2/(a*(c+h))))**0.5 # 4 falsches b <-- g2= b*(c+h)*(1-(a/(b+c+h))**2)-wa**2 # 5 b = (a+c)*(1-(wb**2/(a*c)))**0.5 # 2 richtiges b g1= b*c*(1-(a/(b+c))**2)-wa**2 # 3 c0= c-h*g1/(g2-g1) # 6 n = n+1 # 7 \sourceoff und schon liefert print('b = ', b) den korrekten Wert für b !!! Alternativ geht auch folgende Möglichkeit \sourceon nameDerSprache while abs(c-c0)>hh and n<100: c = c0 B = b = (a+c)*(1-(wb**2/(a*c)))**0.5 # geändert, B = vorangestellt g1= b*c*(1-(a/(b+c))**2)-wa**2 b = (a+c+h)*(1-(wb**2/(a*(c+h))))**0.5 g2= b*(c+h)*(1-(a/(b+c+h))**2)-wa**2 c0= c-h*g1/(g2-g1) n = n+1 \sourceoff print('b = ', B) # Großbuchstabe B !! Auch das liefert dann den korrekten b-Wert. (während print('b = ', b) nachwievor den Müll abliefert) 3. Möglichkeit \sourceon nameDerSprache print('b = ', (a+c)*(1-(wb**2/(a*c)))**0.5) \sourceoff liefert ebenfalls den korrekten Wert für b. Alle diese Varianten liefern für h=100, h=1, h=1e-5 oder h=1e-14 den korrekten Wert für b.


   Profil
Knaaxx
Senior Letzter Besuch: im letzten Quartal
Dabei seit: 06.05.2006
Mitteilungen: 2730
  Beitrag No.50, eingetragen 2023-02-12

Hallo ebikerni Achtung, die vorherige Post wurde nach etwas übersichtlicher abgeändert. Mein Vorschlag wäre, nimm Möglichkeit 2 (die mit Goß B). Ist am einfachsten umzusetzen. Geringste Fehleranfälligkeit.


   Profil
ebikerni
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 17.10.2020
Mitteilungen: 272
  Beitrag No.51, vom Themenstarter, eingetragen 2023-02-13

Hallo Knaaxx, ich habe die 2.Möglichkeit mit Erfolg angewendet, die Zeile b=(a+c)... B=vorangestellt und die richtigen Werte b und c erhalten. Vielen Dank für Deine wertvollen Hinweise. Gruß ebikerni


   Profil
ebikerni hat die Antworten auf ihre/seine Frage gesehen.
Seite 2Gehe zur Seite: 1 | 2  

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]