لطفا وارد شوید یا ثبت‌نام کنید تا به انجمن‌ها دسترسی کامل داشته باشید.



 
امتياز موضوع :
  • 0 رأي - معدل امتيازات : 0
  • 1
  • 2
  • 3
  • 4
  • 5
تبدیل کد Fortran به Matlab
2008-02-25, 01:02 PM,
ارسال : #1
تبدیل کد Fortran به Matlab
برنامه یا package هست که بشه Fortran رو به Matlab تبدیل کرد؟
من شنیدم که هست؛ اگه کسی میدونه ممنون میشم بگه :roll:

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-02-25, 02:29 PM,
ارسال : #2
 
http://www.dsprelated.com/groups/matlab/show/669.php

---
You can call your own C or Fortran subroutines from MATLAB as if they were
built-in
functions. MATLAB callable C and Fortran programs are referred to as
MEX-files.
MEX-files are dynamically linked subroutines that the MATLAB interpreter can
automatically load and execute.

MEX-files have several applications:

Large pre-existing C and Fortran programs can be called from MATLAB without
having to be rewritten as M-files.
Bottleneck computations (usually for-loops) that do not run fast enough in
MATLAB can be recoded in C or Fortran for efficiency.

MEX-files are not appropriate for all applications. MATLAB is a
high-productivity system
whose specialty is eliminating time-consuming, low-level programming in
compiled
languages like Fortran or C. In general, most programming should be done in
MATLAB.
Don't use the MEX facility unless your application requires it.

Check out the documentation in the external interfaces section either in the
matlab help section or at the Mathworks web site (<!-- w --><a class="postlink" href="http://www.mathworks.com">www.mathworks.com</a><!-- w -->).
-----Original Message-----
From: raghu330 [mailto:]
Sent: Wednesday, January 16, 2002 4:05 AM
To:
Subject: [matlab] Fortran to matlab source code conversion Hello All!

I have around 250+ fortran files. and I want to convert them to
MATLAB. Is there any way, this can be done..
Its easy to generate C/C++ code from MATLAB scripts and vice-versa.
but is there a sthg similar for FORTRAN..

thank you all in advance

Cheers
Raghu
نقل قول این ارسال در یک پاسخ
2008-02-26, 05:12 PM,
ارسال : #3
 
ممنون. ولی بهترشو پیدا کردم.
اول با to_f90 کد رو optimize میکنی و بعدش با f2matlab میشه عوضش کرد. ۱ خورده bug هم دارن ولی کلا خوبن.

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-27, 12:01 PM,
ارسال : #4
 
دستور Save تو Fortran دقیقا چکار میکنه؟ مقدار متغیرها رو واسه دفعه بعدی که function خوانده میشه Save میکنه یا مقدار اونارو واسه subroutni که function مورد نظر از اونجا خوانده شده نگه میداره؟
آقای هادیان ممنون میشم کمک کنین با توجه به مهارت تون در Fortarn

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-27, 01:51 PM,
ارسال : #5
 
دستور SAVE مقدار متغيرهاي تعريف شده در يك زيربرنامه (سابروتين يا تابع) را براي دفعه بعد كه وارد اون زيربرنامه ميشين حفظ ميكنه. البته اكثر كامپايلرها بدون دستور SAVE هم در خيلي از موارد اين گزينه را اعمال ميكنند.
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-27, 04:12 PM,
ارسال : #6
 
پس با این تفسیر باید مشابه دستور PERSISTENT در Matlab باشه. آره؟

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-27, 04:49 PM,
ارسال : #7
 
متأسفانه من matlab بلد نيستم Sad
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-27, 05:09 PM,
ارسال : #8
 
سلام
میشه بگیت matlab رو ار کجا دانلود کردین ؟
نقل قول این ارسال در یک پاسخ
2008-03-28, 04:47 PM,
ارسال : #9
 
من matlab رو خیلی وقت پیشا download کردم. بگردین link تو انجمن هست ولی فکر نمیکنم دیگه کار کنه.
آقا هادیان این var=1D20 یعنی چی؟ D چیکار میکنه تو Fortran

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-28, 05:14 PM,
ارسال : #10
 
