انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: نزدیکترین زبان برنامه نویسی به زبان علم؟  (دفعات بازدید: 26896 بار)

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

آفلاین امید توانا

  • Hero Member
  • *
  • ارسال: 981
  • جنسیت : پسر
حالا یکی برای ما بگه قطری کردن یعنی چی ؟
ماتریس مربعی رو قطری‌شدنی (diagonizable) می‌نامیم اگر پایه‌ای برای فضای برداری وجود داشته باشه که نمایش ماتریس در اون پایه یک ماتریس قطری باشه. به عباریت دیگه ماتریس A رو قطری‌شدنی می‌نامیم هرگاه ماتریس وارون‌پذیر P و ماتریس قطری D وجود داشته باشه که D=P^(-1) A P. خود ماتریس قطری یعنی ماتریسی که همه درایه‌هایی که روی قطری اصلی نیستند صفر باشند. قطری کردن ماتریس به این سادگی‌ها نیست که یک ماتریس رو بگیری و از اون ماتریسی جدید بسازی که فقط درایه‌های غیر قطر اصلی رو توش صفر کرده باشی. یعنی دوستان فکر می‌کنن که واقعا یک کتابخانه تو فورترن یا هر زیان دیگه می‌نویسن تا این کار رو انجام بده ](*,).
برگشت به سوال اصلی این پست، اول اینکه من خودم رشته ریاضی هستم و استخون تو این راه خورد کردم. راهنمایی هم کردم در مورد زبانهای مفید این رشته. توصیه کلی اینه که الگوریتم نویسی رو یاد بگیری اول و بعد هر زبانی رو که احتیاج داشتی در عرض ۲ هفته کامل یادمی‌گیری. توصیه دوم که در اثر مطالعه زبان D به مدت ۲ هفته دستم اومده: بسیار زبان خوبی برای همه رشته‌ها به خصوص رشته ریاضی است. نگاهی به کتابخانه‌های std.algorithm و std.array  و std.range بیندازید تا متوجه شوید.

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1319
حالا یکی برای ما بگه قطری کردن یعنی چی ؟
ماتریس مربعی رو قطری‌شدنی (diagonizable) می‌نامیم اگر پایه‌ای برای فضای برداری وجود داشته باشه که نمایش ماتریس در اون پایه یک ماتریس قطری باشه. به عباریت دیگه ماتریس A رو قطری‌شدنی می‌نامیم هرگاه ماتریس وارون‌پذیر P و ماتریس قطری D وجود داشته باشه که D=P^(-1) A P. خود ماتریس قطری یعنی ماتریسی که همه درایه‌هایی که روی قطری اصلی نیستند صفر باشند. قطری کردن ماتریس به این سادگی‌ها نیست که یک ماتریس رو بگیری و از اون ماتریسی جدید بسازی که فقط درایه‌های غیر قطر اصلی رو توش صفر کرده باشی. یعنی دوستان فکر می‌کنن که واقعا یک کتابخانه تو فورترن یا هر زیان دیگه می‌نویسن تا این کار رو انجام بده ](*,).
برگشت به سوال اصلی این پست، اول اینکه من خودم رشته ریاضی هستم و استخون تو این راه خورد کردم. راهنمایی هم کردم در مورد زبانهای مفید این رشته. توصیه کلی اینه که الگوریتم نویسی رو یاد بگیری اول و بعد هر زبانی رو که احتیاج داشتی در عرض ۲ هفته کامل یادمی‌گیری. توصیه دوم که در اثر مطالعه زبان D به مدت ۲ هفته دستم اومده: بسیار زبان خوبی برای همه رشته‌ها به خصوص رشته ریاضی است. نگاهی به کتابخانه‌های std.algorithm و std.array  و std.range بیندازید تا متوجه شوید.
ربطی به svd دارد؟

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1319
آره مثل اینکه دارد!

کد تصحیح شده در زبان R (امید وارم این بار درست باشد!)
> A=matrix(1:4,2)
> A
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> diag(diag(A)) # Just keep the diag
     [,1] [,2]
[1,]    1    0
[2,]    0    4
> result=svd(A)
> result
$d
[1] 5.4649857 0.3659662

$u
           [,1]       [,2]
