ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Решение уравнений методом Крамера [c#]
  #1  
Старый 17.10.2007, 10:47
[x26]VOLAND
Moderator - Level 7
Регистрация: 07.06.2006
Сообщений: 556
Провел на форуме:
7549607

Репутация: 2702


Отправить сообщение для [x26]VOLAND с помощью ICQ Отправить сообщение для [x26]VOLAND с помощью AIM
По умолчанию Решение уравнений методом Крамера [c#]

http://www.voland-lab.com/files/other/KramerMax.exe
Может кому надо....
Сорс:
PHP код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace 
KramerMax
{
    public 
partial class Form1 Form
    
{
        public 
Form1()
        {
          
InitializeComponent();
        }

        
float def(float[,] a//находим определитель
        
{
            
float def;
            
def a[1,1]*a[2,2]*a[3,3] + a[1,2]*a[2,3]*a[3,1] + a[2,1]*a[3,2]*a[1,3] - a[1,3]*a[2,2]*a[3,1] - a[1,2]*a[2,1]*a[3,3] - a[1,1]*a[2,3]*a[3,2];
            return 
def;
        }
        
        private 
void button1_Click(object senderEventArgs e)
        {
            
xt.Text "";
            
yt.Text "";
            
zt.Text "";
            
tssl.Text "";

            if (
a11.Text == "" || a12.Text == "" || a13.Text == "" || a21.Text == "" || a22.Text == "" || a23.Text == "" || a31.Text == "" || a32.Text == "" || a33.Text == "")
            {
                
tssl.Text "Введены не все коэффициенты";
            }
            else
            {
                
float[,] = new float[44];
                
a[11] = float.Parse(a11.Text);
                
a[12] = float.Parse(a12.Text);
                
a[13] = float.Parse(a13.Text);
                
a[21] = float.Parse(a21.Text);
                
a[22] = float.Parse(a22.Text);
                
a[23] = float.Parse(a23.Text);
                
a[31] = float.Parse(a31.Text);
                
a[32] = float.Parse(a32.Text);
                
a[33] = float.Parse(a33.Text);
                
deftxt.Text def(a).ToString();
            }
        }

        private 
void button2_Click(object senderEventArgs e)
        {
            
tssl.Text "";

            if (
a11.Text == "" || a12.Text == "" || a13.Text == "" || a21.Text == "" || a22.Text == "" || a23.Text == "" || a31.Text == "" || a32.Text == "" || a33.Text == "" || b1.Text == "" || b2.Text == "" || b3.Text == "")
            {
                
tssl.Text "Введены не все элементы уравнения";
            }
            else
            {
                
float[,] = new float[44];
                
A[11] = float.Parse(a11.Text);
                
A[12] = float.Parse(a12.Text);
                
A[13] = float.Parse(a13.Text);
                
A[21] = float.Parse(a21.Text);
                
A[22] = float.Parse(a22.Text);
                
A[23] = float.Parse(a23.Text);
                
A[31] = float.Parse(a31.Text);
                
A[32] = float.Parse(a32.Text);
                
A[33] = float.Parse(a33.Text);
                
float D def(A);
                
deftxt.Text D.ToString();

                
float[,] = new float[44];
                
a[11] = float.Parse(b1.Text);
                
a[12] = float.Parse(a12.Text);
                
a[13] = float.Parse(a13.Text);
                
a[21] = float.Parse(b2.Text);
                
a[22] = float.Parse(a22.Text);
                
a[23] = float.Parse(a23.Text);
                
a[31] = float.Parse(b3.Text);
                
a[32] = float.Parse(a32.Text);
                
a[33] = float.Parse(a33.Text);
                
float Dx def(a);

                
float[,] = new float[44];
                
b[11] = float.Parse(a11.Text);
                
b[12] = float.Parse(b1.Text);
                
b[13] = float.Parse(a13.Text);
                
b[21] = float.Parse(a21.Text);
                
b[22] = float.Parse(b2.Text);
                
b[23] = float.Parse(a23.Text);
                
b[31] = float.Parse(a31.Text);
                
b[32] = float.Parse(b3.Text);
                
b[33] = float.Parse(a33.Text);
                
float Dy def(b);

                
float[,] = new float[44];
                
c[11] = float.Parse(a11.Text);
                
c[12] = float.Parse(a12.Text);
                
c[13] = float.Parse(b1.Text);
                
c[21] = float.Parse(a21.Text);
                
c[22] = float.Parse(a22.Text);
                
c[23] = float.Parse(b2.Text);
                
c[31] = float.Parse(a31.Text);
                
c[32] = float.Parse(a32.Text);
                
c[33] = float.Parse(b3.Text);
                
float Dz def(c);

                
float xyz;
                
Dx D;
                
Dy D;
                
Dz D;

                
xt.Text x.ToString();
                
yt.Text y.ToString();
                
zt.Text z.ToString();
            }
        }
    }

 
Ответить с цитированием

  #2  
Старый 17.10.2007, 13:29
Talisman
Постоянный
Регистрация: 22.04.2006
Сообщений: 566
Провел на форуме:
1325772

Репутация: 517


Отправить сообщение для Talisman с помощью ICQ
По умолчанию

фу.... всеголишь нужно написать функцию нахождения четности перестановки, и твоя прога станет !КОРОЧЕ! и будет считать матрицы любого размера n*n, n>2
 
Ответить с цитированием

  #3  
Старый 17.10.2007, 14:18
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Добавляешь рекурсивное вычесление определителя через разложение по столбцу/строке, будет короче и будет считать любые системы.
 
Ответить с цитированием

  #4  
Старый 17.10.2007, 14:41
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

>>и будет считать любые системы.
используя определение стандартное детерминанта, у тебя будет около n! вызовов, поэтому если и будет считать даже не большие системы, то очень долго.
 
Ответить с цитированием

  #5  
Старый 17.10.2007, 15:43
DWORD
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме:
165671

Репутация: 215
По умолчанию

Цитата:
Сообщение от ZaCo  
>>и будет считать любые системы.
используя определение стандартное детерминанта, у тебя будет около n! вызовов, поэтому если и будет считать даже не большие системы, то очень долго.
"стандартное определение" это через инверсии и перестановки.
Кстати nxn это не любая система, любая это nxm
 
Ответить с цитированием

  #6  
Старый 17.10.2007, 16:32
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

>>"стандартное определение" это через инверсии и перестановки.
разве на количество сложность алгоритма это как-то повлияет?
>>Кстати nxn это не любая система, любая это nxm
я пока не умею считать определитель матрицы 1x2
 
Ответить с цитированием

  #7  
Старый 17.10.2007, 16:56
Talisman
Постоянный
Регистрация: 22.04.2006
Сообщений: 566
Провел на форуме:
1325772

Репутация: 517


Отправить сообщение для Talisman с помощью ICQ
По умолчанию

2 _Great_:
при грамотной реализации сложность алгоритмов по нахождении четности перестановки и по разложению будет одна и та же - n!
2 DWORD:
ой... прям профессор. я написал: любые матрицы n*n. это не n*m. Не пытайся сунуть умное слово, если некуда =/
2 ZaCo
+5
 
Ответить с цитированием

  #8  
Старый 17.10.2007, 22:49
DWORD
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме:
165671

Репутация: 215
По умолчанию

Цитата:
я пока не умею считать определитель матрицы 1x2
Ну вообще-то такие системы тоже решаются.

2Talisman, "любые" написал _Great_. Зачем так реагировать, никто никого не хочет обидеть.
 
Ответить с цитированием

  #9  
Старый 17.10.2007, 23:18
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Цитата:
Сообщение от DWORD  
Ну вообще-то такие системы тоже решаются.

2Talisman, "любые" написал _Great_. Зачем так реагировать, никто никого не хочет обидеть.
Этим методом - нет.
 
Ответить с цитированием

  #10  
Старый 18.10.2007, 20:56
Ky3bMu4
Постоянный
Регистрация: 03.02.2007
Сообщений: 520
Провел на форуме:
1777536

Репутация: 932


Отправить сообщение для Ky3bMu4 с помощью ICQ
По умолчанию

Для метода Крамера нужны определители матриц. Определитель матрицы 1х2 можно посчитать путём ЭП . Хотя хз, может не прокатить, а проверять лень. Хотя даже если и прокатит, то будет намного длиннее Гаусса.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