Metoda prostokątów, trapezów, parabol, Bessela
namespace calkowanie1
{
public partial class Form1 : Form
public Form1()
private void label1_Click(object sender, EventArgs e)
private void label3_Click(object sender, EventArgs e)
double f(double xi)
return xi * xi;
}
private void buttonLicz_Click(object sender, EventArgs e)
double A = Convert.ToDouble(textBoxA.Text);
double B = Convert.ToDouble(textBoxB.Text);
int N = Convert.ToInt32(textBoxN.Text);
double wynik=0, xi, Pi;
double h = (B - A) / N;
for (int i = 0; i <= N-1; i++)
xi = A + i * h;
switch (comboBox1.SelectedIndex)
case 0: Pi = h * f(xi); break;
case 1: Pi = h * f(xi+h/2); break;
case 2: Pi = (h / 2) * ( f(xi) + f(xi+h)); break;
case 3: Pi = (h / 2) * ( f(xi+h/3) + f(xi + 2*h/3)); break;
case 4: Pi = (h / 6) * (f(xi) + 4 * f(xi + h / 2) + f(xi + h)); break;
case 5: Pi = (h / 3) * (2 * f(xi + h / 4) - f(xi + h / 2) + 2 * f(xi + 3*h / 4)); break;
case 6: Pi = (h / 8) * (f(xi) + 3 * f(xi + h / 3) + 3 * f(xi + 2*h / 3) + f(xi + h)); break;
case 7: Pi = (h / 24) * (11 * f(xi + h / 5) + f(xi + 2*h/5) + f(xi + 3*h/5) + 11 * f(xi +
4*h/5)); break;
default: Pi = 0; break;
wynik = wynik + Pi;
textBoxWyniki.AppendText( wynik.ToString() + "\r\n");
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
private void textBoxA_TextChanged(object sender, EventArgs e)
Zadanie domowe o energii
private void button1_Click(object sender, EventArgs e)
const int N = 314; //w naszym przypadku mamy ustalonąLiczbęKrokówPonieważZostałoDokonanych314Pomiarow
double A, B, Ei, t, wynik = 0;
int U = 230;
double[] T = new double[314];
T[0] = 0;
T[1] = 0.01;
………………
T[313] = 0.011592;
A = 0;
B = N;
t = (B - A) / N / 60; //czas trwania między poszczególnymi pomiarami wynosi 1 minuta
//algorytm napisałem ale również można było przyjąć że
//człon (B - A) / N = 1 minuta. Dzielimy przez 60 ponieważ wynik
//który otrzymujemy mamy w watogodzinach (Wh)
for (int i = 0; i <= N - 2; i++)//nie wiedziałem jak ominąc fakt iż dla metody trapezów wzory zamknięte
//"i" może być maksymalnie N a w ostanim kroku jest N+1 co powoduje
//wyskakiwanie błędu.
switch (comboBoxMetoda.SelectedIndex)
case 0: Ei = t * U * T[i]; break; //dla tej metody przy deklaracji i maksymalnie
//wartość i może być i<=N-1
case 1: Ei = t / 2 * (U * T[i] + U * T[i + 1]); break;
//własnie w tym algorytmie przy T[i+1] przy
//"i" równym 313 ten człon będzie 314 a takiego
// w zadeklarowanej tablicy nie mamy. Dlatego
//w deklaracji i przyjmuje że maksymalnie może
//być i<=N-2.
default: Ei = 0; break;
wynik = wynik + Ei;
textBoxWynik.AppendText(wynik.ToString() + "\r\n");
Interpolacja
namespace Interpolacja
const int N = 5;
double[] x = new double[N + 1];
double[] y = new double[N + 1];
double W(double zmX)
double wynik = 0;
double iloczyn;
for (int i = 0; i <= N; i++) //pętla do sumy
iloczyn = 1;
for (int j = 0; j <=N; j++) //pętla do iloczynu
if (j!=i) iloczyn *= ( zmX -x[j]) / (x[i]-x[j] );
wynik += y[i] * iloczyn;
return wynik;
x[0] = 1; y[0] = 1;
x[1] = 2; y[1] = 2;
x[2] = 3; y[2] = 3;
x[3] = 5; y[3] = 2;
x[4] = 6; y[4] = 3;
x[5] = 7; y[5] = 1;
for (int i = 0; i <= N; i++) chart1.Series[0].Points.AddXY( x[i] , y[i] );
chart1.Series[1].Points.Clear(); //czyszczenie charta
double zmX = x[0];
do {
zmX +=0.1;
chart1.Series[1].Points.AddXY(zmX, W(zmX) );
} while ( zmX <= x[N] );
Rozwiązywanie układu równań liniowych
namespace WindowsFormsApplication1{
public partial class Form1 : Form{
const int N = 2;
double[,] A = new double[N+1 , N+1];
double[] Xn = new double[N + 1];
double[] Xs = new double[N + 1];
double[] B = new double[N + 1];
double[] DX = new double[N + 1];
double FindMax(...
damiano_80