چه زبان برنامه نویسی برای دانشجوهای علوم پایه بهترینه؟ تو دانشکده مون (ریاضی) زیاد دیدم ارشدی ها فورترن فورترن میکنند.اول سه نرمافزار تجاری رو بررسی میکنم. ولی قطعیت کامل نداره و باید ببینی در کجا و چه شاخه خاصی قراره کار بکنی.
میخوام زبان خالص علم باشه! زبانی که بتونه با معادلات دیفرانسیل و جبری، ماتریسها، تانسورها، انتگرال ها، مدل سازی شکل های فضایی و غیره توانا عمل کنه. بینهایتش بالا باشه. سینتکس باحال باشه که کمک کنه احتمال خطا بیاد پایین و سرعتش هم مهمه.
1. C رو تا سطح پیشرفته برم جلو؟
تغییر مسیر بدم به زبانی مثل فورترن؟ پایتون، پرل و... چطورند؟
تو انجمن دیدم بچه خیلی از Go تعریف میکنم، منم وسوسه شدم یاد بگیرم؟ ;D این زبان به درد توضیحاتی که دادم میخوره؟
2. در موسسات تحقیقاتی بزرگ علمی چه زبانهایی مطرح ترند؟
3. برنامه هایی مثل متلب (R) و متمتیکا (ماکسیما) زبان برنامه نویسی اند؟
4. جمع بندی: برم دنبال یاد گرفتن یک زبان برنامه نویسی یا روی ماکسیما وقت بذارم؟
(برنامه نویسی هم کار کردم. html و C بلدم. نگید خودش C بلده اومده وقتمون رو بگیره. C رو بلدم ولی نمیدونم کجا کاربرد داره. سطح بالا و سطح پایین نمی فهمم. بلدم تمرین های کتاب رو بعد از حل ریاضی مسئله پیاده سازی کنم.)
در بین این سهتا هیچکدوم در مجموع به قدرت و تکامل Mathematica نیست.متیمتیکا نسخه لینوکسی نداره! ماکسیما معادلشه. به همون قدرت متمتیکا هست؟
R از توانایی هایی رو که لازم داری این ها رو دارد:درباره R یک کنفرانسی تو دانشگاه بود استاده همش مثالهای آمار و عددی میزد.
انتگرال،ماتریسها و مدل سازی شکل های فضایی
سرعت R هم بستگی به تجربه دارد.
برای چه کاری میخوای؟بله باید این رو خوب توضیح می دادم. پاسخ واقعیش اینه که نمی دونم برای چی میخوام :-X
کار یک زبان برنامه نویسی پردازش محاسبات هستش. تمام زبان های برنامه نویسیبله. ولی با یک زبان برنامه نویسی میشه یک معادله رو در یک خط حل کرد و در 4 ثانیه جواب گرفت با یکی دیگه هزار تا کتابخونه و ... هم بکار بگیری به نتیجه دلخواه نمیرسی.
به درد توضیحاتی که شما دادید می خورند.
واقعیش اینه که نمی دونم برای چی میخوام
چرا خیلیا همش دنبال IDE ای هستید. ولی من نمی تونم ازش استفاده کنم. زاید میاد بنظر.
اون زبانی که بدرد یک دانشجوی ریاضی بخوره چیه؟
برنامه نویسی برای دلم نمیخوام یاد بگیرم بدرد رشته م بخوره :D
متیمتیکا نسخه لینوکسی نداره! ماکسیما معادلشه. به همون قدرت متمتیکا هست؟عزیزم داره
ممکنه چیزی که الآن میخوای و داری از ما سوال میکنی، چیزی باشه که برات مناسب نیستوقت زیاد ندارم. از الان تا تابستون وقت دارم. از تابستون 92 تا اردیبهشت 93 که هیچی چون درگیر کنکور ارشد آزاد و سراسری و پروژه میشم.) دوباره از تابستون 93 تا اول مهر بشرطی ارشد قبول بشم وقت دارم. با شروع ارشد باید زبان برنامه نویسی بلد باشم. کمتر از یکسال تایم دارم.
و خودت هم ازش خبر نداشته باشی! باید مقداری به خودت وقت بدی تا هدفت رو بهتر مشخص کنی.
1- من ++C به علت شی گرایی بر C ترجیه می دهم.چه بسیارند افرادی که شی گرایی را نمی پسندند. یکیشون آقا استالمن
راجب به go هم اطلاع ندارم ولی به طور کلی توسیه می کنم زبانی یاد بگیری که منابع زیاد داشته باشد و وابسته به شرکت خاصی نباشد. ممکن یک زبان بسار عالی باشد ولی به دلیل عدم وجود منابع کافی یادگیری و رفع ایرادات برنامه نویسی مشکل باشد.منابع رو نمیدونم ولی go به شرکتی وابسطه نیست. اگه منظورتون گوگله باید بگم اصلا اینطور نیست مثلا شما در وب go هیچ نشانی از گوگل نمی بینید.
زبان های Functional نزدیک ترین منطق فکری رو به علوم ریاضایت دارن. یکی از اون ها رو یاد بگیر.متیکا؟ http://amath.colorado.edu/computing/mmm/funcproc.html خیلی قیمتش بالاست ](*,)
اگر خواستی R کار کنی مطمن شو که تمام چیز های که در آینده لازم داری دارد.رشته ریاضی ام. تحلیلی بیشتر سروکار داریم تا عددی. قصد دارم برای ارشد برم گرایش جبر
اگر رشته آمار باشی که هیچ شکی نیست R همه نیازهاتو بر طرف می کند.
دوستان معمولا به این بیمحلی میکنن:تو لینک زیر نه اسم sage هست نه اسم maxima نه octave و نه scilab. ولی اسم matlab و mathematica اومده ???
http://www.sagemath.org
اگر خواستی R کار کنی مطمن شو که تمام چیز های که در آینده لازم داری دارد.رشته ریاضی ام. تحلیلی بیشتر سروکار داریم تا عددی
اگر رشته آمار باشی که هیچ شکی نیست R همه نیازهاتو بر طرف می کند.
برای اینکه ببینیم چه زبان بیشتر از همه کاربرد داره باید بریم ببینیم که نرمافزارهای بزرگ (تو هر زمینه) با چی نوشته شدن. موتور محاسباتی (analysis engine) تمام نرمافزارهای محاسباتی غول دنیا که بررسی کردم، یا سی بوده، یا سی++ یا فورترن.
با چیزهایی که خودت داری میگی، من برداشتم از حرفات اینه:
- یه زبان می خوای که توی کار با اعداد خوب باشه ---> (همه ی زبان ها اینطوری هستن!)
- زبانت قراره تو درسای دانشگاهیت کمکت کنه، نه یه پروژه برای مراکز نظامی امریکا! ---> (پس هرچه ساده تر بهتر)
- زبانت باید آسون باشه که راحت یاد بگیریش چون خیلی وقت نداری. ---> (زبان های دینامیک)
- موقع کار با زبان بتونی به الگوریتم توجه کنی، نه به خود زبان. ---> (زبان های دینامیک... c و ++c و java و go و این ها رو بیخیال شو)
- زبانت باید اجتماع بزرگی داشته باشه که اگه سوالی چیزی داشتی لنگ جواب نمونی (PHP, RUBY, PYTHON)
- زبانت در حدی باشه که برای کارهای روزمره (به غیر ریاضی) هم به دردت بخوره. ---> (فقط از روی تجربه ی شخصی : Python)
واقعا می خواستی کار ریاضی با C انجام بدی؟ یه محاسبه ی ۴ خطی بخوای حل کنی شونصد جا باید با حافظه و پوینتر
ها سر و کله بزنی... اینجوری تقریبا ۹۹٪ باگ هات مربوط میشه به ساختارهای خود زبان، نه به غلط بودن احتمالی الگوریتمت.
یه زبان ساده مثل Python رو یاد بگیر که بتونی روی الگوریتمت تمرکز کنی. توکه نمی خوای برای شرکت های بزرگ
برنامه بنویسی، برای کارهای شخصی خودت میخوای. Python هم کلی برات زیادیه. تازه پایتون پکیج Numpy رو هم داره.
یه سرچ کوچیک بزنی میفهمی که این پکیج توی کارهای ریاضی حرف نداره (حتی بین زبان های دیگه).
کلا اینکه زیاد خودت رو خسته نکن، سعی کن اونی که از همه آسون تره رو یاد بگیری.
با چیزهایی که خودت داری میگی، من برداشتم از حرفات اینه:بسیار عالی بود.+۱۰
- یه زبان می خوای که توی کار با اعداد خوب باشه ---> (همه ی زبان ها اینطوری هستن!)
- زبانت قراره تو درسای دانشگاهیت کمکت کنه، نه یه پروژه برای مراکز نظامی امریکا! ---> (پس هرچه ساده تر بهتر)
- زبانت باید آسون باشه که راحت یاد بگیریش چون خیلی وقت نداری. ---> (زبان های دینامیک)
- موقع کار با زبان بتونی به الگوریتم توجه کنی، نه به خود زبان. ---> (زبان های دینامیک... c و ++c و java و go و این ها رو بیخیال شو)
- زبانت باید اجتماع بزرگی داشته باشه که اگه سوالی چیزی داشتی لنگ جواب نمونی (PHP, RUBY, PYTHON)
- زبانت در حدی باشه که برای کارهای روزمره (به غیر ریاضی) هم به دردت بخوره. ---> (فقط از روی تجربه ی شخصی : Python)
واقعا می خواستی کار ریاضی با C انجام بدی؟ یه محاسبه ی ۴ خطی بخوای حل کنی شونصد جا باید با حافظه و پوینتر
ها سر و کله بزنی... اینجوری تقریبا ۹۹٪ باگ هات مربوط میشه به ساختارهای خود زبان، نه به غلط بودن احتمالی الگوریتمت.
یه زبان ساده مثل Python رو یاد بگیر که بتونی روی الگوریتمت تمرکز کنی. توکه نمی خوای برای شرکت های بزرگ
برنامه بنویسی، برای کارهای شخصی خودت میخوای. Python هم کلی برات زیادیه. تازه پایتون پکیج Numpy رو هم داره.
یه سرچ کوچیک بزنی میفهمی که این پکیج توی کارهای ریاضی حرف نداره (حتی بین زبان های دیگه).
کلا اینکه زیاد خودت رو خسته نکن، سعی کن اونی که از همه آسون تره رو یاد بگیری.
واینکه میشه در مورد اون numpy بیشتر بگین؟
حالا یکی برای ما بگه قطری کردن یعنی چی ؟صفر کردن همه آرایه های ماتریس مربعی بجز قطر اصلی
حالا یکی برای ما بگه قطری کردن یعنی چی ؟صفر کردن همه آرایه های ماتریس مربعی بجز قطر اصلی
#include <iostream>
using namespace std;
int main()
{
int a[5][5];
cout << "Plz enter Nbr : \n" ;
int n , d = 0;
cin >> n ;
for (int i = 1 ; i <= n ; i++)
{
for(int j=1 ; j<=n ; j++)
cin >>a[i][j] ;
}
for(int i=1 ; i<=n ; i++)
{
for (int j = 1 ; j<=n ; j++ )
{
cout << a[i][j] << " " ;
}
cout << "\n" ;
}
cout << d ;
cin.get();
return 0;
}
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <cctype>
using namespace std;
int main()
{
fstream input_handle ;
input_handle.open ("./input.txt",fstream::in);
string temp_str;
if(input_handle.is_open ())
{
getline(input_handle,temp_str);
}
int size_matrix;
stringstream temp_ss(temp_str);
temp_ss>>size_matrix;
vector< vector <int> > matrix (size_matrix); // two_dimensional vector . vector is dynamic array ;
for(int i=0;i<size_matrix;i++)
{
getline(input_handle,temp_str);
istringstream iss(temp_str);
for(int j=0 ;j<size_matrix && iss >> temp_str ;j++)
{
stringstream temp_ss(temp_str);
int temp_int;
temp_ss >> temp_int;
matrix[i][j]=temp_int ;
}
}
input_handle.close();
for(int i=0;i<size_matrix;i++) // inja qotri mikoneh.
{
for(int j=0;j<size_matrix;j++)
{
if(i!=j)
{
matrix[i][j]=0;
}
}
}
fstream output_handle;
output_handle.open ("./output.txt",fstream::out);
output_handle <<"size of Matrix="<<size_matrix<<endl;
for(int i=0;i<size_matrix;i++)
{
for (int j=0;j<size_matrix;j++)
{
output_handle <<matrix[i][j]<<"\t";
}
output_handle<<endl;
}
output_handle.close ();
return 0;
}
for(int i=0;i<size_matrix;i++)
{
for(int j=0;j<size_matrix;j++)
{
if(i!=j)
{
matrix[i][j]=0;
}
}
}
حالا یکی برای ما بگه قطری کردن یعنی چی ؟ماتریس مربعی رو قطریشدنی (diagonizable) مینامیم اگر پایهای برای فضای برداری وجود داشته باشه که نمایش ماتریس در اون پایه یک ماتریس قطری باشه. به عباریت دیگه ماتریس A رو قطریشدنی مینامیم هرگاه ماتریس وارونپذیر P و ماتریس قطری D وجود داشته باشه که D=P^(-1) A P. خود ماتریس قطری یعنی ماتریسی که همه درایههایی که روی قطری اصلی نیستند صفر باشند. قطری کردن ماتریس به این سادگیها نیست که یک ماتریس رو بگیری و از اون ماتریسی جدید بسازی که فقط درایههای غیر قطر اصلی رو توش صفر کرده باشی. یعنی دوستان فکر میکنن که واقعا یک کتابخانه تو فورترن یا هر زیان دیگه مینویسن تا این کار رو انجام بده ](*,).
ربطی به svd دارد؟حالا یکی برای ما بگه قطری کردن یعنی چی ؟ماتریس مربعی رو قطریشدنی (diagonizable) مینامیم اگر پایهای برای فضای برداری وجود داشته باشه که نمایش ماتریس در اون پایه یک ماتریس قطری باشه. به عباریت دیگه ماتریس A رو قطریشدنی مینامیم هرگاه ماتریس وارونپذیر P و ماتریس قطری D وجود داشته باشه که D=P^(-1) A P. خود ماتریس قطری یعنی ماتریسی که همه درایههایی که روی قطری اصلی نیستند صفر باشند. قطری کردن ماتریس به این سادگیها نیست که یک ماتریس رو بگیری و از اون ماتریسی جدید بسازی که فقط درایههای غیر قطر اصلی رو توش صفر کرده باشی. یعنی دوستان فکر میکنن که واقعا یک کتابخانه تو فورترن یا هر زیان دیگه مینویسن تا این کار رو انجام بده ](*,).
برگشت به سوال اصلی این پست، اول اینکه من خودم رشته ریاضی هستم و استخون تو این راه خورد کردم. راهنمایی هم کردم در مورد زبانهای مفید این رشته. توصیه کلی اینه که الگوریتم نویسی رو یاد بگیری اول و بعد هر زبانی رو که احتیاج داشتی در عرض ۲ هفته کامل یادمیگیری. توصیه دوم که در اثر مطالعه زبان D به مدت ۲ هفته دستم اومده: بسیار زبان خوبی برای همه رشتهها به خصوص رشته ریاضی است. نگاهی به کتابخانههای std.algorithm و std.array و std.range بیندازید تا متوجه شوید.
> 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 را بدست آورد.حالا یکی برای ما بگه قطری کردن یعنی چی ؟توصیه کلی اینه که الگوریتم نویسی رو یاد بگیری اول و بعد هر زبانی رو که احتیاج داشتی در عرض ۲ هفته کامل یادمیگیری.
نه اینکه آرایه رو دستی صفر کنیم!صفر کردن همه آرایه های ماتریس مربعی بجز قطر اصلی
باید تمام مقادیر رو کاربر وارد کنه بعدش به غیراز قطر اصلی همه رو صفر کنه یا کاربر فقط مقادیر روی
قطر اصلی رو باید وارد کنه ؟
توصیه دوم که در اثر مطالعه زبان D به مدت ۲ هفته دستم اومده: بسیار زبان خوبی برای همه رشتهها به خصوص رشته ریاضی است. نگاهی به کتابخانههای std.algorithm و std.array و std.range بیندازید تا متوجه شوید.منابع فارسی داره؟
system.time(rs<-eigen(data))
user system elapsed
209.674 115.278 132.577
user system elapsed
183.139 0.344 43.325
http://eigen.tuxfamily.org/dox/index.html
کتاب یادگیری Haskell:
http://upload.wikimedia.org/wikipedia/commons/2/26/Haskell.pdf
معرفی برنامه نویسی فانکشنال:
http://www.mnzadeh.com/1392/01/beginning-functional-programming/
ویدیوهای آموزشی هسکل: http://www.haskell.org/haskellwiki/Video_presentations
ویکیپدیای فارسی: http://fa.wikipedia.org/wiki/%D9%87%D8%B3%DA%A9%D9%84_%28%D8%B2%D8%A8%D8%A7%D9%86_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C%29
یکی درباره هسکل می نویسه: http://pl.pooya.me
R از توانایی هایی رو که لازم داری این ها رو دارد:لیندا courseی به نام Up and Running with R (http://www.lynda.com/R-tutorials/Up-Running-R/120612-2.html?srchtrk=index%3a0%0alinktypeid%3a2%0aq%3a%22Up+and+Running+with+r%0apage%3a1%0as%3arelevance%0asa%3atrue%0aproducttypeid%3a2) داره، اگر کاربری لینک دانلودش رو داره یا پیدا کرد به من هم پیام بده :)
انتگرال،ماتریسها و مدل سازی شکل های فضایی
سرعت R هم بستگی به تجربه دارد.