Jens86: Code von Python zu Matlab umschreiben?

Hallo Leute,

auch wenn es nicht direkt etwas mit HTML/CSS zu tun hat, erlaube ich mir dennoch eine Frage zur allgemeinen Programmierung hier zu stellen. Dabei geht es um ein Portieren eines Python-Codes nach Matlab.

Blöderweise kenne ich mich in Python so gut wie nicht aus und habe nach einigem Suchen auch nicht wirklich einen "Crash-Kurs" gefunden, der mir weiterhelfen könnte.

Die folgende Funktion stellt die Rosenbrock-Wanner Methode der Ordnung 2 dar:

def row_2_step(f, Jf, yi, h):

    yi = atleast_2d(yi)
    n = yi.shape[0]
    a = 1.0/(2.0 + sqrt(2.0))
    I = identity(n)
    J = Jf(yi)
    A = I - a*h*J

    b1 = f(yi)
    k1 = solve(A, b1)

    b2 = f(yi+0.5*h*k1) - a*h*dot(J,k1)
    k2 = solve(A, b2)

    yip1 = yi + h*k2
    return yip1

Darin ist f: Die rhs Funktion f(x) Jf: Jacobi-Matrix J(x) der Funktion: R^(nx1) -> R^(nxn) yi: aktueller Wert y_i zur Zeit ti h: Schrittweite

Wobei im weiteren Algorithmus dann

   l = 25
   f = lambda y: l*y*(1-y)
   Jf = lambda y: l-2*l*y

gesetzt wird.

... leider verstehe ich ein paar Python-Funktionen nicht bzw. wüsste keine 'Entsprechung' in Matlab. Vielleicht kann mir jemand weiterhelfen, das wäre super!

Danke im Voraus, Jens86

  1. Tach,

    Die folgende Funktion stellt die Rosenbrock-Wanner Methode der Ordnung 2 dar:

    def row_2_step(f, Jf, yi, h):
    
        yi = atleast_2d(yi)
        n = yi.shape[0]
        a = 1.0/(2.0 + sqrt(2.0))
        I = identity(n)
        J = Jf(yi)
        A = I - a*h*J
    
        b1 = f(yi)
        k1 = solve(A, b1)
    
        b2 = f(yi+0.5*h*k1) - a*h*dot(J,k1)
        k2 = solve(A, b2)
    
        yip1 = yi + h*k2
        return yip1
    

    das ist nicht vollständig; welche Imports gehören noch zu der Methode, numpy?

    ... leider verstehe ich ein paar Python-Funktionen nicht bzw. wüsste keine 'Entsprechung' in Matlab.

    Welche?

    mfg
    Woodfighter

    P.S. Bitte weise auf Crosspostings (https://stackoverflow.com/questions/31170329/implementation-of-rosenbrock-wanner-method-python-vs-matlab, https://math.stackexchange.com/questions/1346162/python-vs-matlab) hin, damit Leute sich nicht, für bereits beantwortete Dinge, Arbeit machen.

    1. Hallo,

      das ist nicht vollständig; welche Imports gehören noch zu der Methode, numpy?

      numpy import *
      numpy.linalg import solve, norm

      Welche?

      nun ja, atleast_2d() bzw. .shape[], aber hier habe ich (siehe Crossposting) schon eine Antwort dazu; allerdings weiß ich nicht ob es für atleast_2d() ein äquivalent in MATLAB gibt, oder ob ich hierzu eine Abfrage bauen müsste, die mir entsprechende Arrays dann zurückwirft ...

      P.S. Bitte weise auf Crosspostings (https://stackoverflow.com/questions/31170329/implementation-of-rosenbrock-wanner-method-python-vs-matlab, https://math.stackexchange.com/questions/1346162/python-vs-matlab) hin, damit Leute sich nicht, für bereits beantwortete Dinge, Arbeit machen.

      Sorry; darauf hatte ich gestern leider vergessen.

      LG jens86

      1. Tach,

        allerdings weiß ich nicht ob es für atleast_2d() ein äquivalent in MATLAB gibt, oder ob ich hierzu eine Abfrage bauen müsste, die mir entsprechende Arrays dann zurückwirft ...

        nicht dass ich wüsste, aber meine Matlab-Erfahrungen sind schon relativ lange her. Aus meiner Erfahrung von damals würde ich auch behaupten, dass zu versuchen, einen in einer andern Sprache programmierten Algorithmus, in Matlab zu übersetzen nicht übermäßig hilfreich ist, da Matlab einfach vielfach anders funktioniert als traditionelle Sprachen.

        mfg
        Woodfighter