[1,] -0.5760484 -0.8174156
[2,] -0.8174156  0.5760484

$v
           [,1]       [,2]
[1,] -0.4045536  0.9145143
[2,] -0.9145143 -0.4045536

> diag(result$d)
    [,1]      [,2]
[1,] 5.464986 0.0000000
[2,] 0.000000 0.3659662
 
البته با eigen(A) هم میشه مستقیم مقادیر eigen را بدست آورد.
واقعیتش من حتی دوره دبیرستان هم رشتم ریاضی نبوده ولی حدس می زدم یک جای کار مشکل داره!

« آخرین ویرایش: 14 دی 1391، 10:38 ق‌ظ توسط alend »

آفلاین سید مسعود امامیان

  • Hero Member
  • *
  • ارسال: 951
حالا یکی برای ما بگه قطری کردن یعنی چی ؟
توصیه کلی اینه که الگوریتم نویسی رو یاد بگیری اول و بعد هر زبانی رو که احتیاج داشتی در عرض ۲ هفته کامل یادمی‌گیری.

چه کتاب هایی رو برای الگوریتم نویسی پیشنهاد می کنید؟
به عمل کار برآید     به سخندانی نیست . . .

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1319
« آخرین ویرایش: 07 فروردین 1392، 01:24 ق‌ظ توسط alend »

آفلاین کیان

  • High Hero Member
  • *
  • ارسال: 2338
  • جنسیت : پسر
صفر کردن همه آرایه های ماتریس مربعی بجز قطر اصلی

باید تمام مقادیر رو کاربر وارد کنه بعدش به غیراز قطر اصلی همه رو صفر کنه یا کاربر فقط مقادیر روی
قطر اصلی رو باید وارد کنه ؟
نه اینکه آرایه رو دستی صفر کنیم!
معمولا یک همبستگی ماتریسی داریم. مجموعه ای از ماتریسها که محصول یک دستگاه هستند. یکی از این ماتریس ها رو به عنوان پایه انتخاب میکنیم. معمولا به پایه خصوصیاتی نسبت میدن که یکی اش قطری بودنه. با یک سری محاسبات در صورت وجود یک سری شرایط که آقای امید توانا در بالا گفتند پایه رو قطری میکنیم و بقیه ماتریسها رو با داشتن پایه دوباره حساب میکنیم. یک روش اینطوریه که آرایه های ماتریس هدف رو a b c d ...‌ میذارند و شروع میکنند به حل معادلات مجهولی که وجود داره. هر چی ماتریس چگالتر باشه (صفر کمتری داشته باشه) محاسبه زمانبرتر میشه. حالا شما یک ماتریس 30000ٓx30000 در نظر بگیر‌ که چه قدر محاسبه میبره.

نقل‌قول
توصیه دوم که در اثر مطالعه زبان D به مدت ۲ هفته دستم اومده: بسیار زبان خوبی برای همه رشته‌ها به خصوص رشته ریاضی است. نگاهی به کتابخانه‌های std.algorithm و std.array  و std.range بیندازید تا متوجه شوید.
منابع فارسی داره؟

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1319
اگر مظورت محاسبه عدد ایگن باشد:

system.time(rs<-eigen(data))
   user  system elapsed
209.674 115.278 132.577

برای ماتریکس 3000*3000 و ۲.۸GH cpu، ماتریس دنس و اعداد اعشاری با دقت مضاعف

یک سری کتایخانه فعال نبود بعد از فعال سازی بیشتر آنالیز به صورت موازی انجام شد:
user  system elapsed
183.139   0.344  43.325
« آخرین ویرایش: 14 دی 1391، 02:18 ب‌ظ توسط alend »

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
خوب ببینید این کار یک چیزی هست مایه های کاری که من نوشتم . یعنی بخش خواندن از فایل و ساختن آرایه های دو بعدی ( ماتریس ) باید اونجوری که نوشتم انجام بشه . چه 10 درایه داشته باشه چه 100000 درایه . دسترسی به درایه های آرایه دو بعدی رو هم که در سی پلاس دیدید ( البته روش های دیگه ای هم هست لاکن اون روش آسون تریته ) .
خوب می بینید که بخش انجام قطری کردن در R   همه خودکار انجام میشه . لاکن سی پلاس زبان رویه ای هست و باید بهش بگید چی کار کنه . در سی پلاس این محاسبات روی ماتریس پایه و ماتریس های دیگه رو باید دستی انجام بدید
اگر هدفتون زودتر رسیدن به پاسخ هست خوب R بهتره . اگر هدفتون پیاده کردن الگوریتم و روشن تر شدن الگوریتم برای خودتون هست سی پلاس بهتره .

