Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите матрицу умножить на вектор))

76K
20 декабря 2011 года
Dragonfly5
2 / / 19.12.2011
Вроде алгоритм правильный
должно считать, но не считает
Код:
a=new float[2, 2];
                            f=new float[2];
                            transA = new float[2, 2];
                            souzA = new float[2, 2];
                            X = new float[2];
                            int i = 0;
                            int j = 0;
                            //присваиваем матрицам соответствующие элементы из системы уравнений
                            f[0] = float.Parse(textBox9.Text);
                            f[1] = float.Parse(textBox10.Text);
                            a[0, 0] = float.Parse(textBox1.Text);
                            a[1, 0] = float.Parse(textBox2.Text);
                            a[0, 1] = float.Parse(textBox5.Text);
                            a[1, 1] = float.Parse(textBox6.Text);
                            d = body(a, 2);
                            if (d == 0)
                            {
                                label10.Text = "Определитель системы равен нулю, система уравнений не имеет единого решения";
                            }
                            else
                            {
                                for (i = 0; i < 2; i++)        //Заполняем матрицы, соответствующие тем или иным икс.
                                    for (j = 0; j < 2; j++)   //Столбец, соответствующий порядковому номеру икс (учитывая, что индексация в массивах начинаеться с 0), заполняем свободными членами,
                                    {
                                        for (i = 0; i < 2; i++)
                                            for (j = 0; j < 2; j++)
                                            {
                                                souzA[j, i] = (float)Math.Pow(-1, (i + j + 2)) * (float)body(matrix_cut(a, 2, i, j), 2 - 1);
                                            }
                                        textBox22.Text = "";
                                        for (i = 0; i < 2; i++)
                                        {
                                            textBox22.Text += "\r\n";
                                            for (j = 0; j < 2; j++)
                                            {
                                                if (souzA[i, j] == (int)souzA[i, j])
                                                {
                                                    textBox22.Text += souzA[i, j] + "\t";
                                                }
                                                else
                                                {
                                                    textBox22.Text += String.Format("{0:0.0000}", souzA[i, j]) + "\t";
                                                }
                                            }
                                        }
                                        for (i = 0; i < 2; i++)
                                            for (j = 0; j < 2; j++)
                                            {
                                                transA[i, j] = (float)(1 / d) * souzA[i, j];
                                            }
                                        textBox21.Text = "";
                                        for (i = 0; i < 2; i++)
                                        {
                                            textBox21.Text += "\r\n";
                                            for (j = 0; j < 2; j++)
                                            {
                                                if (transA[i, j] == (int)transA[i, j])
                                                {
                                                    textBox21.Text += transA[i, j] + "\t";
                                                }
                                                else
                                                {
                                                    textBox21.Text += String.Format("{0:0.0000}", transA[i, j]) + "\t";
                                                }
                                            }
                                        }
                                        for (i = 0; i < 2; i++)
                                        {
                                            X = 0;
                                            for (i = 0; i < 2; i++)
                                                X += transA[i, j] * f;
                                        }
                                    }

                                  i = j = 0;
                                    label10.Text = String.Format("{0:0.00}", X); //вывод Х1
                                }
                            }
                            break;
                        }


это большая часть
а ошибка я думаю тут
 
Код:
for (i = 0; i < 2; i++)
                                        {
                                            X = 0;
                                            for (i = 0; i < 2; i++)
                                                X += transA[i, j] * f;
                                        }
297
20 декабря 2011 года
koodeer
1.2K / / 02.05.2009
Ошибка действительно тут. Нужно просто внимательно посмотреть на переменные циклов.
Если в каждом цикле писать не так
 
Код:
for (i = 0; i < 2; i++)
, а так
 
Код:
for (int i = 0; i < 2; i++)
, то компилятор указал бы на эту ошибку.


Замечания по коду.

Вместо литерала "\r\n" следует употрблять Environment.NewLine. Так как на разных платформах могут быть разные символы перевода строки.
Вместо пустой строки "", следует писать String.Empty.

Строки подобные этой
 
Код:
float.Parse(textBox9.Text);
чреваты выбросом исключения. Нужно либо обрабатывать возможные исключения, либо (что более правильно!) использовать вместо TextBox'а компонент NumericUpDown - он позволяет вводить только числа.

Всем контролам и переменным следует дать внятные наименования. Что означает, например, textBox9 ? Для ввода какой величины он предназначен? Из названия неясно.

У контрола TextBox есть метод AppendText - лучше использовать его вместо добавления к свойству Text.



Код переписать, об исполнении доложить.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог