2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 C# и как все это интегрировать и во всем этом разобраться
Сообщение05.07.2011, 16:21 
Приветствую!

Мне необходимо написать множественную регрессию на C#. У меня в голове два варианта:
1) Написать все самому. Здесь потребуется линейная алгебра и я пока нахожусь в раздумьях как это обьектно-ориентированно организовать: какие классы определить, как использовать delegates and interfaces и так далее.

2) Взять готовый пакет по линейной алгебре написанный на C#. Например: http://numerics.mathdotnet.com/
Я правда не знаю как его интегрировать в мой код.

Ну и наверное самая большая проблема: у меня очень слабые навыки програмирования. По C# я только прочел Essential C# 4.0, несовсем внимательно.

Не дадите ли каких-либо общих рекомендаций, куда двигаться?

 
 
 
 Re: C# и как все это интегрировать и во всем этом разобраться
Сообщение05.07.2011, 17:18 
Надо двигаться в сторону компьютера, включить его и пробовать, только так можно научиться :wink:
Вы хотябы 1 программу уже написали? или это первая

Вы сперва решите что вам нужно 1 или 2

 
 
 
 Re: C# и как все это интегрировать и во всем этом разобраться
Сообщение05.07.2011, 17:27 
Я когда то слушал вводный курс по Java и что-то писал, потом писал на VBA, но немного.

Я думаю, что мне лучше написать библиотеку для линейной алгебры (чтобы ёе и в будущем использовать). Вот только все это получается не обьектно. Мне либо static метод нужен либо delegate. Куда лучше двинуться?

Наверное это должно работать следующим образом

mmult(A, B) - для умножения двух матриц.

 
 
 
 Re: C# и как все это интегрировать и во всем этом разобраться
Сообщение05.07.2011, 17:53 
Предпочтения по компилятору есть?
Советую SharpDevelop
http://www.icsharpcode.net/opensource/sd/
Мне очень нравится.

Цитата:
Я думаю, что мне лучше написать библиотеку для линейной алгебры (чтобы ёе и в будущем использовать). Вот только все это получается не обьектно. Мне либо static метод нужен либо delegate. Куда лучше двинуться?

Наверное это должно работать следующим образом

mmult(A, B) - для умножения двух матриц.

Я уже написал свою и двинулся уже, только в каком направлении непонятно :D
Универсально для всего можно написать только на С++ (ну или на чем то другом поддерживающим шаблоны) причем использовать можно только там же.
Я например захотел написать класс матрици чтобы он независил от типа int, float... и понял что на C# это невозможно.
Так что я лично пришел к выводу что я пишу для типов double все и вся, а если надо чтото другое то перевожу уже имеющийся код.

И еще! написания чего-то своего немаловажно для понимания сути, а вот если понимание уже есть но лень писать по 500 раз одно и тоже то я лично прибегаю к плагиату или использованию сторонних либ

 
 
 
 Re: C# и как все это интегрировать и во всем этом разобраться
Сообщение05.07.2011, 18:51 
Спасибо, у меня уже стоит Visual Studio.

Да, действительно, имеет смысл написать все самому. Наверное создам класс LinAlg и напишу массу статических методов.

Да, что передать double or decimal несразу ясно. Так же наверно придется писать два разных метода для умножения матриц и умножения вектора и матрицы.

Спасибо за ответы!

 
 
 
 Re: C# и как все это интегрировать и во всем этом разобраться
Сообщение05.07.2011, 19:04 
Цитата:
Да, действительно, имеет смысл написать все самому. Наверное создам класс LinAlg и напишу массу статических методов.

А вы посмотрите для начала например
http://www.mathdotnet.com
как в нем все устроено, посмотрите другие либы.

Я когда писал на С++ то все писал отдельными функциями, как вы предложили, а контейнеры данных определял как класс, типа:
CmMatrix4x4 - Class Math Matrix 4 x 4
math::mMat4x4Mul( LPCmMatrix4x4 lpMatSrcADst, LPCmMatrix4x4 lpMatSrcB )
Думаю тут интуитивно понятно из названий что к чему

А вот когда стал писать на С# даже не знаю, у меня часть запихана в класс, другая часть отдельными функциями.

Цитата:
Да, что передать double or decimal несразу ясно. Так же наверно придется писать два разных метода для умножения матриц и умножения вектора и матрицы.

Ну это не самое страшное.
Страшнее когда этот класс матрицы надо использовать уже в другой функции, подразумевающей независимость от типа. Тут наступает понимание что это невозможно.
Берем тип перекрывающий другие типы double и пишем все в нем.

 
 
 
 Re: C# и как все это интегрировать и во всем этом разобраться
Сообщение05.07.2011, 19:37 
logout2d в сообщении #465476 писал(а):
Цитата:
Да, действительно, имеет смысл написать все самому. Наверное создам класс LinAlg и напишу массу статических методов.

А вы посмотрите для начала например
http://www.mathdotnet.com
как в нем все устроено, посмотрите другие либы..


Да ссылка интересная. Я загрузил код, но прочесть его не просто. Не ясно с какого файла начинать.

 
 
 
 Re: C# и как все это интегрировать и во всем этом разобраться
Сообщение05.07.2011, 20:08 
Да там громоздко у них числа и всякая всячина определена, на это пока не обращайте внимания.
Я имел ввиду просто посмотреть какие классы созданы, как они подразделены.
(немного жалею что это посоветовал, потому что там действительно не все сразу очевидно)
Советую посмотреть:
http://www.gamedev.ru
и смежные темы, в игровых движках часто можно встретить реализации математических либ.
Может вот это вам поможет:
http://jenyay.net/Programming/Complex

-- Вт июл 05, 2011 20:14:31 --

AForge неплохая либа
http://www.aforgenet.com/

-- Вт июл 05, 2011 20:16:26 --

Я еще пользуюсь AlgLib, там все отдельными функциями, но они все как правило мудрено написаны, но зато гарантируют получения результата вычислений, если это возможно.
http://alglib.sources.ru/

 
 
 [ Сообщений: 8 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group