[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How to implement a summation function for numerical solving?
From: |
Liam Groener |
Subject: |
Re: How to implement a summation function for numerical solving? |
Date: |
Wed, 15 Jun 2011 22:46:12 -0700 |
On Jun 15, 2011, at 7:21 AM, andrewcd wrote:
> Thanks everybody for all of your help so far. Now I have a new problem --
> fsolve is highly sensitive to the initial "guess" vector. I guess that it
> is not iterating enough, or something. Or, since it is guessing at the
> value of an exponent, small changes by its standards lead to big changes in
> my results. Any thoughts on how I can get around this? Increase the number
> of iterations somehow? Or is there a different way to solve simultaneous
> nonlinear equations?
>
> To get a flavor for my problem, try to run my code below, using guess =
> [.5,0] and guess = [0,0]. The code *should* eventually spit out a normal
> curve with a mean and variance of 2. But the wrong guess gives the wrong
> curve.
>
> Thanks again, and thanks in advance.
>
> Code:
> ------------------------------------------------------------------------------------------------
> clear all
>
> global mu;
> global x;
> global lx;
> global xmin;
> global variance;
> AT = .5;
> xmin = -10;
> xmax = 10;
> stp = .1;
> x = xmin:stp:xmax;
> lx = length(x);
> mu = 2;
> variance = 2;
>
> guess = [.5,0]
>
> function fcns = eqns(z);
> global x;
> global lx;
> global mu;
> global variance;
> lam1=z(1);
> lam2=z(2);
> f1 = x;
> f2 = (x-mu).^2;
> p = exp(-lam1*f1 - lam2*f2) ;
> fcns = [(f1-mu)*p', (f2-variance)*p'];
> end
>
> result = fsolve(@eqns, guess)
>
> p = e.^(-result(1)*x - result(2)*(x-mu).^2);
>
> Z = sum(p);
> P=p./Z;
>
> plot( x, P);
> sum(P)
> axis([xmin-1,xmax+1,0,max(P)*2])
>
> c = cumsum(P);
> for n = 1:length(c);
> if c(n)<AT;
> EV(n) = c(n);
> endif
> end
>
> L = length(EV);
> EV = stp*L+xmin
>
Hi,
Since no one else has answered your question, I thought I'd take a crack at it.
But, I don't know what your problem actually is. I ran the two cases you
suggested with the default tolerance. The results are:
-------------------------------------------------------
guess =
0.50000 0.00000
result =
8.0663e-08 2.5000e-01
FVEC =
-7.5485e-06 7.7026e-05
INFO = 2
OUTPUT =
iterations = 185
successful = 184
funcCount = 213
ans = 1
EV = 2
-----------------------------
guess =
0 0
result =
-6.5087e-09 2.5000e-01
FVEC =
-1.3681e-06 1.6720e-05
INFO = 2
OUTPUT =
iterations = 70
successful = 69
funcCount = 90
ans = 1.0000
EV = 2
The central part of the plot is:
PastedGraphic-1.pdf
Description: Adobe PDF document
Here the the [.5,0] guess is plotted as a solid red line while the [0,0] guess
results are overlaid in green dots. All in all, the agreement seems within the
default tolerances to me. (You could tighten them if you wish.) In responding,
please let us know what version of Octave you are using and what operating
system you are using. (I'm using octave 3.4 on Mac OS X)
- How to implement a summation function for numerical solving?, andrewcd, 2011/06/13
- Re: How to implement a summation function for numerical solving?, Liam Groener, 2011/06/13
- Re: How to implement a summation function for numerical solving?, andrewcd, 2011/06/13
- Re: How to implement a summation function for numerical solving?, andrewcd, 2011/06/14
- Re: How to implement a summation function for numerical solving?, Kimmo Luoma, 2011/06/14
- Re: How to implement a summation function for numerical solving?, John W. Eaton, 2011/06/14
- Re: How to implement a summation function for numerical solving?, andrewcd, 2011/06/15
- Re: How to implement a summation function for numerical solving?,
Liam Groener <=
- Re: How to implement a summation function for numerical solving?, Liam Groener, 2011/06/16
- Re: How to implement a summation function for numerical solving?, andrewcd, 2011/06/16