Ocena użytkownikóww: ***** / 5
Nadesłany przez Tomasz Lubiński, 18 października 2009 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
metoda_simpsona_cs/Metoda_Simpsona.cs:
// Calkowanie numeryczne - metoda Simpsona
// www.algorytm.org
// (c)2007 by Tomasz Lubinski
using System;
namespace metoda_simpsona_cs
{
/// <summary>
/// Calkowanie numeryczne - metoda Simpsona
/// </summary>
class Metoda_Simpsona
{
public delegate double FUNC(double x);
/// <summary>
/// Oblicza calke metoda Simpsona w przedziale od xp do xk z dokladnoscia n dla funkcji fun
/// </summary>
/// <param name="xp">poczatek przedzialu calkowania</param>
/// <param name="xk">koniec przedzialu calkowania</param>
/// <param name="n">dokladnosc calkowania</param>
/// <param name="func">funkcja calkowana</param>
/// <returns>przyblizona wartosc calki</returns>
private static double calculate(double xp, double xk, int n, FUNC func)
{
double dx, calka, s, x;
dx = (xk - xp) / (double)n;
calka = 0;
s = 0;
for (int i=1; i<n; i++)
{
x = xp + i*dx;
s += func(x - dx / 2);
calka += func(x);
}
s += func(xk - dx / 2);
calka = (dx/6) * (func(xp) + func(xk) + 2*calka + 4*s);
return calka;
}
//funkcja dla ktorej obliczamy calke
private static double func(double x)
{
return x*x+3;
}
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
double xp, xk;
int n;
FUNC function = new FUNC(func);
Console.WriteLine("Podaj poczatek przedzialu calkowania");
xp = double.Parse(Console.ReadLine());
Console.WriteLine("Podaj koniec przedzialu calkowania");
xk = double.Parse(Console.ReadLine());
Console.WriteLine("Podaj dokladnosc calkowania");
n = int.Parse(Console.ReadLine());
Console.WriteLine("Wartosc clki wynosi w przyblizeniu " + calculate(xp, xk, n, function));
}
}
}