Przykład zastosowania funkcji do rozwiązywania układu równań liniowych
Wykorzystując metodę Sarrusa, czyli rozwiązanie układu równań przy wykorzystaniu wyznaczników macierzy. Symboliczny zapis układu równań liniowych wygląda jak poniżej
![Układ równan liniowych. Visual Studio C#](./g-VS/uklad-rownan-6.webp)
Rozwiązaniem tego układu jest para liczb x i y, ale układ może być sprzeczny (brak rozwiązań) lub nieoznaczony (nieskończenie wiele rozwiązań). Te warunki należy uwzględnić pisząc algorytm rozwiązujący układ dowolnych równań liniowych z dwiema niewiadomymi.
Wartość x i y wyliczymy stosując metodę wyznaczników. Wzorem wartość x i y wyraża się jak poniżej
![Układ równan liniowych metoda Sarrusa. Visual Studio C#](./g-VS/uklad-rownan-7.webp)
Gdzie wyznaczniki Wx, Wy i W oblicza się jak poniżej
![Układ równan liniowych metoda wyznacznikowa. Visual Studio C#](./g-VS/uklad-rownan-8.webp)
Warunki rozwiązania układu równań są następujące
- jeżeli W<>0 to istnieje jedno rozwiązanie
- jeżeli W=0 i Wx<>0 lub Wy<>0 to układ jest sprzeczny (brak rozwiązań)
- jeżeli W=0 i Wx=0 i Wy=0 to układ jest nieoznaczony (nieskończenie wiele rozwiązań)
Schemat algorytmu rozwiązującego układ równań liniowych z dwiema niewiadomymi
![Schemat algorytmu rozwiązującego układ równań liniowych z dwiema niewiadomymi. Visual Studio C#](./g-VS/uklad-rownan-5.webp)
Proponowany układ kontrolek
![układ równań liniowych z dwiema niewiadomymi aplikacja. Visual Studio C#](./g-VS/uklad-rownan-1.webp)
W aplikacji wykorzystamy możliwość uaktualnienia postaci równania po wpisaniu współczynnika. Uaktualnienie zrealizujemy w zdarzeniu puszczenia klawisza (KeyUp) w kontrolkach TextBox.
Zaznacz grupę kontrolek TextBox przeznaczonych do wprowadzania współczynników równania pierwszego i drugiego
![rozwiązanie układ równań liniowych z dwiema niewiadomymi aplikacja. Visual Studio C#](./g-VS/uklad-rownan-2.webp)
Przejdź do panelu Właściwości i wybierz zdarzenie KeyUp
![Zdarzenie KeyUp Visual Studio C#](./g-VS/uklad-rownan-3.webp)
W metodzie obsługi zdarzenia KeyUp dla kontrolek równania pierwszego wprowadź poniższy kod
Wskazówka:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
label7.Text = textBox1.Text + "x" +
"+" + textBox2.Text + "y" +
"=" + textBox3.Text;
}
Wskazówka:
private void textBox4_KeyUp(object sender, KeyEventArgs e)
{
label8.Text = textBox4.Text + "x" +
"+" + textBox5.Text + "y" +
"=" + textBox6.Text;
}
Skompiluj program i sprawdź efekt działania. Prawidłowo działający program pokaże w kontrolkach typu Label postać równania liniowego
Funkcja obliczająca wyznacznik
Piszemy funkcję obliczającą wyznacznik macierzy 2x2. Funkcja będzie mieć cztery argumenty typu rzeczywistego- odpowiednie współczynniki podane z równań. Będzie również zwracać wynik w postaci liczby rzeczywistej.
Wskazówka:
float wyznacznik2x2(float _i1,float _j1,float _i2, float _j2)
{
return _i1 * _j2 - _i2 * _j1;
}
Realizujemy algorytm rozwiązywania układu równań liniowych
W zdarzeniu Click kontrolki Button wprowadź poniższy kod
Wskazówka:
private void button1_Click(object sender, EventArgs e)
{
float a1 = (float)Convert.ToDouble(textBox1.Text),
b1 = (float)Convert.ToDouble(textBox2.Text),
c1 = (float)Convert.ToDouble(textBox3.Text),
a2 = (float)Convert.ToDouble(textBox4.Text),
b2 = (float)Convert.ToDouble(textBox5.Text),
c2 = (float)Convert.ToDouble(textBox6.Text);
float Wx = wyznacznik2x2(c1, b1, c2, b2),
Wy = wyznacznik2x2(a1, c1, a2, c2),
W = wyznacznik2x2(a1, b1, a2, b2);
//wyczyść textBox'a komunikatów
textBox7.Text = null;
float x, y;
//rozwiąż układ równań
if (W != 0) {
x = Wx / W;
y = Wy / W;
textBox7.AppendText("Istnieje jedno rozwiązanie" + Environment.NewLine);
textBox7.AppendText("x = " + x.ToString("F2") + Environment.NewLine);
textBox7.AppendText("y = " + y.ToString("F2"));
}
else
if(Wx==0 && Wy == 0)
textBox7.AppendText("Układ nieoznaczony, nieskończenie wiele rozwiązań");
else
textBox7.AppendText("Układ sprzeczny, brak rozwiązań");
}
Skompiluj program i sprawdź działanie. Poniżej zrzut ekranu działającej aplikacji rozwiązującej dowolny układ równań liniowych z dwiema niewiadomymi
![aplikacja rozwiązujac aukład równań Visual Studio C#](./g-VS/uklad-rownan-4.webp)
Pełny kod programu
Pełny kod utworzonej aplikacji obliczającej rozwiązania układu równań liniowych z dwiema niewiadomymi
Wskazówka:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace _22PojecieFunkcji_UkladRownan
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
float wyznacznik2x2(float _i1,float _j1,float _i2, float _j2)
{
return _i1 * _j2 - _i2 * _j1;
}
private void button1_Click(object sender, EventArgs e)
{
float a1 = (float)Convert.ToDouble(textBox1.Text),
b1 = (float)Convert.ToDouble(textBox2.Text),
c1 = (float)Convert.ToDouble(textBox3.Text),
a2 = (float)Convert.ToDouble(textBox4.Text),
b2 = (float)Convert.ToDouble(textBox5.Text),
c2 = (float)Convert.ToDouble(textBox6.Text);
float Wx = wyznacznik2x2(c1, b1, c2, b2),
Wy = wyznacznik2x2(a1, c1, a2, c2),
W = wyznacznik2x2(a1, b1, a2, b2);
//wyczyść textBox'a komunikatów
textBox7.Text = null;
float x, y;
//rozwiąż układ równań
if (W != 0) {
x = Wx / W;
y = Wy / W;
textBox7.AppendText("Istnieje jedno rozwiązanie" + Environment.NewLine);
textBox7.AppendText("x = " + x.ToString("F2") + Environment.NewLine);
textBox7.AppendText("y = " + y.ToString("F2"));
}
else
if(Wx==0 && Wy == 0)
textBox7.AppendText("Układ nieoznaczony, nieskonczenie wiele rozwiązań");
else
textBox7.AppendText("Układ sprzeczny, brak rozwiązań");
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
label7.Text = textBox1.Text + "x" +
"+" + textBox2.Text + "y" +
"=" + textBox3.Text;
}
private void textBox4_KeyUp(object sender, KeyEventArgs e)
{
label8.Text = textBox4.Text + "x" +
"+" + textBox5.Text + "y" +
"=" + textBox6.Text;
}
}
}
Ćwiczenie:
Na podstawie przedstawionego rozwiązania oraz odszukanych informacji w Internecie dotyczących wyznacznika 3x3 napisz aplikację rozwiązującą układ równań z trzema niewiadomymi