нужно умножить матрицу на вектор, при этом должна быть доступна полная манипуляция с матрицей, сколько бьюсь никак не получается, помогите, кто знает как?
public partial class Window1 : Window
{
//Matrix A= new Matrix()
ObservableCollection<ObservableCollection<int>> matrix = new ObservableCollection<ObservableCollection<int>>();
ObservableCollection<ObservableCollection<int>> vector = new ObservableCollection<ObservableCollection<int>>();
//ObservableCollection<ObservableCollection<int>> matrix1 = new ObservableCollection<ObservableCollection<int>>();
ObservableCollection<ObservableCollection<int>> matrix1 = new ObservableCollection<ObservableCollection<int>>();
Vector vectorr=new Vector(1, numberrow);
Random rnd = new Random();
static byte numberrow;
static byte numbercolumn;//(countColumn)
public Window1()
{
InitializeComponent();
dgMatrix.ItemsSource=matrix;
}
void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header=e.Row.GetIndex()+1;
}
private void CreateDataGrid(DataGrid dgMatrix, int numbercolumn)
{
dgMatrix.Columns.Clear();
if(numbercolumn>0)
{
for(int i=0;i<numbercolumn;i++)
{
DataGridTextColumn column = new DataGridTextColumn
{
Header = (i+1).ToString(),
Binding = new Binding(string.Format("[{0}]",i))
};
dgMatrix.Columns.Add(column);
}
}
}
/* private ObservableCollection<ObservableCollection<int>> CreateVector(int numberrow, int numbercolumn)
{
vector.Clear();
if(numberrow>0 && numbercolumn>0)
{
for(int i =0; i <numberrow;i++)
{
vector[i].Add(rnd.Next(-10,10));
}
}
return vector;
}*/
private ObservableCollection<ObservableCollection<int>> CreateMatrix(int numberrow, int numbercolumn)
{
matrix.Clear();
if(numberrow>0 && numbercolumn>0)
{
for(int i =0; i <numberrow;i++)
{
matrix.Add(new ObservableCollection<int>());
for(int j=0;j<numbercolumn;j++)
matrix[i].Add(rnd.Next(-10,10));
}
}
return matrix;
}
void button1_Click(object sender, RoutedEventArgs e)
{
otvet.Clear();
if(!byte.TryParse(TextRow.Text, out numberrow)||!byte.TryParse(TextColumn.Text, out numbercolumn))
{
MessageBox.Show("Была установлена неправильная размерность!","Информация", MessageBoxButton.OK,MessageBoxImage.Error);
}
CreateMatrix(numberrow, numbercolumn);
//CreateVector(numberrow, numbercolumn);
CreateDataGrid(dgMatrix, numbercolumn);
dgMatrix.Visibility=Visibility.Visible;
}
void TextRow_GotFocus(object sender, RoutedEventArgs e)
{
TextRow.Clear();
}
void TextColumn_GotFocus(object sender, RoutedEventArgs e)
{
TextColumn.Clear();
}
void DgMatrix_TextInput(object sender, TextCompositionEventArgs e)
{
MessageBox.Show("Были введены недопустимые символы! Введите число!","Информация", MessageBoxButton.OK,MessageBoxImage.Error);
}
void MenuItem_Click4(object sender, RoutedEventArgs e)
{
MessageBoxResult result = MessageBox.Show("Вариант 45. Найти максимальное собственное число матрицы, методом сколярных произведений", "Задание", MessageBoxButton.OK, MessageBoxImage.None);
}
void MenuItem_Click5(object sender, RoutedEventArgs e)
{
MessageBoxResult result = MessageBox.Show("Разработано студентом первого курса, группы БПИ-111, Чуриловым Андреем Алексеевичем, в качестве практической работы", "Задание", MessageBoxButton.OK, MessageBoxImage.None);
}
void button2_Click(object sender, RoutedEventArgs e)
{
double lmbd=0;
if (otvet.Text==String.Empty)
{
otvet.Clear();
int B=0;
//Vector x = new Vector(1,numberrow);
int j=0;
int i=0;
//var Y=VectorY(matrix, vector);//считаем Y
var Y = VectorY(matrix, vector);
lmbd+=matrix1[i][j]*vector[i][j];
otvet.Text+=8;
}
}
private ObservableCollection<ObservableCollection<int>> VectorY(ObservableCollection<ObservableCollection<int>> matrix, ObservableCollection<ObservableCollection<int>> vector)
{//процесс умножения
var matrix1 = new ObservableCollection<ObservableCollection<int>>();
int num = 0;
for (int i = 0; i < matrix.Count-1; i++)
{
matrix1.Add(new ObservableCollection<int>());
for (int j = 0; j < matrix[i].Count-1; j++)
{
for (int k = 0; k < vector[i].Count-1; k++)
{
num += matrix[i][k] * vector[k][j];
}
matrix1[i].Add(num);
num=0;
}
}
return matrix1;
}
}
Если вам нужно именно перемножение вектора и матрицы, не изобретайте велосипед, используйте Vector.Multiply.
UPD:
Инициализируйте ваш вектор через .NET Framework класс Vector. А матрицу, соответственно, через Matrix.
Посмотрите на ссылки, там написано, какие библиотеки нужно подключить.
После результата выполнения операции Multiply вы можете работать с результатом.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В WPF/MVVM приложении в модели нужно получить значение слайдера из формы, как это сделать? Мой метод не работает
Нужно преобразовать строку (string) "Ноя 2018" в дату (DateTime)Делаю все внутри конструктора Xamarin
Необходимо найти индекс элемента, максимально приближенного к среднему арифметическому и записать в linq форме
как из input передать параметры в функцию?я хочу взять из input value и передать в функцию как параметр, как это сделать?