Witam, mam taki problem... Napisałem kod obliczania całki metodą trapezów według schematu, który jest w załączniku...
Do policzenia mam całkę arctan(x) w przedziale <0,10> i wynik powinien wyjść około 12,4037164846167... a mi wychodzi 10 i jakiś grosz... Nie wiem dlaczego. Zmieniam przybliżenie, ale to nic nie daje mądrego...
Poniżej zamieszczam kod, który napisałem... Mógłby ktoś kto rozumie i może pomóc rzucić okiem i udzielić wskazówek? Z góry dziękuję..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace calka2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("poczatek");
double a = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("koniec");
double b = Convert.ToDouble(Console.ReadLine());
double E = Math.Pow(10,-4);
double k = 0;
double suma = 0;
double wynik = 0;
double Tk = 0;
double Tkp = 0;
while (Math.Abs(Tk-Tkp) < E)
{
//k zmienia sie wraz z kolejna iteracja od 1 do ...
k++;
for (int i = 1; i <= m(k)-1; i++)
{
for (int j = 0; j < m(k); j++)
{
suma += f(a + j * h(a, b, k));
}
}
Tk = licz(a, b, k, suma);
//Console.WriteLine(Tk);
Tkp = licz(a, b, k - 1, suma);
//Console.WriteLine(Tkp);
//Console.WriteLine();
}
Console.WriteLine(Tk);
Console.ReadLine();
}
static double f(double x)
{
return Math.Atan(x);
}
static double m(double k)
{
return Math.Pow(2, k);
}
static double licz(double a, double b, double k, double suma)
{
double T = 0;
return T = (h(a, b, k) / 2) * (f(a) + f(b) + 2 * suma);
}
static double h(double a, double b, double k)
{
double m = Math.Pow(2, k);
if (k == 0)
{ return b - a; }
else
{ return (b - a) / m; }
}
}
}