⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setacc.m

📁 如何求解函数的零点的两个子函数
💻 M
字号:
 %function SETACC (NZERI,NFOUND,XMIN,XMAX,IMAX,I,F,A,B)

%     ***************************************************************
%
%        L. C. ANDREANI AND A. PASQUARELLO, PISA, 1986
%
%        Bracketing of zeros: finds extrema of intervals
%        containing a specified number of zeros of function F(X).
%
%        NZERI       (ENTRY) = Number of required zeros (unmodified)
%        NFOUND      (EXIT)  = Number of zeros found
%        XMIN , XMAX (ENTRY) = extrema of bracketing region
%                              (xmin is modified if F(xmin)=0)
%        IMAX        (ENTRY) = Maximum number of steps (unmodified)
%        I           (EXIT)  = Actual number of steps
%        F=F(X)      (ENTRY) = External function (unmodified)
%        A , B       (EXIT)  = Arrays with extrema of intervals
%                              bracketing a zero
%
%     ****************************************************************
%
 %     IMPLICIT DOUBLE PRECISION (A-H,O-Z)
 %    REAL*8 A(NZERI),B(NZERI)
%
%     ****************************************************************

%             DELTA = PASSO DELLA RICERCA
%             FRACT = PARAMETRO DI AGGIUSTAMENTO
%             N = CONTATORE ZERI INDIVIDUATI
%
%     ****************************************************************
      clear all
      NZERI=30;
      %NFOUND
      XMIN=-5.;
      XMAX=5;
      IMAX=50;%能否找全零点区间跟这个值的取值有关越大越全
      %F,A,B
     FRACT=.001;
      DELTA=(XMAX-XMIN)/IMAX ;
      NFOUND=0 ;

%     CALCOLA IL PRIMO SEGNO E, SE F=0, ARRETRA

      NCONTR=0 
    if (NCONTR==4) 
         fprintf( 'FROM MODULE SETACC: FUNCTION IDENTICALLY ZERO')
         return
       end
       F1=sin(2*pi*XMIN)-.10;
      S1=sign(F1) ;
      if (F1==0.) 
         XMIN=XMIN-DELTA*FRACT ;
         NCONTR=NCONTR+1 ;
         if (NCONTR==4) 
         fprintf( 'FROM MODULE SETACC: FUNCTION IDENTICALLY ZERO')
         return
       end
      end

%     ***************************************************************
%     *  LOOP CHE SETACCIA L' INTERVALLO ASSEGNATO
%     *  CALCOLA I SEGNI AI DUE ESTREMI, E LI CONFRONTA:
%     *  SE SONO UGUALI PROSEGUE , SE SONO DIVERSI ...
%     *  ... HA TROVATO UNO ZERO, PERCIO' INCREMENTA NFOUND
%     ***************************************************************
%
      for  I=1:IMAX
         X=XMIN+I*DELTA ;
         NCONTR=0 ;
       if (NCONTR==4) 
            fprintf( 'FROM MODULE SETACC: FUNCTION IDENTICALLY ZERO')
            return
        end
         F2=sin(2*pi*X)-.10 ;
         S2=sign(F2) ;
         if (F2==0.e0) 
            NCONTR=NCONTR+1 ;
            X=X+DELTA*FRACT ;
            if (NCONTR==4) 
            fprintf( 'FROM MODULE SETACC: FUNCTION IDENTICALLY ZERO')
            return
            end
            elseif (S2~=S1) 
            NFOUND=NFOUND+1;
            A(NFOUND)=X-DELTA;
            B(NFOUND)=X ;
            if (NFOUND==NZERI)
            return
            end
            S1=S2 ;
            end
         end
     
      

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -