放心飞翔 发表于 2008-6-17 15:06

求数据拟合程序

我想将一组数拟合成一个三次多项式,哪位高人有这方面的程序阿!

pengweicai 发表于 2008-6-17 15:55

MATLAB可以实现。

iewoug 发表于 2008-6-18 09:34

MATLAB命令行下输入 cftool
可以调出拟合工具

陆永杰 发表于 2008-7-14 09:39

matlab

polyfit(x,y,3)

x,y为实验所得数据,3为多项式次数。

zhaochj 发表于 2008-8-1 21:25

用stopt1软件

用stopt1还是1stopt软件,忘了,非常理想。

vib 发表于 2008-8-2 07:41

借问FRF的数据怎末拟合比较好?

ch_j1985 发表于 2008-8-2 12:36

本帖最后由 VibInfo 于 2016-10-9 10:30 编辑

原帖由 zhaochj 于 2008-8-1 21:25 发表
用stopt1还是1stopt软件,忘了,非常理想。
是1stopt软件,其他数学软件版块有相关的内容,dingd主任是1stopt高手

wanyeqing2003 发表于 2008-8-2 15:59

多项式拟合是最常用的一种拟合方法,许多程序都有这样的功能。

还可以看看数值分析方法,自己编个程序,不难。

欧阳中华 发表于 2008-8-3 16:42

.
   下面是一个样条拟合程序:

C=======================================================================
C                                                         
C             THIRD SPLINE INTERPLATION                  
C
C=======================================================================
      SUBROUTINE SPL(N,K,T,Y,Y1,Y2,SUM,U1,V1)
      DIMENSION U1(N),V1(N)
      REALM(100),H(100)
      DIMENSION A(100),B(100),C(100),D(100),U(100),V(100)
      IF(N.EQ.1) THEN
      Y=V1(1)
      GOTO 90
      ENDIF
      IF(N.EQ.2) THEN
      Y=(V1(2)-V1(1))/(U1(2)-U1(1))*(T-U1(1))+V1(1)
      GOTO 90
      ENDIF
      IF(N.EQ.3) THEN
      IF(T.GE.U1(2)) THEN
      Y=(V1(3)-V1(2))/(U1(3)-U1(2))*(T-U1(2))+V1(2)
      ELSE
      Y=(V1(2)-V1(1))/(U1(2)-U1(1))*(T-U1(1))+V1(1)
      ENDIF
      GOTO 90
      ENDIF
      IF(U1(1).GT.U1(N)) THEN
      DO 12 I=1,N
      U(I)=U1(N-I+1)
12    V(I)=V1(N-I+1)
      ELSE
      DO 8 I=1,N
      U(I)=U1(I)
8   V(I)=V1(I)
      ENDIF
      MA=0
      DO 73 I=1,N-1
      IF(U(I).GE.U(I+1)) THEN
      MA=MA+1
      N=N-1
      ENDIF
      U(I)=U(I+MA)
73      V(I)=V(I+MA)
      DO 5 I=2,N
      H(I)=U(I)-U(I-1)
5   B(I)=2.
      B(1)=2.
      C(1)=0.
      D(1)=0.
      A(N)=0.
      D(N)=0.
      DO 10 I=2,N-1
      A(I)=H(I)/(H(I)+H(I+1))
10    C(I)=1.0-A(I)
      DO 15 I=2,N-1
15    D(I)=6.*((V(I+1)-V(I))/H(I+1)-(V(I)-V(I-1))/
   *H(I))/(H(I)+H(I+1))
      D(1)=D(1)/B(1)
      W=B(1)
      DO 20 I=2,N
      I1=I-1
      B(I1)=C(I-1)/W
      W=B(I)-A(I)*B(I-1)
20    D(I)=(D(I)-A(I)*D(I-1))/W
      DO 25 I=1,N-1
      NI=N-I
      D(NI)=D(NI)-B(NI)*D(NI+1)
25    M(NI)=D(NI)
      IF((T-U(1)).LT.0..OR.(T-U(N)).GT.0.) GOTO 35
      GOTO 40
35    CONTINUE
      IF(T.LT.U(1)) THEN
      AS=(V(3)-V(1))/(U(3)-U(1))
      BS=(V(2)-V(1))/(U(2)-U(1))
      AS=(AS-BS)/(U(3)-U(2))
      Y=V(1)+(T-U(1))*BS+(T-U(1))*(T-U(2))*AS
      ELSE
      AS=(V(N)-V(N-2))/(U(N)-U(N-2))
      BS=(V(N-1)-V(N-2))/(U(N-1)-U(N-2))
      AS=(AS-BS)/(U(N)-U(N-1))
      Y=V(N-2)+(T-U(N-2))*BS+(T-U(N-2))*(T-U(N-1))*AS
      ENDIF
      RETURN
40    I=2
47    IF(T.GT.U(I)) GOTO 50
      GOTO 55
50    I=I+1
      GOTO 47
55    W=(T-U(I-1))/H(I)
      M(N)=0.
      GOTO (75,70,60,65,65) ,K
60    SUM=0.
      DO 62 I=2,N
62    SUM=SUM+(V(I-1)+V(I))*H(I)/2.-(M(I-1)+M(I))*H(I)**3/24.
      IF(K.EQ.3.) GOTO 80
65    Y2=M(I-1)*(1.-W)+M(I)*W
      IF(K.EQ.5) GOTO 80
70    Y1=(V(I)-V(I-1))/H(I)+H(I)*(M(I-1)
   **(-W*W/2.+W-1./3.)+M(I)*(W*W-1./3.)/2.)
      IF(K.EQ.2) GOTO 80
75    Y=V(I-1)*(1.-W)+V(I)*W+W*(W-1.)*H(I)*H(I)*
   *(M(I-1)*(2.-W)+M(I)*(W+1.))/6.
80    CONTINUE
90    RETURN
      END
C=======================================================================

liaolitao 发表于 2008-8-9 15:28

回复 板凳 iewoug 的帖子

弱弱地问一句,怎么用呢?

yejet 发表于 2008-8-10 15:19

本帖最后由 VibInfo 于 2016-10-9 10:30 编辑

原帖由 liaolitao 于 2008-8-9 15:28 发表
弱弱地问一句,怎么用呢?
看帮助吧,写得很清楚
页: [1]
查看完整版本: 求数据拟合程序