numerieke methode

Wiskunde is niet alleen een vak op school. Kom je ergens in de praktijk (bijvoorbeeld tijdens je werk) een wiskundig probleem tegen dan kun je hier om hulp vragen.
Plaats reactie
mertens
Nieuw lid
Nieuw lid
Berichten: 3
Lid geworden op: 26 jan 2015, 13:49

numerieke methode

Bericht door mertens » 26 jan 2015, 14:20

Momenteel ben ik bezig met mijn afstudeeronderzoek en loop ik tegen het volgende probleem aan :

Om een schatting te kunnen maken van een conditionele faalkansdichtheid wil ik gebruik maken van expert judgement.
ik vraag experts om een schatting betreft de leeftijd van een component, het gemiddelde tijdstip van falen en de gemiddelde faalsnelheid van een component.

Deze methode ben ik tegengekomen in de literatuur. Hieruit volgt een vergelijking die m.b.v. een numerieke methode opgelost dient te worden.

Ik weet dat dit kan met een programma zoals matlab, waar ik ook over beschik. Alleen heb ik tijdens mijn studie nooit numerieke wiskunde gekregen en dit soort programma's gebruikt. Ik heb daarom geen idee hoe ik dit zou moeten aanpakken.


De volgende vergelijking dient te worden opgelost met steeds andere waarden voor tGF, t0 en lambda


Afbeelding

Bijvoorbeeld voor een gloeilamp met tGF= 800 uur, t0 = 500 uur en lambda = 0.00005 uur-1

Nu moet de parameter a worden gevonden, deze kan daarna weer worden toegepast in andere formules betreft de levensduurverdeling enz.


Is er iemand die mij beknopt uit kan leggen hoe ik dit probleem oplos, of misschien is het wel te hoog gegrepen voor iemand zonder ervaring met numerieke methode en differentiaal vergelijkingen ?

alvast bedankt

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: numerieke methode

Bericht door arie » 26 jan 2015, 18:36

Je zoekt a zodanig dat



In dit geval is Phi de CDF van de standaard normale verdeling, die zit in matlab ingebouwd:
normcdf(x)
of
normcdf(x, 0, 1)
waarbij 0 het gemiddelde is en 1 de standaard deviatie.

Hierdoor hebben we de integraal niet meer nodig, en kunnen we schrijven:



Nu zijn al je variabelen behalve a bekend, en je wilt a bepalen.
Herschrijf de vergelijking als



en stel het linker lid gelijk aan f(a), een functie van a:



dan zoek je de a zodanig dat f(a) = 0.
Dit betekent dat we het nulpunt van f(a) zoeken, en dat kan in matlab met de ingebouwde functie fzero, bijvoorbeeld

a = fzero(f, a0)

waarbij je a0 als eerste benadering (= een ruwe schatting of een gok) voor a invult.
De computer zoekt dan a in een gewenst aantal decimalen nauwkeurigheid.
En dit is dan een numerieke oplossing: een benadering van de oplossing, gevonden met een algoritme (in dit geval de functie "fzero" ingebouwd in matlab).
Dit in tegenstelling tot een algebraische of exacte oplossing, waarbij je de variabele die je zoekt naar 1 kant van het '=' teken werkt, en de rest naar de andere kant.

Kom je hiermee verder?

mertens
Nieuw lid
Nieuw lid
Berichten: 3
Lid geworden op: 26 jan 2015, 13:49

Re: numerieke methode

Bericht door mertens » 27 jan 2015, 07:59

Hartelijk bedankt !

Ik kom hier zeker weer een stap mee verder, ik dacht namelijk dat de integraal uitgeschreven moest worden.

Nu is het even zaak dat ik mijn verwaterde matlab kunsten tevoorschijn tover en het in matlab kan neerzetten

mertens
Nieuw lid
Nieuw lid
Berichten: 3
Lid geworden op: 26 jan 2015, 13:49

Re: numerieke methode

Bericht door mertens » 27 jan 2015, 19:52

Er gaat toch nog iets mis, heeft waarschijnlijk te maken met mijn kennis van matlab

Ik heb het volgende ingevoerd in matlab

>> f = @(a) ((1-exp(-0.025))/0.00005)+ sqrt(pi/a)*exp(-0.025) + ((0.00005.^2)/(4*a)) * normcdf(-0.00005/(sqrt(2*a))) - 800

f =

@(a)((1-exp(-0.025))/0.00005)+sqrt(pi/a)*exp(-0.025)+((0.00005.^2)/(4*a))*normcdf(-0.00005/(sqrt(2*a)))-800

Dan vervolgens met fzero, krijg ik de volgende foutmelding:

>> fzero(f,0.000001)
Error using erfc
Input must be real and full.

Error in normcdf>localnormcdf (line 124)
p(todo) = 0.5 * erfc(-z ./ sqrt(2));

Error in normcdf (line 46)
[varargout{1:max(1,nargout)}] = localnormcdf(uflag,x,varargin{:});

Error in @(a)((1-exp(-0.025))/0.00005)+sqrt(pi/a)*exp(-0.025)+((0.00005.^2)/(4*a))*normcdf(-0.00005/(sqrt(2*a)))-800


Error in fzero (line 343)
a = x - dx; fa = FunFcn(a,varargin{:});


iemand een idee wat er fout gaat ?

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: numerieke methode

Bericht door arie » 27 jan 2015, 22:32

Het lijkt er op dat normcdf() mis gaat.
fzero() zoekt een a zodat f() nul wordt.
Het kan zijn dat fzero() een negatieve a probeert, waardoor de sqrt(2*a) in het argument van normcdf() complex wordt, terwijl normcdf() een real verwacht.

Je zou een nieuwe functie g(a) kunnen maken, die:
als a <= 0 is deze return value geeft: 1 - a
en anders return value: f(a)

Op deze manier is:
g(a) gedefinieerd voor a <= 0, en de waarde van a zal door fzero() naar positief gedrukt worden,
g(a) = f(a) voor positieve a (en die zoeken we)

Je roept in matlab vervolgens aan:
fzero(g, 0.000001)

Mocht dit niet het probleem zijn waarover matlab klaagt, dan kan je f(a) nog in stukken opknippen, en op die manier proberen uit te vinden waar het probleem dan wel ligt.

Plaats reactie