14. august 2009 - 12:48Der er
5 kommentarer og 1 løsning
Udregne en "improper integral" i C#
Hey Eksperten.dk
Jeg brugte 7 timer i går sammen med en kammerat på at finde en eller anden form for kode til at regne en "improper integral" i C#. Vores Texas Instruments TI 89 (Lommeregner) har en integral funktion som vi bruger og som virker på lommeregneren. Dog er den ikke til at finde i nogle former for kode heller.
Nedenstående billede viser den integral vi skal regne ud. Vi er kommet frem til D1 som i vores tilfælde er 1.345067.
Formålet med det hele er at lave en "Standard normal kumulativ distributions funktion" af D1. Det er til prisfastsættelse af optioner, nærmere bestemt delta variablen.
Udregningen skal foretages i C#.
Er der nogen der har overskud/VIDEN til at lave en funktion der kan udregne overstående eller som har koden fra en TI 89 lommeregner?
1) formlen er forkert i jeres PNG 2) dette er en meget kendt problem stilling med nogle meget avancerede loesninger 3) men p.g.a. tidsmangel faar I kun er meget simpel loesning
using System;
namespace E { public class Calculus { private const int N = 1000000; public delegate double Func(double x); public static double Integrate(Func f, double start, double finish) { double eps = (finish - start) / N; double sum = 0; for(int i = 0; i < N; i++) { sum += eps*f(start + eps * (0.5 + i)); } return sum; } } public class Program { public static double StandardNormal(double x) { return Math.Exp(-x*x/2)/Math.Sqrt(2*Math.PI); } public static void Main(string[] args) { //Console.WriteLine(Math.PI / 2); //Console.WriteLine(Calculus.Integrate((double x) => Math.Sqrt(1 - x*x), -1, 1)); Console.WriteLine(Calculus.Integrate(StandardNormal, -10, 1.345067)); Console.ReadKey(); } } }
Mange tak arne_v :-) Vi vil prøve ovenstående og vi vil være virkelig taknemmelige hvis du gad bruge tid på en mere avanceret løsning. Specielt da vi gerne vil have det så præcist som muligt og vi føler vi har stødt panden mod en mur, men som du nu har gjort væsenligt mindre.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.