آفلاین r_m1232002

  • Full Member
  • *
  • ارسال: 143
تا اینجا سایر دوستان مطالب مفیدی رو مطرح کردن اما جای یک نگاه از بالا به این مطلب رو خالی دیدم که سعی دارم در حد توان خود در این رابطه توضیح بدم. در آغاز هم متذکر بشم که رشته بنده مهندسی کامپیوتر هست اگرچه تمام تلاش خود رو می کنم تا از دید شما به قضیه نگاه کنم.

هدف از زبان های برنامه نویسی حل مسایل با استفاده از راه حل هایی ست که خود ما آنها را می دانیم با این تفاوت که کامپیوتر ها منابع بیشتری نسبت به ما در دنبال کردن راه حل های ما دارند و می توانند نسبت به ما با سرعت بیشتر و بدون خستگی به پاسخ برسند.
به این ترتیب از این دیدگاه کل فرایند برنامه نویسی را می توان عمل شرح راه حل مساله به شکلی قابل فهم برای کامپیوتر دانست. و این «شکل قابل فهم برای کامپیوتر» دقیقا همان چیزی است که وجه تمایز زبان های برنامه نویسی است.

به طور کلی «شکل قابل فهم راه حل مساله» برای ما انسان ها و کامپیوتر ها بسیار متفاوت است و عمل برنامه نویسی تلاشی است برای تبدیل یک «شکل قابل فهم» به «شکل قابل فهم» دیگر.
فاصله ی میان این دو «شکل قابل فهم» متناسب با میزان تلاشی است که ما باید در حین فرایند برنامه نویسی متحمل شویم. به این ترتیب هرچه این فاصبه کمتر باشد ما نیاز به تلاش کمتری برای رسیدن به مقصود خود داریم.

بیایید ابتدا به «شکل قابل فهم» انسانی نگاهی بیاندازیم. آنچه به عنوان فرمول ها و روابط ریاضی جهت حل مساله بر روی کاغذ نوشته می شوند به تنهایی کافی نیستند. همان طور که بارها به تجربه دیده اید برای فهم یک راه حل ریاضی ما به توضیحات متنی هم نیاز داریم. این توضیحات به همراه روابط ریاضی مدلی را در ذهن ما می سازند که ما را قادر به درک راه حل مساله می سازد. به این ترتیب نهایتا هدف ایجاد یک مدل از شیوه حل مساله در ذهن ما است.

حال بیایید تا به «شکل قابل فهم» کامپیوتری بپردازیم. زبان اصلی کامپیوتر که با آن کار می کند زبان ماشین نام دارد. اگرچه این زبان قابل فهم برای انسان است اما چنان فاصله ای با «شکل قابل فهم» انسانی دارد که ارتباط با آن مستلزم صرف تلاش بسیار زیادی است. بنابراین دانشمندان این رشته بر آن شدند تا این فاصله را کمتر کنند آن هم با ایجاد واسطه هایی که میان ما و ماشین قرار بگیرند و به شکلی نقش مترجم را بازی کنند. این واسطه ها همان زبان های برنامه نویسی هستند.
اما زبان های برنامه نویسی نیز با ایده های متفاوتی پیاده شدند که موجب شد بتوان آن ها را در خانواده های مختلفی طبقه بندی کرد. از این دید این خانواده ها را Programming Paradigms  می نامند.یک پارادیگم برنامه نویسی در واقع روش فکر کردن ما را در برخورد با کامپیوتر مشخص می سازد. روش فکر کردنی که مطابق با انتظارات زبان های متعلق به آن خانواده است. پارادیگم های بسیاری موجود می باشند که من به شرح سه مورد از پراستفاده ترین های آنان بسنده می کنم.
پارادیگم نخست با نام برنامه نویسی ساخت یافته شناخته می شود. در این پارادیگم روش تفکر ما به این شکل است که هر برنامه ( یا همان شرح راه حل یک مساله) مجموعه ای از فرمان های پی در پی است که توسط کامپیوتر اجرا می گردد. این فرمان ها شامل محاسبات ریاضی ساده ، ذخیره و بازیابی مقادیر در حافظه ، شرط ها و حلقه ها می باشند. به این ترتیب زبان های این خانواده از ما انتظار دارند تا راه حل مساله را به شکل محاسبات ریاضی بسیار ساده بشکنیم و به ترتیب به آنها دیکته کنیم. واضح است که به این ترتیب این زبان ها قادر هستند هر نوع راه حل مساله ای را به زبان ریاضیات انجام دهند زیرا نهایتا پیچیده ترین توابع و عملگرهای ریاضی نیز بر اساس مفاهیم ابتدایی بنا شده اند. اما همان طور که به نظر می رسد شرح تمامی این مسایل به ساده ترین مفاهیم ریاضی بسیار بسیار زمان بر و گاها دشوار می باشد. درست همانند اینکه به طور مثال شما سعی کنید مفاهیم معادلات دیفرانسیل را به کسی که تنها ریاضیات ابتدایی را می داند شرح دهید. ابتدا باید برای این شخص مفهوم مشتق را شرح دهید . سپس مفهوم انتگرال را تا در نهایت بتوانید معادلات دیفرانسیل را به این شخص آموزش دهید. در برخورد با این زبان ها شما عملا تمامی این فرایند را طی می کنید و مرحله به مرحله باید این مطالب را برای کامپیوتر خود شرح دهید تا سرانجام بتوانید برنامه ای پیاده سازی کنید که قادر به حل معادلات دیفرانسیل باشد. اما همان طور که می می بینید اگرچه تلاش بسیاری لازم است اما به هرحال این کار قابل انجام است.
پارادیگم دوم با نام برنامه نویسی شی گرا شناخته می شود. در این پارادیگم نحوه تفکر به این شکل است که دنیا از مجموعه ای از اشیا تشکیل می شود که با یکدیگر ارتباط برقرار می کنند. یک شی از دو بخش اساسی تشکیل می شود. خصوصیاتی که دارد و اعمالی که قادر به انجام آنها می باشد. به طور مثال یک ماتریس ریاضی دارای خصوصیات اندازه ، بالا یا پایین مثلثی بودن ، صفر یا همانی یا خلوت یا متقارن بودن و همچنین مقادیر هر درایه می باشد. و قادر است اعمالی چون به توان  رساندن خود ، ترانهاده خود را محاسبه کردن ، دترمینان خود را محاسبه کردن و یا اطلاع دادن از مقدار یکی از درایه های خود را انجام دهد. در چنین دنیایی یک شی می تواند به خواستن عملی از شی دیگری با آن ارتباط برقرار کند. زبان های متعلق به این خانواده از ما انتظار دارند تا برنامه (یا همان ره حل مساله) خود را تبدیل به اشیایی کنیم که با یکدیگر ارتباط برقرار می کنند به طوری که نتیجه این ارتباطات ما را به پاسخ مساله  برساند.
همان طور که می بینید در این پارادیگم نسبت به پارادیگم قبل طرز فکر شما به عنوان برنامه نویس کاملا متفاوت می باشد و مساله را به شکل کاملا متفاوتی می بینید. در واقع اگر در روش قبل تمرکز شما در شکستن راه حل مساله به تکه های ساده متوالی بود در این پارادیگم تمرکز شما در طراحی اشیایی است که بتوانند همکاری هدفمندی را با یکدیگر داشته باشند. ممکن است در آغاز چنین طرز فکری به نظر عجیب و بی مورد به نظر برسد اما تنها در عمل است که متوجه خواهید شد در بسیاری موارد چنین طرز فکری موجب خواهد شد پیچیدگی برنامه شما بسیار کمتر شود. به طور مثال در برنامه ی قبل شما هنگامی که بر روی ماتریس به عنوان شی کار می کنید تنها کافی است شی ای طراحی کنید که به درستی کار می کند و پاسخ به  اعمال مورد نیاز دیگران را به شکل صحیحی فراهم سازد. به محض اینکه این شی ساخته شد دیگر تنها کافی است به روابط میان اشیا فکر کنید. اما در برنامه نویسی ساخت یافته شما باید به تک تک فرمان هایی که در پی یکدیگر می آیند توجه کنید که زیاد بودن آنها موجب سردرگمی و پیچیدگی برنامه می شود. البته در مسایلی خاص نیز برنامه نویسی شی گرا فایده قابل توجهی را نصیب شما نمی کند و همان برنامه نویسی ساخت یافته مناسب تر به نظر می رسد مانند مسایلی که یک عمل مشخص که مستقل می باشد نیازمند انجام است و شما با چندین مفهوم مختلف مواجه نیستید.
دسته آخر با نام Functional Programming شناخته می شود.این پارادیگم که کمتر از دو مورد قبل مورد استفاده قرار گرفته است ویژگی های منحصر به فردی دارد که کاربرد آن را برای مسایلی خاص مناسب تر ساخته. در این پارادیگم طرز فکر شما چنین است که تمامی برنامه تنها از مجموعه ای از توابع ساخته می شود که بسیار شبیه به مفهوم ریاضی تابع می باشند. رسیدن به پاسخ مساله حاصل توالی فراخوانی توابع مختلف است که هریک نیز می توانند دیگران را فراخوانی کنند. با توجه به اینکه زبان های خانواده برنامه نویسی ساخت یافته نیز دارای مفهومی به نام تابع می باشند ممکن است برنامه نویسان آشنا به آن زبان ها با خود فکر کنند خود این موضوع وجه تمایز قابل توجهی محسوب نمی شود. اما همان طور که در ابتدا اشاره کردم یک پارادیگم برنامه نویسی در واقع یک طرز فکر است. در برنامه نویسی تابعی کاملا طرز فکر شما متفاوت از برنامه نویسی ساخت یافته است. در این پارادیگم تلاش شما به ساده سازی مساله تا حد امکان به توابع کوچکتر است. توابعی که برخلاف برنامه نویسی ساخت یافته برای ورودی یکسان همواره خروجی یکسانی تولید می کنند و به عواملی خارج از خود تابع وابستگی ندارند. توابع زبان های ساخت یافته تنها به عنوان یک ظرف برای بسته بندی فرامین مورد استفاده قرار می گیرند و اگر شرایط بیرونی آنها در هرجای برنامه تغییر کند ممکن است بر کارکرد آنها تاثیر بگذارد. استقلال و کارکرد مشخص توابع زبان های تابعی موجب می شود که این زبان ها در اموری که نیاز به برنامه هایی با دقت بسیار زیاد و عاری از هر گونه خطا باشند مورد استفاده قرار گیرند. به طور مثال شبکه های مخابراتی اریکسون با استفاده از این خانواده زبان ها پیاده سازی شده اند به شکلی که حتی برنامه در حال اجرا را می توان تغییر داد و بخش هایی از آن را حذف یا اضافه کرد بدون اینکه اختلالی در کار آن صورت پذیرد. نکته دیگر قابل توجه نیز این است که شما در زبان های ساخت یافته مدام به فرامین فکر می کنید اما در برنامه نویسی تابعی به نحوه طراحی و چینش توابع توجه دارید.

خوب ظاهرا تا اینجا مقاله طولانی نوشتم اما هنوز بحث تموم نشده و مجبورم ادامه بدم. امیدوارم خسته نشده باشید و بتونید تا پایان من رو همراهی کنید.

سه مورد از پارادیگم های متداول برنامه نویسی رو به عنوان مترجمی بین مفاهیم قابل درک بین انسان و ماشین به طور مختصر (!) شرح دادم. اما باید بدونید مشکلی که در پارادیگم اول مطرح شد در خصوص نیاز به توضیح مساله به ساده ترین شکل در مورد سایر پارادیگم ها نیز برقرار است. بنابراین همچنان نیاز هست تا تلاش قابل توجهی برای حل این مشکل صرف بشه. اما خوب این موضوع به این معنی نیست که شما کسی هستید که باید این تلاش رو صرف کنید بلکه این امکان هست که از تلاش های دیگران نیز استفاده کنید!
با توجه به این که شرح یک مفهوم برای کامپیوتر توسط یک زبان برنامه نویسی تنها برای یکبار کافی است متخصصین زمینه های مختلف تصمیم گرفتند تا هر کدام در زمینه کاری خود و با توجه به نیازهایی که دارند اقدام به شرح مفاهیم پرکاربرد کنند تا بعد از آن خود و دیگران صرفا از این تعاریف استفاده کنند. این موضوع موجب شد تا دو حرکت مختلف در زمینه علوم کامپیوتر شکل بگیره. نخست بحث کتابخانه های زبان های برنامه نویسی و دوم بحث زبان های برنامه نویسی زمینه-محور.
کتابخانه یک زبان برنامه نویسی به مجموعه ای از برنامه های خاص آن زبان گفته می شود که به شرح و تعریف مفاهیم مشخصی از طریق آن زبان می پردازند و قابلیت استفاده مجدد را دارا می باشند. به طور مثال شما می توانید تعریف یک شی ماتریس را در یک زبان شی گرا در یک برنامه انجام دهید و آن را ذخیره کنید. پس از آن در برنامه های آتی خود می توانید در صورت نیاز از همان تعریف قبلی به واسطه برنامه ای که نوشته بودید استفاده کنید. به این شکل کتابخانه های بسیاری در زمینه های مختلف چون ریاضیات ، فیزیک ، زیست شناسی ، جامعه شناسی و ... طراحی شدند که بسیاری از زحمات برنامه نویسان را کاهش قابل توجهی دادند. اما نکته قابل توجه در این زمینه این است که شما در هنگام استفاده از کتابخانه ها همچنان از همان طرز فکری استفاده می کنید که زبان برنامه نویسی شما مطابق آن طراحی شده است و دقیقا با همان مزایا و معایب مواجه هستید. نکته دیگر اینکه در این مورد شما منحصر به کتابخانه های موجود هستید و میزان کتابخانه هایی که برای زبان شما طراحی شده اند و پشتیبانی که از آنها صورت می گیرد موضوع بسیار مهمی محسوب می شود.
زبان های برنامه نویسی زمینه -محور ( البته این اصلاح رو من خودم اینجا استفاده کردم و اصطلاح انگلیسی متداول اون Field-Specific Programming Languages هست)روش دیگری بودند که مورد توجه قرار گرفتند. تا پیش از این زمان زبان های برنامه نویسی با هدف حل تمامی مسایل و کاربرد عمومی طراحی می شدند اما زبان های زمینه-محور صرفا جهت استفاده در یک زمینه خاص طراحی شدند. در هر زمینه مفاهیم ، مدل ها و شیوه های کاری خاصی وجود دارد که مختص نیازهای آن به وجود آمده است. زبان های زمینه-محور زبان های هستند که به طور خاص این مفاهیم و شیوه ها را پشتیبانی می کنند و فکر کردن به این شکل را بسیار ساده تر می کنند. به طور مثال اگر شما نیاز به استفاده از ماتریس دارید که یکی از مفاهیم معمول ریاضیات است چندین راه در مقابل خود پیش رو دارید: می توانید مفهوم ماتریس را توسط یک زبان عمومی شخصا پیاده سازی کنید یا می توانید از یک کتابخانه ریاضیات که از مفهوم ماتریس پشتیبانی می کند برای زبان خود استفاده کنید و یا می توانید از یک زبان زمینه-محور که در زمینه ریاضیات طراحی شده است استفاده کنید. چنین زبانی در خود مفهوم ماتریس را دارد و فقط کافی است شما از آن استفاده کنید بی آنکه نیاز به پیاده سازی آن یا استفاده از یک کتابخانه جانبی باشد.
بعد از تمامی این صحبت ها بهتر است یک نتیجه گیری کنیم. نظر شخصی بنده این است که شما احتمالا در زمینه کاری خود با دو نوع نیاز مواجه هستید. دسته اول مربوط به مسایل متداولی است که شما اغلب در زمینه کاری خود با آنها برخورد می کنید. در این خصوص بهتر است شما تحقیق کنید و ببینید سایر فعالان تخصص شما از چه زبان برنامه نویسی زمینه-محور ی استفاده می کنند ، مقالاتی که در این خصوص چاپ می شوند بیشتر چه زبان برنامه نویسی را مورد استفاده قرار داده اند و در دانشگاه و محل کار خود نیازمند چه زبان زمینه-محوری هستید. به این ترتیب یک زبان را انتخاب کنید و اغلب فعالیت های خود را توسط آن به انجام برسانید. خوبی دیگر این کار این خواهد بود که حاصل کار شما نیز برای سایر همکارانتان قابل تعامل خواهد بود.
دسته دوم مربوط به مسایلی است که شما اغلب در یک فرایند تحقیقاتی و به عنوان اولین نفر با آنها برخورد می کنید و هنوز هیچ پشتیبانی از آنها در زبان زمینه-محور مورد نظر شما وجود ندارد و یا اینکه نیازهای شما به سطحی رسیده که زبان زمینه-محور شما قادر به پاسخگویی نمی باشد. در این مورد بهتر است یک زبان با کاربرد عمومی را که سطح بالایی نیز داشته باشد انتخاب کنید و کار خود را توسط آن به انجام رسانید. قاعدتا در انتخاب این زبان فاکتورهایی هستند که نقش مهمی را بازی می کنند از قبیل سادگی کار با زبان، قدرت کافی آن برای انجام امور و وجود کاربرانی با تخصص مشابه شما و به تبع آن وجود کتابخانه های مختص زمینه فعالیت شما برای آن زبان.
دسته اول نیازمند تحقیق بیشتری از سوی شما است و چون بنده تخصصی در این زمینه ندارم نمی توانم نظر مفیدی دهم اما در خصوص دسته دوم به خود اجازه می دهم تا زبان پایتون را به شما پیشنهاد دهم. این زبان  سطح بالایی دارد و کار با آن بسیار ساده تر از بسیاری زبان های دیگر است و به شما اجازه می دهد بیشتر بر مساله تمرکز کنید تا مسایل مربوط به ساختار کامپیوتر. در عین حال قابلیت استفاده از برنامه های زبان سی را نیز دارد و به همین دلیل می توان در صورتی که سرعت خوبی در اجرای برنامه ها بدست نیامد با استفاده از زبان سی سرعت را بسیار بالا برد. کتابخانه ریاضی و جامعه کاربری بسیار خوبی هم دارد.
خوب امیدوارم صحبتهایم مفید واقع شود. در صورتی که باز هم سوالی داشتید و در توانم بود خوشحال خواهم شد پاسخ دهم.
« آخرین ویرایش: 14 دی 1391، 01:53 ب‌ظ توسط r_m1232002 »

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1319
اگر دوستان لطف کنند و محاسبه عدد ایگن رو برای ماتریکس ۳۰۰۰*۳۰۰۰، اعداد  duoble و توزیع uniform distribution  در سایر نرم افزار ها انجام بدهند شاید بتوان بهتر مقایسه کرد.

