2009-11-06 9 views
7

Jak mogę przekonać Mathematica do eksportu/zapisu/zapisu pliku tekstowego z odpowiednim formatowaniem Fortan77, czyli 72 kolumnami i znacznikiem kontynuacji w szóstej kolumnie?Eksportuj niestandardowe sformatowane wyrażenia z Mathematica

Używam Mathematica do generowania dużych i złożonych wyrażeń analitycznych, które następnie muszę wstawić do wcześniej istniejącego kodu Fortran77. Mam wszystko działa poprawnie w przedniej części Mathematica z FortranForm[] i

SetOptions[$Output, PageWidth -> 72]

Jednak nie mogę dowiedzieć się, jak dostać się do wyjścia Mathematica poprawnie do pliku tekstowego. Chcę coś takiego:

MM11 = mH1**2 + (g2**2*v1**2)/2. - 
    - (g2**2*(v1**2/2. - 
    -  ((v2*Cos(phi2) - (0,1)*v2*Sin(phi2))* 
    -   (v2*Cos(phi2) + (0,1)*v2*Sin(phi2)))/2.))/2. 
... 

ale dostać albo to:

MM11 = FortranForm[mH1^2 + (g2^2*v1^2)/2 - ... 

lub to:

MM11 = mH1**2 + (g2**2*v1**2)/2. - (g2**2* 
(v1**2/2. - ((v2*Cos(phi2) - (0,1)*v2*Sin(phi2))* 
... 
+0

Zmieniłem tytuł pytania na bardziej ogólny, ponieważ odpowiedź rozwiązuje bardziej ogólny problem niestandardowego formatowania wyjściowego w Mathematica. – Timo

Odpowiedz

8

To jest zadanie dla zaskakująco mało znana Splice funkcji. Po pierwsze, należy stworzyć plik szablonu, z rozszerzeniem ".mf", tak:

file = "test.mf"; 

out = OpenWrite[file]; 

WriteString[out, "MH1 = <* form *>"]; 

Close[out]; 

Teraz podczas korzystania Splice, Mathematica automatycznie zastąpi wszystko między <* i *> ograniczników z jego ocenianego formie. Więc jeśli ustawisz

form = 4 + b9^2 + c1^5 + c4^5 + h10^4 + j2 + k10^4 + p10^4 + q5^5 + 
     q8 + s3^3 + s7^2 + t6^3 + u3^2 + u9^3 + x8^4 + z2^3; 

i nazywają

Splice["test.mf", PageWidth -> 72]; 

który automatycznie wnioskować chcesz FortranForm wyjście z rozszerzeniem, a który pozwala na ustawienie PageWidth jako opcja, można uzyskać całkiem przyzwoity skutkować automatycznie wygenerowanego pliku "test.f" (uwaga na nowe rozszerzenie):

MH1 =   4 + b9**2 + c1**5 + c4**5 + h10**4 + j2 + k10**4 + p10**4 + 
    - q5**5 + q8 + s3**3 + s7**2 + t6**3 + u3**2 + u9**3 + x8**4 + 
    - z2**3 

Spójrz na docs dla Splice, aby uzyskać więcej opcji (zmiana nazwy pliku wyjściowego itp.).

+0

Wielkie dzięki! Nie pomyślałem o wypróbowaniu Splice. Teraz wystarczy wykonać dynamiczne generowanie pliku test.mf (np. Na stronie pomocy Splice) i gotowe. – Timo

+0

Pillsy, użyłem 'Splice' do generowania wyczerpujących przypadków testowych dla jakiegoś matematycznego s/w, które pisałem. Bardzo przydatne, ale czasami trudne, aby uzyskać Mathematica w celu uzyskania prawidłowego wyniku. – rcollyer