Subject: Re: SVD
From: Robin Becker
Date: Sun, 3 Nov 1996 00:20:11 +0000
In article ,
"John C. Nash" writes
>John Chandler suggested that nobody would use normal equns for
>systems that may be ill-conditioned (most of them). In general,
>I heartily agree, but have a specific counter-example that
>likely supports the generalization.
>
>This arose in implementing the Marquardt nonlinear least squares
>method -- actually my own modification to cope with a pretty
>nasty BASIC interpreter in 1975. While we wanted to use the svd
>or QR or (name your own preferred "good" method), they were just
>too slow if we had any number of observations, since the normal
>equations were p * p where p is the number of parameters, while the
>Jacobian matrix J that we would have to decompose was n * p where
>n >> p usually.
>
>Now we did always have the Levenberg / Marquardt parameter lambda
>that multiplied a metric matrix (diagonal, often unity) that was
>added to the J' * J normal equation matrix, but even so in the
>cruddy arithmetic would get pivots that the algorithm complained
>about (we tested). The main issue was speed, and we could take care
>of the not-so-hot numerics by doing an extra iteration or two, since
>they took a lot less time than the svd or similar steps.
>
>JN
>
>John C. Nash, Professor of Management, Faculty of Administration,
>University of Ottawa, 136 Jean-Jacques Lussier Private,
>P.O. Box 450, Stn A, Ottawa, Ontario, K1N 6N5 Canada
>email: jcnash@uottawa.ca, voice mail: 613 562 5800 X 4796
>fax 613 562 5164, Web URL = http://macnash.admin.uottawa.ca
>
Many of the interior point LP/Conic Programming algorithms also use
scaled normal equations. These are often badly scaled, but I believe
this is got round by using the structure of the equations being solved.
Doing SVD on the larger problems would probably be prohibitive and in
the very largest problems iterative methods are resorted to.
--
Robin Becker
Subject: Please post source code for Hilbert filling curve again
From: rcsrv@minyos.its.rmit.EDU.AU (Robin Vowels)
Date: 3 Nov 1996 03:42:50 GMT
jk94r@ecs.soton.ac.uk (Joseph Kuan) writes:
>Last week, I have asked for the source code of Hilbert space filling curve and someone
>has posted the source code. I lost the file, so please post it again.
> Thanks a lot
> Joe
Here is the Hilbert algorithm in PL/I (runs on OS/2, Windows 95,
and Windows NT) :
/* Copyright (c) 1995 by R. A. Vowels. */
/* From "Introduction to PL/I, Algorithms, & Structured Programming. */
DEFINE ORDINAL
Compass (North, East, South, West);
DECLARE h FIXED BINARY STATIC INITIAL (15); /* The step size. */
HILBERT:
PROCEDURE (East, South, West, North, Order) RECURSIVE;
DECLARE (East, South, West, North) TYPE Compass,
Order FIXED BINARY;
IF Order <= 0 THEN RETURN;
CALL HILBERT (South, East, North, West, Order-1); CALL MOVE (East, East, h);
CALL HILBERT (East, South, West, North, Order-1); CALL MOVE (South, South, h);
CALL HILBERT (East, South, West, North, Order-1); CALL MOVE (West, West, h);
CALL HILBERT (North, West, South, East, Order-1);
END HILBERT;
Subject: Re: PRIME NUMBER UPTO 2^64 on CDROM?
From: mmacleod@henge.com (Malcolm MacLeod)
Date: Sun, 03 Nov 1996 09:18:46 GMT
Some of you guys just don't get it, do you?
>Angel Garcia says:
>
>Silly question !: Nobody knows exactly how many primes below 2^64
>but if you look for approximate number... then the answer is so ridiculously
>trivial that I don't dear to post it... just look to any elementary
>book on Number Theory before seriously questioning about such serious
>enterprise (very sound, indeed) as to put in CDrom any set of primes.
There are NO silly questions.
But I often get silly answers, like yours.
"Dann Corbit" wrote:
>As x gets large pi(x) is approximately x/log(x).
>see http://www.utm.edu/research/primes/howmany.shtml#pi_def
>That gives about 415,828,534,307,635,078 (415 Quadrillion) primes.
>Multiply by 64 bits per prime number gives an even larger number than
>storing the individual bit positions as prime/not-prime. Plus those
>primes themselves would not compress very well at all.
Thank you for a rational, considerate, informative reply.
****
For everyone else, especially those who sent e-mail: I am not
offering to sell a CD ROM. I was simply discussing (with the original
poster) an interesting, challenging technical problem. Some of you
remind me of the government officials in the 19th century who actually
thought they should close the patent office, since "everything has
already been invented".
****
Please note: you don't need 64 bits to represent *all* numbers. Just
the large ones. More importantly, note carefully the wording of my
original message. I did't I thought is was possible to STORE the
primes on the CDROM. I said ENCODE them on the CDROM. That wording
was intentional, and precise. Get it?
Subject: Re: Using C for number-crunching (was: Numerical solution to Schrodinger's Eq)
From: gerryq@indigo.ie (Gerry Quinn)
Date: Sun, 03 Nov 96 11:52:22 GMT
In article , pecora@zoltar.nrl.navy.mil (Louis M. Pecora) wrote:
>In article <552lh3$8fe@niamh.indigo.ie>, gerryq@indigo.ie (Gerry Quinn) wrote:
>
>
>> As far as I know, most C++ (and I presume C) optimising compilers allow
>one to
>> take risks regarding aliasing - in other words you can set a switch to ignore
>
>> the possibility of aliasing for a certain section of the program. If this
>> switch is set, the compiled code will not run correctly if aliasing does
>> occur. If you have ensured that it doesn't, then you get faster code.
>
>Now that sounds like a sensible way to handle a lot of the C (and other
>language) optimizations problems. Most center around what the compiler
>can assume and cannot assume. Make it clear what the switch is assuming
>and then let the developer decide what to do.
>
>What compilers have this switch? I was not aware of it (I am not exactly
>compiler savy on the technical end, sorry.).
>
>--
>Louis M. Pecora
Microsoft VC++ has the ability to set these options globally anyhow. I'm
pretty sure that the method can be applied to separate sections of code (you
could always compile a section separately as a library if there were
problems).
- Gerry
----------------------------------------------------------
gerryq@indigo.ie (Gerry Quinn)
----------------------------------------------------------
Subject: Re: PRIME NUMBER UPTO 2^64 on CDROM?
From: Wayne Schlitt
Date: 3 Nov 1996 10:53:14 -0600
In <55ho8k$gld@henge2.henge.com> mmacleod@henge.com (Malcolm MacLeod) writes:
>
> Please note: you don't need 64 bits to represent *all* numbers. Just
> the large ones. More importantly, note carefully the wording of my
> original message. I did't I thought is was possible to STORE the
> primes on the CDROM. I said ENCODE them on the CDROM. That wording
> was intentional, and precise. Get it?
[ yeah, I was kind of surprised at the poor reaction to your question
too.. *sigh* I thought it was an interesting problem... ]
My initial thoughts on this would be to try doing something like this:
1) Just "know" that 2, 3, 5, 7 and 11 are primes. (or some small list)
2) Store a bit map of all numbers that aren't multiples of the above
with 1's representing the prime numbers. This bit map should
store, say, 1000-10000 bits.
3) By that time, the distance between the 1-bits (primes) will be
large enough that you are better off storing "the distance to the
next 1-bit (prime)".
You might be able to get away with storing these differences as a
fixed sized encoding, with periodically increasing the size, but
there are going to be cases where there is a very large distances
between two primes. So, you might have to allow for some "escape"
sequences such as a distance of zero meaning that you should use
the next 2 (4?) slots for the distance.
While this might work fairly well to compress the data, it still won't
be enough to get all primes less than 2^64 on a cd-rom. Each prime is
going to take up at least 1 bit, and probably much more (3-6 bits?).
Since there are about 2^58 primes less than 2^64, this method would
need about 2^62 bits to encode them all. A cd-rom only contains about
2^32 bits.
Unless you can figure out a way to store something like 2^30 primes
per bit, you aren't going to be able to do it.
I think trying to store all primes less than 2^32 on a cd-rom is a
much more "realistic" idea. Then, all you would have to do is worry
about how long it would take to generate this list. (The numbers
for this task don't look too good either...)
-wayne
--
Wayne Schlitt can not assert the truth of all statements in this
article and still be consistent.
Subject: Re: non linear cubic spline
From: gay@sfu.ca (Ian Gay)
Date: Sun, 03 Nov 96 18:23:53 GMT
In article <327CCC21.63A6@interlog.com>,
Bob Falkiner wrote:
>I am looking for a PC routine that will do a non linear cubic spline,
>where the "stiffness" of the spline can be an input parameter over a
>range of 0-1 where 0 would be a cubic spline fit where the spline curve
>goes through each of the input data points and 1 would be a linear
>regression. there is a routine in the SAS mainframe library (NLIN?)
>that does this. Are there any alternates, as I can't afford SAS for
>personal use on the PC.
An algorithm for this was published by Reinsch in Numerische Mathematik,
sometime in the 60's, if you want to roll your own. e-mail me if you need the
exact reference.
Subject: Re: Using C for number-crunching (was: Numerical solution to Schrodinger's Eq)
From: pausch@electra.saaf.se (Paul Schlyter)
Date: 3 Nov 1996 18:53:09 +0100
In article ,
H Richardson wrote:
> > Consider this piece of code:
> >
>
> What language is this? I'll assume that you meant Fortran 77 :-)
>
>> SUBROUTINE COPY(DOUBLE PRECISION A, DOUBLE PRECISION B, INTEGER N)
>> DIMENSION A(N), B(N)
>> INTEGER I
>> DO 100 I=1,N
>> 100 A(I) = B(I)
>> END
It's called "Fortran-77 with function prototypes..." :-)
--
----------------------------------------------------------------
Paul Schlyter, Swedish Amateur Astronomer's Society (SAAF)
Grev Turegatan 40, S-114 38 Stockholm, SWEDEN
e-mail: pausch@saaf.se psr@home.ausys.se
Subject: Re: PRIME NUMBER UPTO 2^64 on CDROM?
From: bp887@FreeNet.Carleton.CA (Angel Garcia)
Date: 3 Nov 1996 18:59:10 GMT
Malcolm MacLeod (mmacleod@henge.com) writes:
> Some of you guys just don't get it, do you?
>
>>Angel Garcia says:
>>
>>Silly question !: Nobody knows exactly how many primes below 2^64
>>but if you look for approximate number... then the answer is so ridiculously
>>trivial that I don't dear to post it... just look to any elementary
>>book on Number Theory before seriously questioning about such serious
>>enterprise (very sound, indeed) as to put in CDrom any set of primes.
>
> There are NO silly questions.
> But I often get silly answers, like yours.
>
>
> "Dann Corbit" wrote:
>>As x gets large pi(x) is approximately x/log(x).
>>see http://www.utm.edu/research/primes/howmany.shtml#pi_def
>>That gives about 415,828,534,307,635,078 (415 Quadrillion) primes.
>>Multiply by 64 bits per prime number gives an even larger number than
>>storing the individual bit positions as prime/not-prime. Plus those
>>primes themselves would not compress very well at all.
>
> Thank you for a rational, considerate, informative reply.
>
The idea of putting primes in cdRom is as old as this media.
Forgive me is I offended: just trying to stimulate you a bit
towards such very comendable enterprise.
The formula above quoted x/ln(x) and other approximations
are very old and fundamental: any elementary book on
Number Theory will quote, prove and discuss them.
If you take differential:
dp = [ln(x)-1]dx/ (ln(x))^2
dp =:= dx / ln(x)
Showing not only that the number of primes is infinite, but also
that it grows as x grows with only a logarithmic 'damping' which
is negligible for your case x= 2^64. However the cdrom will
be very useful for other cases like special primes very large
which cannot be obtained easily via "isprime" software.
--
Angel, secretary (male) of Universitas Americae (UNIAM).
http://www.ncf.carleton.ca/~bp887
Subject: Re: PRIME NUMBER UPTO 2^64 on CDROM?
From: arteaga@cs.umd.edu (Santiago Arteaga)
Date: 3 Nov 1996 16:49:01 -0500
What about storing those numbers which are *not* primes,
but pseudo-primes in base 2,3,5 and 7, to say something?
There shouldn't be too many of these, and so checking whether a
number is prime would be easy; just check for pseudo-primality,
which is fast, and if they are pseudoprimes check that they are
not in the CDROM before declaring them primes.
Subject: Re: non linear cubic spline
From: Gleb Beliakov
Date: 4 Nov 1996 01:08:18 GMT
Bob Falkiner wrote:
>I am looking for a PC routine that will do a non linear cubic spline,
>where the "stiffness" of the spline can be an input parameter over a
>range of 0-1 where 0 would be a cubic spline fit where the spline curve
>goes through each of the input data points and 1 would be a linear
>regression. there is a routine in the SAS mainframe library (NLIN?)
>that does this. Are there any alternates, as I can't afford SAS for
>personal use on the PC.
Why do you call this spline nonlinear? The spline you describe is a traditional
cubic smoothing spline, which is a linear combination of B-splines, and the
coefficients could be found by solving a linear system of equations.
For instance, look at:
Lyche, Schymaker, SIAM J.Numer.Anal 10,1027-1038 (1973).
The smoothing parameter is in the range 0-infinity, but you can easily
transform it into your stiffness parameter.
The fortran code can be found in netlib,
the directory is called gcvspl. For C++,Mathematica and Maple code drop me a message.
Gleb
Subject: Re: "Enjoy prison buddy" - GET REAL!
From: GETREAL
Date: Sun, 03 Nov 1996 17:23:51 +0000
Prison for a chain letter? You need to get a grip!
The real issue is the spam we've had to deal with. The below does NOT
WORK and I'll tell you why. These name lists are being passed not via
mail with money enclosed but via the computer with no proof that money
was sent to the names on the list. People now add their name to the
list and repost it to the internet without sending a dime to anyone on
the list. They are preying on the sincerity of the few who actually
think that ALL people on the Internet are honest. Ignoring the legality
of a chain letter it is preposterous to think that all people would be
ethical and send money as requested. If you want to do something that
will work send the $5 to a reputable charity. At least you would have
the satisfaction of knowing you've helped someone. That is worth the $5
investment!
And if you think that these computer chain letters do work - take the
list - add your name - don't send anyone any money and repost it - and
see how much you get. Chances are your postal delivery person won't get
a hernia delivering your mail.
Brian Truter wrote:
>
> Take five minutes to read this and it WILL change your life.
>
> The Internet has grown tremendously. It doubles in size every 4 months.
> think about it. You see those '
> 1- Philippe
> 2104 De Mexico
> Chomedey, Laval
> Quebec, Canada
> H7M 3C6
>
> 2- Natalie Jansen
> Lancveldlaan 18
> 5671 CN Nuenen
> Holland
>
> 3- Chad Collier
> 2785 Cold Springs Rd. #49
> Placerville, CA 95667
>
> 4- Steve Boltinghouse
> 1009 Bird St.
> Hannibal, MO 63401
>
> 5- Brian Truter
> 101 N. Park Avenue
> Springfield, IL 62702
>
> STEP 2.
>
> Now remove the top name from the list, and move the
> other names up.This way, #5 becomes #4 and so on.
> Put your name in as the fifth one on the list.
>
ETC. ETC. ETC.
Flaccid, Phallus wrote:
>
> On Sat, 2 Nov 1996 23:44:01 GMT, sbolting@nemonet.com (Stephen
> Boltinghouse) wrote:
>
> >Take five minutes to read this and it WILL change your life.
> >
> > The Internet has grown tremendously. It doubles in size every 4 months.
> > think about it. You see those 'Make.Money.Fast' posts more and more.
> > That's ... because it WORKS ! So I thought, all those new users might
> > [ ... ]
> > from all over the world. And every bit of it perfectly legal and on the
>
> Try "illegal"...refer to:
>
> http://www.usps.gov/websites/depart/inspect/chainlet.htm
>
> > 5- Steve Boltinghouse
> > 1009 Bird St.
> > Hannibal, MO 63401
>
> That's it...post your mailing address for the world to see (and to
> notify your postmaster of your participation in an illegal mail scam).
> Amazing how dumb some people are...
Subject: Re: Please post source code for Hilbert filling curve again
From: rav@goanna.cs.rmit.edu.au (robin)
Date: 4 Nov 1996 13:39:03 +1100
jk94r@ecs.soton.ac.uk (Joseph Kuan) writes:
>Last week, I have asked for the source code of Hilbert space filling curve and someone
>has posted the source code. I lost the file, so please post it again.
> Thanks a lot
> Joe
Here is the Hilbert algorithm in PL/I (runs on OS/2, Windows 95,
and Windows NT) :
/* Copyright (c) 1995 by R. A. Vowels. */
/* From "Introduction to PL/I, Algorithms, & Structured Programming. */
DEFINE ORDINAL
Compass (North, East, South, West);
DECLARE h FIXED BINARY STATIC INITIAL (15); /* The step size. */
HILBERT:
PROCEDURE (East, South, West, North, Order) RECURSIVE;
DECLARE (East, South, West, North) TYPE Compass,
Order FIXED BINARY;
IF Order <= 0 THEN RETURN;
CALL HILBERT (South, East, North, West, Order-1); CALL MOVE (East, East, h);
CALL HILBERT (East, South, West, North, Order-1); CALL MOVE (South, South, h);
CALL HILBERT (East, South, West, North, Order-1); CALL MOVE (West, West, h);
CALL HILBERT (North, West, South, East, Order-1);
END HILBERT;
Subject: Re: PRIME NUMBER UPTO 2^64 on CDROM?
From: bp887@FreeNet.Carleton.CA (Angel Garcia)
Date: 4 Nov 1996 03:28:12 GMT
Wayne Schlitt (wayne@backbone.midwestcs.com) writes:
> Unless you can figure out a way to store something like 2^30 primes
> per bit, you aren't going to be able to do it.
>
>
>
> I think trying to store all primes less than 2^32 on a cd-rom is a
> much more "realistic" idea. Then, all you would have to do is worry
> about how long it would take to generate this list. (The numbers
> for this task don't look too good either...)
>
To give some perspective:
I use MapleV2 'student edition' (75$) in a 386-SX 15Mhz with 4 Mb ram
(a net expense of less than 500 $. Maple as Mathematica and other
math. software have the function "isprime" among hundreds. Thus it
is reasonable to assume that very soon such "isprime" function willl
be an inexpensive attachment to almost any computer system. Certainly
much cheaper than a cdrom player.
Then what for to store 20-digit primes in cdrom ?. If one needs to
know if such a number is prime or not just use "isprime": it will
answer in miliseconds. Even if one needs primes with 200-digits, say,
the same software can do it almost instantly giving you hundreds of
such range primes.
However there are specific primes which by now still are stored
in books with very tiny print difficult to read. An example was given
to me just a few days ago by B. Silverman: the prime divisors of
numbers b^n -1 with b=2,3,... 10, 11, etc. and n= up to more than 100
These tables will very soon grow to such an extent that cdrom will
have to replace them.
--
Angel, secretary (male) of Universitas Americae (UNIAM).
http://www.ncf.carleton.ca/~bp887
Subject: Re: how do you generate a sine wave with simple adds and subtracts.
From: jmb184@servtech.com (John Bailey)
Date: 3 Nov 1996 15:36:53 GMT
In article <55cc1m$dtr@news.jeack.com.au>, aj@axis.jeack.com.au (AJ) says:
>
>is there a formula that can be used to
>generate a sine wave that does not use the SIN function.
>
>i would like it to only use adds/subtracts/multiplys/divides.
>
>or any URL references where i might start looking.
>
An archive of correspondance at
http://www.servtech.com/public/jmb184/interests/mathematics
on the related problem of drawing a circle yielded this exchange:
Iterating two lines of code: x = x + y/k, y = y - x/k
results in a series of points which outline a circular
shape. It requires some tedious algebra to demonstrate
precisely what is happening. Note that the two statements
are not equations, they are lines of code. Thus the
x in the second statement is a later value of x.
Response:
Congratulations! You have just rediscovered Marvin Minsky's
circle-drawing hack, described in ITEMs 149-152 of the infamous
MIT AI Memo 239 ("HAKMEM"):
ftp://ftp.netcom.com/pub/hb/hbaker/hakmem/hakmem.html
Ivan Sutherland also described this in his original Sketchpad article
in Spring Joint Computer Conference 1963, if I recall correctly.
www/ftp directory:
ftp://ftp.netcom.com/pub/hb/hbaker/home.html
Added comment:
Speaking from an electronic technicians point of view, I'd just like
to add that this algorithm can be expressed using two op-amp
integrators: integrator A feeds into integrator B, and B's output
is inverted, and feed back into integrator A. This produces a nice
sine wave with a frequency determined by the integrator's circuit
components (ie resitor/capacitor). The outputs of A and B are 90 degrees
out of phase, ie sin and cos.
I think it's pretty neat how a circle can be made this way.
Mark
end of added comment from Mark.
Closing remarks from John:
If you want to get a more exact sinusoid that this yields, it requires
a slightly more elaborate code which is not handy. In fact it would
be easier to derive it than find it. This may be enough.
If not, message me at jmb184@servtech.com
Thanks
John
Subject: Benchmarks for Optimization Codes
From: Hans D Mittelmann
Date: Mon, 04 Nov 1996 06:35:07 -0700
============================================
Webpage on Benchmarks for Optimization Codes
============================================
Recently, a webpage was started listing benchmark results for, mostly,
public domain optimization codes, both LP and NLP. The benchmarks are
in 2 categories:
several codes/one platform one code/several platforms
More results and links to other results will be added in the near
future.
Comments and suggestions are welcome!
The URL is: http://plato.la.asu.edu/bench.html
--
Hans D. Mittelmann http://plato.la.asu.edu/
Arizona State University Phone: (602) 965-6595
Department of Mathematics Fax: (602) 965-0461
Tempe, AZ 85287-1804 email: mittelmann@asu.edu
Subject: Re: refer. to modern numerical methods in optimisation
From: Hans D Mittelmann
Date: Mon, 04 Nov 1996 06:54:59 -0700
Agata Ligier wrote:
>
> I am looking for references to books on modern numerical methods in
> optimisation.
> Could anyone help ?
>
> Agata Ligier # The avarage girl would rather have
> Instytut Matematyki # beauty then brains because the avarage
> Politechnika Lodzka # man can see better then can think
> al. Politechniki 11 # Colette Astbury
> Lodz
> Poland
Hi,
it would be best if you could specify your request a bit more. If you
can, for example, get books published by SIAM, then the Optimization
Software Guide of More&Wright; and a forthcoming (end of 1996) book by
Stephen Wright on interior point methods comes to mind. Other recent
books include Bertesekas (Nonlinear Programming), Nash&Sofer;(Linear and
Nonlinear Programming). I could give you exact references. If you can
browse the net you can look at the Nonlinear/Linear Programming FAQ's,
everything available from Argonne National Lab's NEOS project including
an HTML Guide and other things.
--
Hans D. Mittelmann http://plato.la.asu.edu/
Arizona State University Phone: (602) 965-6595
Department of Mathematics Fax: (602) 965-0461
Tempe, AZ 85287-1804 email: mittelmann@asu.edu
Subject: Re: C Code for high order polynomial curve fitting?
From: jpc@a.cs.okstate.edu (John Chandler)
Date: 4 Nov 1996 17:06:46 GMT
In article <55kgba$uac@rs18.hrz.th-darmstadt.de>,
Peter Spellucci wrote:
>In article <01bbc80b$f4ad1580$b15392cf@michael-clark>,
>"Michael Clark" writes:
>|> Does anyone have/know of/ can explain a alogarithum to curve fit x data
>|> points with a y orderd polynominal
>|>
>|> Thanks
>|> Mike Clark
>|> clarkmj@worldnet.att.net
>|>
>|> PS fortran is ok
>you may use dgless in clapack the c_translated version of lapack
Is dgless a routine specifically designed for least squares
fitting of polynomials to data? If so, fine, but one should
almost never use any general linear least squares software
to fit a polynomial to data using a monomial basis.
Specifically, never fit a polynomial of any considerable degree using
a sum of monomials form:
pn(x) = a0 + a1*x + a2*x^2 + a3*x^3 + ... + an*x^n
The monomials form a nonorthogonal basis that leads
to highly and unnecessarily ill-conditioned linear least squares problems.
The best basis for least squares fitting of polynomials to
discrete data is the set of polynomials that are orthogonal
with respect to (weighted) summation over the data abscissae.
Routines for fitting these polynomials can be found in
Conte and deBoor, "Elementary Numerical Analysis",
McGraw-Hill, 1980
Shampine and Allen, "Numerical Computing: An Introduction",
W. B. Saunders Company, 1973 (new edition to appear imminently)
If a basis is preferred that does not change when a datum point
is added, the best choice is usually Legendre polynomials,
with the data abscissae transformed linearly to [-1,1].
--
John Chandler
jpc@a.cs.okstate.edu