| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| AMB 2024 |
Autor
|
Thema: Gleichungen - SWX für positive Überaschungen gut (434 mal gelesen)
|
Kalle Mitglied Student
Beiträge: 706 Registriert: 14.04.2002
|
erstellt am: 26. Apr. 2002 11:44 <-- editieren / zitieren --> Unities abgeben:
Aloah, nachdem ich mal wieder versuche so viel wie möglich zu automatisieren und zu vereinfachen habe ich eine Möglichkeit gesucht um Werte zu runden bzw. Nachkommastellen abzuschneiden. Da ich weiss, dass ich die Visual Basic Anweisung "IIF" in Gleichungen verwenden kann, dachte ich mit, dass es vielleicht auch mit Befehlen zum runden klappen könnte. Und siehe da... es klappt. Falls also irgendjemand keine krummen Werte haben möchte, so kann er sich die Nachkommastellen der Ergebnisse mit "INT" bzw. mit "FIX" abschneiden lassen. Und die Werte mathematisch richtig runden lassen kann man sich mit "ROUND" Das sähe dann so aus: "D1@Skizze2" = INT(*Term der einen krummen Wert ergibt*) bzw. "D1@Skizze2" = ROUND(*Term der einen krummen Wert ergibt*) Vermutlich gibt es nicht viele Leute die dies nutzen werden, aber wenn wenigstens einem geholfen ist hat sich Posting gelohnt. Schönes Wochenende Kalle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mike Mitglied Konstrukteur
Beiträge: 544 Registriert: 23.06.2000 SolidWorks Professional 2012 SP5, 64bit; Xenon 2,66MHz; NVidia Quadro FX 1500; 6GB RAM; Windows 7
|
erstellt am: 27. Apr. 2002 09:33 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
|
JohNexus Mitglied Techniker für SWX
Beiträge: 91 Registriert: 03.04.2002 Das Schicksal kann dich nur an den Ort der Entscheidung führen.
|
erstellt am: 02. Mai. 2002 08:28 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
Ja, das is ein guter Tip, hab ich mir eigentlich eh gedacht das das mit runden gehen muss, aber mit einer IF-Anweisung, also das hab ich nicht zusammengebracht. Wenn du mal reinschaust könntest du viell. einen Beispieltext wie du das machst reinstellen, bzw. wie halt sone IF in ner GLeichung ausschaut. Danke Mfg Johannes Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 02. Mai. 2002 09:14 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
|
JohNexus Mitglied Techniker für SWX
Beiträge: 91 Registriert: 03.04.2002 Das Schicksal kann dich nur an den Ort der Entscheidung führen.
|
erstellt am: 02. Mai. 2002 09:29 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
|
Andreas Müller Mitglied Masch. Ing. HTL / Betriebsing. STV
Beiträge: 1151 Registriert: 11.04.2001
|
erstellt am: 02. Mai. 2002 09:41 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
Hallo Johannes. Eine IIF (nicht IF!) sieht folgendermassen aus: "Mass1" = IIF (Vergleich, Wert wenn richtig, Wert wenn falsch) Beispiel: "D2@Skizze1" = IIF ("D1@Skizze1" < 50, 10, 40) Heisst: D2 ist 10 wenn D1 kleiner oder gleich 50, wenn D1 grösser als 50, dann ist D2 40. Ich persönlich rate aber zur Vorsicht mit solchen Gleichungen, weil: 1. Wenn jemand das Modell bearbeitet, der das Gleichungssystem nicht kennt, wird sich denken: "Was verfl..... macht den das Ding ???? 2. Verhalten sich die Vergleiche offenbar nicht so, wie man es sich gewohnt ist! In obigem Beispiel heisst "<" nämlich nicht "kleiner als" sondern "kleiner als oder gleich" (entspricht im normalen Programmslang "<=")!! Man kann in einer Gleichung offenbar nur 1 Gleichheitszeichen setzen! Eine Gleichung wie "D2@Skizze1" = IIF ("D1@Skizze1" = 50, 10, 40) kann scheinbar nicht eingegeben werden! Dies erschwert das Lesen der Gleichung und führt IMHO zu Fehlern. EDIT Boahh, war der Stefan wieder schneller (ich muss mal einen Kurs für schnelles Beiträge schreiben machen )!ENDEDIT ------------------ Gruss Andreas A+E Müller AG [Diese Nachricht wurde von Andreas Müller am 02. Mai 2002 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JohNexus Mitglied Techniker für SWX
Beiträge: 91 Registriert: 03.04.2002 Das Schicksal kann dich nur an den Ort der Entscheidung führen.
|
erstellt am: 02. Mai. 2002 09:54 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
|
Kalle Mitglied Student
Beiträge: 706 Registriert: 14.04.2002
|
erstellt am: 02. Mai. 2002 17:53 <-- editieren / zitieren --> Unities abgeben:
Aloah, Der Grund für das nicht funktionieren von mehreren Gleichheitszeichen in einer Gleichung ist (so wurde es mir zumindest erklärt) die Tatsache, dass man Gleitkommazahlen nicht auf Gleichheit prüfen kann. Ich bin kein Mathematiker oder so was, von daher akzeptiere ich (derzeit) noch diesen Umstand, aber vielleicht will sich da einer von euch weiter reindenken und hier mal 'ne genaue Erklärung für diesen Sachverhalt abgeben. Bis dann Kalle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 03. Mai. 2002 08:05 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
Hallo zusammen, Zitat: Der Grund für das nicht funktionieren von mehreren Gleichheitszeichen in einer Gleichung ist (so wurde es mir zumindest erklärt) die Tatsache, dass man Gleitkommazahlen nicht auf Gleichheit prüfen kann.
Also das halte ich gelinde gesagt für Quatsch, dann würde ja keine Programmiersprache das beherrschen. Da hat einer ein bischen viel durcheinander gebracht. Auch in VBA (und selbst im alten VB3) das "=" als Vergleichsoperator zugelassen (siehe auch Onlinehilfe im VBA von SolidWorks), logischerweise auch für Doubles Ich vermute einen viel trivialeren Grund: der Gleichungsparser, der die eingegebenen Gleichungen analysieren, hat eben diese (und noch ein paar andere) Einschränkung; das macht die Sache eben einfach, wenn man nur nach einem Gleicheitszeichen suchen muss um die Gleichungen nach dem Parametern zu zerlegen. Gerade für das IIF() gibt's aber einen ganz einfachen Workaround: einfach die Bedingung umdrehen, also nicht IIF(X = Y,gleich, ungleich) sondern andersrum IIF(X <> Y, ungleich, gleich) Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JohNexus Mitglied Techniker für SWX
Beiträge: 91 Registriert: 03.04.2002 Das Schicksal kann dich nur an den Ort der Entscheidung führen.
|
erstellt am: 03. Mai. 2002 08:30 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
Also ich kann StefanBerlitz nur Recht geben zumindest aufgrund meiner bescheidenen Programmierkenntnisse. Also wenn es noch jemand interessiert, das kommt auch vom Programmieren, man kann auch 2 Bedinungen angeben und mit "and" oder "or" miteinander verknüpfen.....falls es irgendwer noch nicht gewußt hat.... Mfg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasK Administrator Daseinsinformatiker
Beiträge: 1022 Registriert: 02.03.2000 Unter allen Umständen kann Vernunft durch Vernunft aufgeklärt werden (Alexander von Humboldt)
|
erstellt am: 03. Mai. 2002 08:37 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
Zitat: Original erstellt von StefanBerlitz: ... Also das halte ich gelinde gesagt für Quatsch ...
Jetzt muss ich mal ein wenig Klugscheissern und Kalle, bzw. dem, der es Kalle verraten hat Recht geben: Man kann nicht Fließkommazahlen auf Gleichheit prüfen. Also, man kann schon, aber das Ergebnis ist nicht verwertbar!!! Beispiel : (55 * PI) = (550 * PI) / 10 ??? Nein, es ist nicht gleich! Die Programmiersprachen (alle! ausser die, die streng Rational, also mit Brüchen rechnen) bekomme hier eine Differnez von ca. 3,irgendwas E-39. Also nicht NULL! In Programmen sollte daher immer eine Funktion verwendet werden, die die Differenz auf einen annehmbaren (praxisnahen) Wert prüft. Wenn die absolute Differenz zweier Zahlen kleine als z.B. 0.000000001 ist, dann sollten die Zahlen als gleich betrachtet werden. Von daher macht ein Vergleich auf Gleichheit innerhalb von Programmen für Fließkommazahlen (Doubles u.a.) mit dem Vergleichsoperator '=' wirklich KEINEN Sinn und man sollte es lassen...
------------------ Beste Gruesse Andreas Kippenberg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JohNexus Mitglied Techniker für SWX
Beiträge: 91 Registriert: 03.04.2002 Das Schicksal kann dich nur an den Ort der Entscheidung führen.
|
erstellt am: 03. Mai. 2002 09:42 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
Ja, genauso wirds beim Programmieren gemacht...man legt die ANzahl der Nachkommastellen fest und läßt dann vergleichen, ist irgendwie logisch dass nur so gehen kann weil theoretisch zumindest unendlich viele Nachkommastellen bestehen.... Ich sag mal es würd reichen wenn es bei solchen Vergleichen auf 10 Nachkommastellen reduziert zumindest ist das meine Meinung und dann wäre ein = durchaus möglich Das geht sogar bei Basic.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 03. Mai. 2002 10:51 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
Okay, ich geb mich geschlagen. Von der Mathematik her ist ein Vergleich von Doubles, die auf ein binäres Zahlensystem abgebildet werden, nicht immer sinnvoll. Mit Funktionen wie Round() oder Fix() (siehe oben) zwingt man dann die Kiste das zu tun, was sie eigentlich auch vonj alleine könnte. Aber damit zu begründen, warum ich in der Gleichung kein = als Vergleichsoperator verwenden kann ist in meinen Augen immer noch Quatsch. Und ausserdem bin ich der Meinung das Karthago zerstört werden müßte Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |