2016-04-01 5 views
2

Bitte schauen Sie in die angehängte Datei. Ich verwende Mathematica Solve-Funktion, um einige einfache Gleichungen aus der Physik zu lösen. Eine der Gleichungen ist eine If-Funktion, die den Funktionswert definiert, wenn eine Bedingung erfüllt ist. Solve findet fast die richtige Lösung, die selbst eine ConditionalExpression ist. Für die unabhängige Variable θ = 90 ° ist die Antwort von Solve fehlerhaft. Es scheint, dass Solve den Fall vergisst, wenn Cos gleich 0 ist. Warum? Vielen Dank.Mathematica Solve-Funktion gibt falsche Lösung, warum?

Grüße/Mikael Friction Model

+0

Mischen von inhärent symbolischen Operationen 'Solve' mit einer Reihe von Fließkommawerten in der Eingabe sollte in der Regel vermieden werden. Versuchen Sie dies, ohne "W, u" zu spezifizieren und verwenden Sie "Reduce" anstelle von "Solve" – agentp

Antwort

2

Festlegen von Theta als echte löst das Problem.

w = 1500; 
mus = 0.4; 
fv = f Cos[theta Degree]; 
fh = f Sin[theta Degree]; 
fn = fv + w; 
ff = If[mus fn >= 0, mus fn, 0]; 
frul = [email protected][fh == ff, f, Reals]; 
f /. frul /. theta -> 90. 

{600}

f /. frul /. theta -> 90 

{undefiniert}

Gleiche wieder, mit Radiant.

w = 1500; 
mus = 0.4; 
fv = f Cos[theta]; 
fh = f Sin[theta]; 
fn = fv + w; 
ff = If[mus fn >= 0, mus fn, 0]; 
frul = [email protected][fh == ff, f, Reals]; 
f /. frul /. theta -> N[Pi/2] 

{600}

f /. frul /. theta -> Pi/2 

{undefiniert}

1

Vielen Dank Chris.

Ja, gibt es richtige Zahlen liefert richtige Antworten. Das liegt daran, dass Cos [90.0 °] 6.123233995736766E-17 ist, während Cos [90 °] 0 ist. Die Lösung ist die gleiche, aber wir täuschen sie mit endlicher Maschinenpräzision.

Wenn ich mich frage, würde ich sagen, dass dies ein Fehler im Gleichungslöser in Mathematica ist. Die von Solve [] erzeugte Lösung sollte auf Cos []> = 0 testen. Nun testet sie nach Cos []> 0, was für Cos [90 °] nicht zutrifft.

Verwandte Themen