آفلاین majidkamali1370

  • Hero Member
  • *
  • ارسال: 928
  • جنسیت : پسر
با تشکر از آقا/خانم r_m1232002
خیلی مفید بود. ممنون.
Ubuntu 14.04 LTS 64-bit - unity

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
اینجور که بنده برداشت کردم زبان زمینه محور در ریاضی میشه R و فورترن . زبان سطح بالا هم سی پلاس و پیتون و سی شارپ و اینها میتونه باشه .
====================================
نقل‌قول
http://eigen.tuxfamily.org/dox/index.html
« آخرین ویرایش: 14 دی 1391، 03:01 ب‌ظ توسط doomhammer65ir »

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1319
کتابخانه های ریاضی برای C++:
Armadillo که می تواند از Intel MKL, AMD ACML, OpenBLAS, GotoBLAS استفاده کند.
http://arma.sourceforge.net/
eigen:
http://eigen.tuxfamily.org
boost:
http://www.boost.org/



آفلاین امیر شهریاری

  • Sr. Member
  • *
  • ارسال: 323
  • جنسیت : پسر
1+
r_m1232002

آفلاین کیان

  • High Hero Member
  • *
  • ارسال: 2338
  • جنسیت : پسر
پس پایتون؛
(یک بایت از پایتون رو شروع کردم)
« آخرین ویرایش: 21 دی 1391، 12:36 ق‌ظ توسط کیان »