همان 1E20 است با اين تفاوت كه وقتي D‌استفاده مي‌كنيد عدد بصورت دقت مضاعف است.
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-28, 05:27 PM,
ارسال : #11
 
ببخشین درباره حلقه ها در Fortran اگه برا نمونه for i=1,5 در اینجا i چه مقادیری میگیره؟ ۱و۲و۳و۴و۵ یا ۲و۳و۴و۵و۶ یا ....؟
ممنون

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-28, 05:35 PM,
ارسال : #12
 
فكر كنم منظورتون do i=1,5 باشه كه مقادير 1و2و3و4و5 ر ميگيره و پايان حلقه مقدار i برابر با 6 است.
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-28, 05:42 PM,
ارسال : #13
 
آره. من ۱ کم قاطی کردم زبونارو.
یعنی ۱و۲و۳و۴و۵و۶ وارد حلقه میشن؟ این حلقه چند بار میچرخه؟ ۵ بار یا ۶ بار؟
واسه نمونه do i=1,5 print i, end do چی چاپ میکنه در آخر؟ ۱و۲و۳و۴و۵ یا ۱و۲و۳و۴و۵و۶ ؟
ممنون

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-28, 05:52 PM,
ارسال : #14
 
ببينيد روند كار به اين شكله كه ابتدا كنترل حلقه (در مثال شما i) مقدار شروع را ميگره.
بعد بعد با مقدار نهايي اون را مقايسه ميكنه. اگر گام حلقه مثبت باشه (در مثال شما 1 است) در صورتي كه مقدار كنترل از كوچكتر يا مساوي مقدار نهايي باشه حلقه يكبار اجرا ميشه و در مورد گام منفي اگر كنترل بزرگتر يا مساوي مقدار نهايي باشد.
بعد از يكبار اجرا، به اندازه گام به كنترل حلقه اضافه ميشه و مجدداً كنترل انجام ميشه.
بنابراين در مثال شما كنترل حلقه ابتدا مقدار 1 ميگيره و اجرا ميشه. بعد 2 و بعد 3 و 4 و 5. بعد از اينكه مقدار 5 چاپ شد، كنترل حلقه ميشه 6 كه بزرگتر از مقدار نهايي است و از حلقه خارج ميشه. بنابراين در مثال شما مقادير 1و 2و 3 و4 و5 چاپ ميشوند. اگر بعد از حلقه يك دستور چاپ بگذاريد كه i را چاپ كند مقدار 6 چاپ ميشود.
ضمناً يك نكته را دقت كنيد كه اگر در بدنه حلقه مقدار شروع، پايان يا گام حلقه را تغيير بديد ، اثري در تعداد دفعات اجرا و همچنين مقدار متغير كنترل حلقه ندارند و مقدار متغير كنترل حلقه را هم نميتونيد در بدنه حلقه تغيير بدين. (به نظرم c‌ از اين نظر با فرترن متفاوت باشه ولي مطمئن نيستم.)
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-31, 01:04 PM,
ارسال : #15
 
Matlab از این نظر که در بدنه حلقه نمیشه مقدار متغیر کنترل حلقه را تغییر داد شبیه Fortarn هست ولی مقدار i بعد از خروج از حلقه برابر مقدار نهایی ( در نمونه بالا ۵ ) است.
ممنون واسه توضیح کاملتون.

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-31, 04:07 PM,
ارسال : #16
 
آقا چند تا سوال دیگه:
این INTEGER*4 یا REAL*4 یعنی چی؟
شما واسه اینکه از دستور STOP استفاده نکنین چه راهی رو پیشنهاد میکنین؟
اگه یه متغیری به شکل character*60 fname تعریف شده باشه و بعد در برنامه دستور fname(1:6)='0o.dat' داده شده باشه. این یعنی چی؟
دستور FLOAT و INT چه فرقی دارن با هم؟

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-31, 11:06 PM,
ارسال : #17
 
