2009-11-06 16 views
7

Mathematica'yı uygun bir Fortan77 biçimlendirmesi olan bir metin dosyasına dışa aktarma/kaydetme/yazma, yani altıncı sütundaki 72 sütun ve bir devam işaretini nasıl alabilirim?Özel biçimlendirilmiş ifadeleri Mathematica 'dan dışa aktarma

Önceden var olan Fortran77 koduna eklemem gereken büyük ve karmaşık analitik ifadeler oluşturmak için Mathematica kullanıyorum. Her şeyin Ancak, bir metin dosyasına doğru çıkışa Mathematica'yı nasıl bilemiyorum FortranForm[] ve

SetOptions[$Output, PageWidth -> 72]

ile Mathematica'nın ön ucuna doğru çalışma var. Böyle bir şey istiyorum:

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. 
... 

ama ya bu olsun:

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

veya bu:

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

Sorunun başlığını daha genel olacak şekilde değiştirdim, çünkü cevap, Mathematica'daki özel çıktı biçimlendirmesiyle ilgili genel sorunu çözüyor. – Timo

cevap

8

Bu şaşırtıcı az bilinen Splice fonksiyon için bir iştir. Öncelikle, bu yüzden gibi uzantılı ".mf" ile, bir şablon dosyasını olun:

file = "test.mf"; 

out = OpenWrite[file]; 

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

Close[out]; 

Şimdi Splice kullandığınızda, Mathematica otomatik olarak değerlendirdi formu ile <* ve *> ayraçları arasındaki her şeyi değiştirecektir. Eğer

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; 

ayarlamak ve çağrı Yani

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

otomatik dosya uzantısından FortranForm çıkışını istediğiniz anlaması edecek olan ve bir seçenek olarak PageWidth ayarlamak için izin veren bir oldukça iyi alacak (yeni uzantı unutmayın) otomatik olarak oluşturulan dosyada "test.f" neden:için docs de

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 

Bak Daha fazla seçenek için(çıktı dosyasının ve benzerinin değiştirilmesi).

+0

Teşekkürler bir demet! Splice denemeyi düşünmemiştim. Şimdi sadece test.mf dosyasının dinamik bir jenerasyonunu (ör. Splice yardım sayfasında) yapmalıyım ve işim bitti. – Timo

+0

Pillsy, yazdığım bazı matematik s/w için kapsamlı test senaryoları oluşturmak için Splice'ı kullandım. Mathematica'nın doğru çıktı üretmesini sağlamak için çok yararlı, ancak bazen zor. – rcollyer

İlgili konular