¨ç¼Æ¨D®Ú¡G¥þ°ì¦¬ÀĪº¤û¹yªk

 

°ò¥»Æ[©À

¤û¹yªk¦b«e­±¦³¤¶²Ð¡A­Y¬O¥Î¦hºû«×ªº²Å¸¹¡A¥¦ªºÃöÁä¬O¬O§Q¥Î±×²v§ä¥X dx ¡G

§Ú­Ì«e­±¦³¬Ý¹L¤û¹yªkªº¯ÊÂI¡A¤]´N¬O¥¦§Q¥Î²q´úÂI³Bªº¨ç¼Æ­È°£¥H¸Ó³Bªº±×²v¡]¥~±a¤@­Ó­t¸¹¡^¦Ó¹w´ú¤U¤@¨Bªº³oºØ§@ªk¡A¦³®É·|§â¤U¤@¨B±a¥X¦³®Ä½d³ò¥~¡]¦b®Úªº®ÇÃ䦳¤@­Ó¤p§|ªº®É­Ô¡A´N®e©öµo¥Í³o­Ó²{¶H¡^¡A©Î¬O«ê¥©³´¤J©¹´_¤£¤îªºµL½a°j°é¡C


³o¨Ç°ÝÃD¡A³£¸òª½±µ¨Ï¥Î±×²v¸ê°T¡]§Yªñ¦ü¨ç¼Æ¬°½u©Ê¡^¹w´ú¤U¤@ÂIªº¨B´T¦³Ãö¡C´«¥y¸Ü»¡¡A¤û¹yªkªº¹w´ú¨B¦³®É½Ä±o¤Ó§Ö¤Ó¦h¡A§Y«K¬O¸¨¤J¤p§|¬}¤¤¡A¥u­n¯à¥¿½T°»´ú¨ì¬O°±¦b§|©³ªºª¬ªp¡A¤]³£ÁÙ¥i¥H¥t¥~²q´úÂI¦Ó­«·s¶}©l¡A¦ý¤û¹yªk¸I¨ì³oºØª¬­­«h·|®g¥X½d³ò¥~¤Ó»·¡C

¨ä¹ê¡A»¡¤û¹yªk·|¦³½Ä±o¤Ó§Ö³oºØ¶É¦V¡A¯uªº¬O«Ü¶K¤Á¡C

¦b«e­±ªº³æ¤¸½Í¤û¹yªk¡A¦³´£¨ì§ä·¥¤pªº¤èªk¨Ã¤£¯à®M¥Î¥Î¦b¡]¤û¹yªk¡^¨D®Úªº°ÝÃD¤W (NR 9.6)¡C¦b¦³¸É±Ï¤û¹yªk¤§¥D­n¯ÊÂIªº±¡ªp¤U¡A§ä·¥¤pªºµ¦²¤´N¥i¥HÀ°§U¤û¹yªkÅܦ¨¤@­Ó¥i¾a¦³®Äªººtºâªk¡^¡C

±×²v¤è¦V¤W«OÃÒ¦³³Ì¤p­È¡A¥u­n dx °÷¤pªº¸Ü¡A¤j®a¥iª½Æ[·Q¹³©Î°Ñ¬Ý½Ò¥»¤½¦¡¡C¤]´N¬O»¡¡A§Ú­Ì¤£¯à§¹¥þ¬Û«H¤û¹yªkªº¨B¿ç¤j¤p¡A¦ý¤è¦V«h¥i¥H¡C¦pªG¥Î¤½¦¡¨Ó¸ÑŪ¡A¨£¤U­±¨â¦¡ªº©w¸q»P±À¾É¡G

³oùØ©Òµ¹¥Xªº°T®§¬O¡A¤û¹yªkªº¤è¦Vªº½T¯à°÷Åý­ì¨ç¼Æªº¥­¤èÅܤp¡A¤]´N®µ±a¤F¯à°÷§ä¨ì®Úªº¼ç¤O¡C¦pªG±×²vªº¤è¦V¬O¹ïªº¡A§Ú­Ì§â¤û¹yªkªº¨B´T¨«¤p¤@ÂI¡A«h«OÃÒ¯à°÷§â­ì¨ç¼Æªºµ´¹ï­ÈÅܤp¡A¦p¦¹¥²µMÅý­ì¨ç¼Æ§ó±µªñ®Ú¤F¡C³o­Ó·Qªk¤Þµo½u©Ê·j´Mªºµ¦²¤¡A¤]´N¬O¦b«O¦³­ì¤û¹yªk¤è¦Vªº±¡ªp¤U¡A´ú¸Õ¨Ã½Õ¸`¨äªø«×¥H¹F¨ì¹ï¨ä¥­¤è¨ç¼Æ§ä·¥¤p¡C¦pªG³´¤JµL®Úªº¤p§|¡A«h·|¦A¥t§ä°_ÂI­«·s·j´M¡C

½u©Ê·j´M»P­Ë°h°lÂÜ (Line searching and Backtracking) ¬O¨â­Ó¥D­nªºµ¦²¤¡A²Ó¸`ªº¤½¦¡±À¾É (9.7.6) ~ (9.7.14) ¥i°Ñ¦Ò½Ò¤å¡C

 

 

°Æµ{¦¡ªº¨Ï¥Î

»Ý­n¥Î¨ì¥H¤Uªº°Æµ{¦¡©Î¨ç¦¡¡A¦@¤»­Ó

newt¡G¥þ°ì¦¬ÀÄ«¬¤û¹yªkªº¥D­n°Æµ{¦¡

lnsrch ¡G½u©Ê·j´M¡A¥Ñ newt ¥s¥Î

fmin ¡G¨D¨ç¼Æ¥­¤èªº­È¡A¬O­n³Q·¥¤p¤Æªº¹ï¶H

fdjac ¡G µ¹¨ç¼Æ fvec ´N¥i¥H±o Jacobian

ludcmp¡GLU ¤À¸Ñªkµ{¦¡

lubksb¡GLU ¦V«á¨ú¥N¨D¸Ñµ{¦¡

 

¨Ï¥Î newt ªº½d¨Ò¥Dµ{¦¡¡A¤Ï¦Ó¬Û·í²³æ¡A¥u­nµ¹ªì©l²q´úªº¦V¶q¡A¦p¤U¨Ò¡G

program newt_main
implicit none
integer n,i,i_again
parameter (n=2)
real x(n)
logical check

 100¡@write(*,*) 'Type in the vector x(1:',n,') as initial guess :'

read (*,*) (x(i),i=1,n)

c "n" is used to declare x(n) in subroutine newt, we therefore need
c to make "n" an parameter in the main program.

call newt(x,n,check)

write(*,*) 'The resulting root vector is :'
write(*,*) (x(i),i=1,n)

 102¡@write(*,*) 'Find root again ? (1=YES; 0=NO)'

read(*,*) i_again
if (i_again.eq.1) goto 100
if (i_again.ne.0) goto 102

end

subroutine funcv(n,x,f)
integer n
real x(n),f(n)
f(1) = x(1)**2 + x(2)**2 - 25
f(2) = x(2)
end