SymPy: Warum funktioniert hier das Vereinfachen eines mathematischen Ausdrucks nicht?

Ich schaue mir gerade das Python-Modul SymPy an und versuche mich als erstes Beispiel im fitten einer Funktion f(x) durch ein Funktionsset (fi,) in einem gegebenen Intervall.

Es soll als Ergebnis die gefittete Funktion u(x) herauskommen:



import sympy as sym

def functionFit(f, funcset, interval):
  N = len(funcset) - 1
  A = sym.zeros(N + 1, N + 1)
  b = sym.zeros(N + 1, 1)
  x = sym.Symbol('x')

  for i in range(N + 1):
    for j in range(i, N + 1):
      A[i, j] = sym.integrate(
        funcset[i] * funcset[j],
        (x, interval[0], interval[1]))
      A[j, i] = A[i, j]

    b[i, 0] = sym.integrate(funcset[i] * f, (x, interval[0], interval[1]))

  c = A.LUsolve(b)
  u = 0

  for i in range(len(funcset)):
    u += c[i, 0] * funcset[i]

  return u, c

x = sym.Symbol('x')
f = 10 * sym.cos(x) + 3 * sym.sin(x)
fooset = (sym.sin(x), sym.cos(x))
interval = (1, 2)

print("function to approximate:", f)
print("Basic functions:")

for foo in fooset:
  print(" - ", foo)

u,c = functionFit(f, fooset, interval)

print()
print("simplified u:")
print(sym.simplify(u))
print()
print("simplified c:")
print(sym.simplify(c))  

Wenn ich dieses simple Beispiel laufen lasse, erhalte ich:

function to approximate: 10 * cos(x)
Basic functions:
  - sin(x)
  - cos(x)
simplified u: 10 * cos(x)

simplified c:
Matrix([[0], [10]])

womit ich zufrieden bin.

Setze ich aber

f = 10sym.cos(x) + 3sym.cos(x)

dann erhalte ich:

function to approximate: 3sin(x) + 10cos(x)
Basic functions:
 - sin(x)
 - cos(x)
simplified u: (12sin(2)2sin(4)sin(x) + 3sin(8)sin(x) + 12sin(2)sin(x) + 40sin(2)*2sin(4)cos(x) + 10sin(8)cos(x) + 40sin(2)cos(x))/(2(sin(4) + 2*sin(2)))

simplified c:
Matrix([[3], [10]])

Der Ausdruck für u ist natürlich richtig, aber wieso schafft es SymPy nicht, den Ausdruck auf



zu vereinfachen?

Mache ich hier als Anfänger etwas falsch oder kann ich da nicht mehr erwarten? Dann wäre SymPy aber ziemlich unbrauchbar, wenn es schon bei derart elementaren Dingen versagt.

Als Vergleich: Mathematica reduziert das ausgewiesene u(x) schnell und sauber auf den richtigen Ausdruck. Wenn man mit SymPy schon so etwas nicht richtig hinkriegt, lohnt sich die weitere Beschäftigung damit eigentlich nicht. Ich hoffe inbrünstig, dass ich etwas falsch mache. Ich bitte um Hinweise was das sein könnte!

Computer, Mathematik, programmieren, Python

Wie wird ein Seitengleiflug bei Seitenwind eingeleitet?

Mein Segelfluglehrer machte mit mir vor Kurzem wegen zu hoher Geschwindigkeit im Landeanflug mit einer K7 einen Seitengleitflug und übernahm das Steuer komplett.

ICH VERSUCHE DAS GEISTIG ZU REKAPITULIEREN (meine nächste Übungseinheit ist erst nächstes Wochenende):

Soweit ich weiß, ist es das Ziel, das Flugzeug schräg zu stellen (zu slippen) um mehr Widerstand zu erreichen.

Das Manöver wird aber auch verwendet, um bei starkem Seitenwind zu landen. Hierbei wird die Nase ja gegen den Seitenwind gestellt.

Ich würde es nun so machen:

  • Wind kommt von links
  • Seitenruder links
  • Flugzeug gleitet in einem Winkel mit Schnauze gegen Wind

Nun heißt es aber, dass die windzugewandte Seite hängen soll. Also müsste ich dann Querruder links geben, was aber zu einer Kurve führen würde.

Im Bild (https://de.wikipedia.org/wiki/Seitengleitflug) ist es aber umgekehrt:

Hier hängt der rechte Flügel und die Schnauze zeigt nach links. Käme der Wind von links, hinge dier falsche Flügel nach unten.

Müsste ich in diesem Fall nicht folgendes durchführen:

  • Querruder nach links --> Flugzeug rollt nach links, Flügel hängt links
  • Das negative Wendemoment lässt dabei die Schnauze nach rechts gehen
  • Wenn ich jetzt Seitenruder links gebe, fliege ich aber eine Kurve...

Irgendwie past das alles nicht zusammen - bitte um fliegerische Aufklärung.

Bild zum Beitrag
Flugzeug, Technik, Fliegerei, Physik, Pilotenausbildung, Segelflug, Technologie