Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Решение уравнений методом Крамера [c#] (https://forum.antichat.xyz/showthread.php?t=51350)

[x26]VOLAND 17.10.2007 10:47

Решение уравнений методом Крамера [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();
            }
        }
    }



Talisman 17.10.2007 13:29

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

_Great_ 17.10.2007 14:18

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

ZaCo 17.10.2007 14:41

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

DWORD 17.10.2007 15:43

Цитата:

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

"стандартное определение" это через инверсии и перестановки.
Кстати nxn это не любая система, любая это nxm

ZaCo 17.10.2007 16:32

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

Talisman 17.10.2007 16:56

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

DWORD 17.10.2007 22:49

Цитата:

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

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

_Great_ 17.10.2007 23:18

Цитата:

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

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

Этим методом - нет.

Ky3bMu4 18.10.2007 20:56

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


Время: 22:30