integer*4 يعني براي ذخيره عدد 4 بايت استفاده مي‌كنه و پيش‌فرض كامپايلرها است (البته اين عدد براي برخي كامپايلرها مثل salford متفاوت است ولي تا آنجا كه من ميدونم بقيه يكسان عمل مي‌كنند.) real*4 عدد اعشاري با دقت معمولي است كه فكر مي‌كنم معادل float در c است.
ميتونيد روند اجراي برنامه را با شرط و موارد ديگه طوري تنظيم كنيد كه اتوماتيك اجراي برنامه به انتها برسه و دستور Stop نداشته باشيد ولي بودنش چيز بدي نيست.
character*60 يك رشته حرفي بطول 60 كاراكتر ايجاد ميكنه. fname(1:6)='0o.dat' در محل‌هاي 1 تا 6 رشته حرفي عبارتي كه سمت راست نوشتيد را جايگزين مي‌كند.
float‌و int در C معادل real يا real*4 و integer‌ در فرترن است.
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-04-10, 04:33 PM,
ارسال : #18
 
سلام دوباره
آقای هادیان در فهمیدن منظور این کد در جمله IF یه کم شک دارم. شما چی فکر میکنین؟
کد :
DO 15 NL=NJ,NK
      IB=IB-1
      A=flowmatrix(NL,IB)
      IF(A) 12,15,12
   12 A=A/PIVT
      flowmatrix(NL,IB) = A
      JB=IB+1
      KB=IB+NK-NI
      LB=KDIAG-IB
       DO 10 MB=JB,KB
   10 flowmatrix(NL,MB)=flowmatrix(NL,MB)+A*flowmatrix(NI,LB+MB)
   15 CONTINUE

میخوام بدونم کنترل برنامه چطوریه در IF و این ۱۵ یعنی که مقدار بعدی NL در حلقه اجرا میشه؟ برای نمونه اگه NL از ۱ تا ۵ باشه و در NL=3 مقدار A برابر صفر شه؟

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-04-12, 09:31 AM,
ارسال : #19
 
اين دستور IF ‌محاسباتي از موارد منسوخ زبان فرترن است. در برنامه شما اگر A مقدار منفي يا مثبت باشد كنترل به خط شماره 12 منتقل مي‌شود (همان دستور goto) و اگر A برابر با صفر باشد كنترل به خط 15 مي‌رود. همانطور كه مي‌دانيد اين دستور اولاً مساوي بودن را بايد بررسي كند كه در مورد اعداد حقيقي بدليل نحوه ذخيره آنها در حافظه مي‌تواند همراه با خطا باشد و همچنين عملاً سه دستور goto را در درون خود دارد كه استفاده از اين دستور هم منسوخ شده و توصيه نمي‌شود. در مثال شما اگر A برابر با صفر شود، كنترل به خط 15 ‌ميرود و در نتيجه حلقه با مقدار بعدي يعني NL=4 به كار خود ادامه مي‌دهد. راهنماي مربوط به اين قسمت را manual‌ فرترن براتون مي‌گذارم.
کد :
IF -- Arithmetic
Statement: Conditionally transfers control to one of three statements, based on the value of an arithmetic expression. It is an obsolescent feature in Fortran 95 and Fortran 90.

Syntax

IF (expr) label1, label2, label3

expr
Is a scalar numeric expression of type integer or real (enclosed in parentheses).

label1, label2, label3
Are the labels of valid branch target statements that are in the same scoping unit as the arithmetic IF statement.

Rules and Behavior

All three labels are required, but they do not need to refer to three different statements. The same label can appear more than once in the same arithmetic IF statement.

During execution, the expression is evaluated first. Depending on the value of the expression, control is then transferred as follows:

If the Value of expr is:  Control Transfers To:  
Less than 0  Statement label1  
Equal to 0  Statement label2  
Greater than 0  Statement label3
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-04-15, 03:03 PM,
ارسال : #20
 
خیلی ممنون. دیگه من از این به بعد از تشکر کردن فاکتور میگیرم و فقط سوال میکنم.
این کد به نظرم خیلی مسخره میاد. میخواستم ببینم واقعا همینتوره یا نه!؟

کد :
dummy_w=SIGN(-1,dummy_w)*DABS(dummy_w)

به نظرم این خط یعنی dummy_w = dummy_w درسته؟ بود و نبودشم هیچ فرقی نداره! آره؟

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ


رفتن به انجمن :


کاربران در حال مشاهده موضوع : 1 مهمان