Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Krånglig matte i C#

Postades av 2005-12-12 10:53:31 - Lars Nolander, i forum c# (c-sharp), Tråden har 5 Kommentarer och lästs av 562 personer

Länk till formel som jag försöker lösa:
http://odellion.com/assets/financialmodels/internal_rate_return_irr_equation.gif

Jag sitter här och sliter mitt hår. Är det någon som kan tipsa mig hur jag ska gå tillväga för att få till en funktion i C# som lyckas med att få fram IRR ur ovanstående ekvation?

Tanken jag har är att jag först sätter IRR till 1.99 och sedan räkna ut summan. Så länge Summan är större än 100 och mindre än 0 så stegas IRR ner och summan provas igen.
Problemet är dock att jag villat bort mig i alla mina loopar. Går det att göra så som jag har tänkt mig på något vis?


private void button1_Click(object sender, System.EventArgs e)
		{
			double  Summa, temp1=0, temp2=0;
			int investering = -2000000,kassaflode = 1300000,loptid =5;	

			for (double IRR = 1.99; IRR >= 1.09; IRR -=0.05)
			{
				do
				{
			
					for ( int i=1; i <= loptid; i++)
					{
						temp1 = (kassaflode /(Math.Pow(IRR,i)));
						temp2 = temp2+temp1;
					}
					Summa = investering + temp2;
						
				}
				while (Summa > 100 && Summa > 0);
				
			}



Svara

Sv: Krånglig matte i C#

Postades av 2005-12-12 11:02:36 - Niklas Jansson

I princip kan ekvationen lösaas genom att du skriver:
x = summa (c_i /(y^i)), där y=1+IRR
Sen multiplicerar du båda sidor med y^n, och får då en n:e-gradsekvation att lösa.

Om "kassaflöde" är konstant vid varje tillfälle bör det vara hyfsat enkelt att hitta en allmän lösning.

Din iterativa variant skall väl fungera, men det verkar som att du inte riktigt har tänkt igenom koden före.


Svara

Sv: Krånglig matte i C#

Postades av 2005-12-13 16:18:35 - Jens Berlips

använd Newton raphson för att lösa ekvationen.

du har alltså f(irr) = sum_i=1^n [ (cf_i*(1+irr)^-i) ], derivera: df(irr)/dirr = sum_i=1^n [-i * cf_i*(i+irr)^(-i-1)]

Nu tar du ett irr_0 = (gissa något rimligt, kankse 1.5), iterera nu följande:

irr_k+1 = irr_{k} - f(irr_k)/( df(irr_k)/dirr )

när/om irr_k konvergerar ie. |irr_k+1 - irr_k| < epsilon ~ 0.001 (eller den precision du vill ha) så är du klar! Glöm inte att sätta ett maximalt antal steg.

för programmeringen gör du två funktioner:
1) evaluerar funktionen f(irr)
2) och en som evaluerar df(irr)/dirr

obs1 Funktionen har som tidigare inlägg egentligen n st lösningar, men att det finns fler än en intressant lösning är osannolikt,

obs2 om du börjar med ett giltigt irr_0 så bör iterationen konvergera.

Mvh
Jens Berlips


Svara

Sv: Krånglig matte i C#

Postades av 2005-12-13 20:56:02 - Jan Bulér

Det är ju alltid roligast om man kan fixa en lösning själv men du kan kanske ha någon nytta med vad som finns här http://www.soft-album.com/free/irr/


Svara

Sv:Krånglig matte i C#

Postades av 2005-12-13 21:08:27 - Niklas Jansson

Newton-Raphson fungerar visserligen, och har väl en konvergens som går som h^2 tror jag, men jag tror nog att det finns bra mycket enklare varianter för det här isf; en enkel iterativ, eller en binärsökning.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 166
27 952
271 704
816
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies