8999 REM REVISED JUNE, 1972 ANDY ROTH C.C.G. 9000 REM ****: CURFIT ****: MATHEMATICS PROGRAM ***** 9001 REM ***** VERSION 1 ***** 7/31/69 ****: 9002 REM LEAST SQUARES CURVE FIR #1 9003 DIM X(200),Y(200),U(200),V(200),A(6),B(6),C(6),S(6),F(6) 9004 MAT F=CON 9005 INPUT"HOW MANY DATA PAIRS";N 9006 PRINT 9007 FOR I=1 TO N 9008 PRINT"DATA PAIR #";I;:INPUTX(I),Y(I) 9009 NEXT I 9010 PRINT 9011 PRINT 9012 PRINT " ","LEAST SQUARES CURVES FIT" 9013 PRINT 9014 PRINT "CURVE TYPE"," INDEX OF "," A"," B" 9015 PRINT " ","DETERMINATION" 9016 PRINT 9017 FOR I=1 TO 6 9018 MAT S=ZER 9019 GOSUB 9120 9020 IF (I-5)*(I-6)=0 THEN 9035 9021 IF (I-2)*(I-3)=0 THEN 9028 9022 FOR J=1 TO N 9023 LET V(J)=Y(J) 9024 GOSUB 9098 9025 NEXT J 9026 IF I=1 THEN 9045 9027 GOTO 9056 9028 FOR J=1 TO N 9029 IF Y(J) <= 0 THEN 9042 9030 LET V(J)=LOG(Y(J)) 9031 GOSUB 9098 9032 NEXT J 9033 IF I=3 THEN 9050 9034 GOTO 9045 9035 FOR J=1 TO N 9036 IF Y(J)=0 THEN 9042 9037 LET V(J)=1/Y(J) 9038 GOSUB 9098 9039 NEXT J 9040 IF I=6 THEN 9056 9041 GOTO 9045 9042 PRINT "CAN'T FIT" 9043 LET F(I)=0 9044 GOTO 9063 9045 FOR J=1 TO N 9046 LET U(J)=X(J) 9047 GOSUB 9101 9048 NEXT J 9049 GOTO 9061 9050 FOR J=1 TO N 9051 IF X(J) <= 0 THEN 9042 9052 LET U(J)=LOG(U(J)) 9053 GOSUB 9101 9054 NEXT J 9055 GOTO 9061 9056 FOR J=1 TO N 9057 IF X(J)=0 THEN 9042 9058 LET U(J)=1/X(J) 9059 GOSUB 9101 9060 NEXT J 9061 GOSUB 9161 9062 PRINT C(I),A(I),B(I) 9063 NEXT I 9064 GOSUB 9105 9065 PRINT 9066 PRINT 9067 PRINT 9068 PRINT"DETAILS FOR CURVE TYPE [0 TO TERMINATE]"; 9069 INPUT I 9070 IF I=0 THEN 9999 9071 LET K=I 9072 IF F(I)=1 THEN 9076 9073 GOSUB 9120 9074 PRINT " COULD NOT BE FIT." 9075 GOTO 9065 9076 GOSUB 9138 9077 IF (I-1)*(I-5)*(I-6)<>0 THEN 9087 9078 FOR J=1 TO N 9079 LET Y=A(I)+B(I)*X(J) 9080 IF I=1 THEN 9084 9081 LET Y=1/Y 9082 IF I=5 THEN 9094 9083 LET Y=X(J)*Y 9084 GOSUB 9176 9085 NEXT J 9086 GOTO 9065 9087 FOR J=1 TO N 9088 IF I=2 THEN 9094 9089 IF I=3 THEN 9092 9090 LET Y=A(4)+B(4)/X(J) 9091 GOTO 9095 9092 LET Y=A(3)*(X(J)^B(3)) 9093 GOTO 9095 9094 LET Y=A(2)*EXP(B(2)*X(J)) 9095 GOSUB 9176 9096 NEXT J 9097 GOTO 9065 9098 LET S(5)=S(5)+V(J)^2 9099 LET S(3)=S(3)+V(J) 9100 RETURN 9101 LET S(1)=S(1)+U(J) 9102 LET S(2)=S(2)+U(J)^2 9103 LET S(4)=S(4)+U(J)*V(J) 9104 RETURN 9105 FOR I=1 TO N-1 9106 LET M=I 9107 FOR J=I+1 TO N 9108 IF X(M) <= X(J) THEN 9110 9109 LET M=J 9110 NEXT J 9111 IF M=I THEN 9118 9112 LET P=X(M) 9113 LET Q=Y(M) 9114 LET S(M)=X(I) 9115 LET Y(M)=Y(I) 9116 LET X(I)=P 9117 LET Y(I)=Q 9118 NEXT I 9119 RETURN 9120 LET K=I 9121 IF K=1 THEN 9136 9122 IF K=2 THEN 9134 9123 IF K=3 THEN 9132 9124 IF K=4 THEN 9130 9125 IF K=5 THEN 9128 9126 PRINT "6. Y=X/(A+B*X) "; 9127 RETURN 9128 PRINT "5. Y=1/(A+B*X) "; 9129 RETURN 9130 PRINT "4. Y=A+(B/X)", 9131 RETURN 9132 PRINT "3. Y=A*(X^B)", 9133 RETURN 9134 PRINT "2. Y=AEXP(B*X)"; 9135 RETURN 9136 PRINT"1. Y=A+(B*X)", 9137 RETURN 9138 PRINT " "; 9139 GOSUB 9121 9140 PRINT " IS A"; 9141 IF K=1 THEN 9146 9142 IF K=2 THEN 9148 9143 IF K=3 THEN 9150 9144 PRINT " HYPERBOLIC"; 9145 GOTO 9151 9146 PRINT " LINERAR"; 9147 GOTO 9151 9148 PRINT "N EXPONENTIAL"; 9149 GOT O 9151 9150 PRINT " POWER"; 9151 PRINT " FUNCTION. THEN RESULTS" 9152 IF K=1 THEN 9154 9153 PRINT " OF A LEAST-SQUARES FIT OF ITS LINEAR TRANSFORM" 9154 PRINT " (SORTED IN ORDER OF ASCENDING VALUES OF X)" 9155 PRINT " ARE AS FOLLOWS:" 9156 PRINT 9157 PRINT "X-ACTUAL","Y-ACTUAL","Y-CALC","PCT DIFFER" 9158 PRINT 9159 RETURN 9160 PRINT 9161 LET B=(N*S(4)-S(1)*S(3))/(N*S(2)-(S(1)^2)) 9162 LET A=(S(3)-B*S(1))/N 9163 LET S1=S(5)-(S(3)^2)/N 9164 LET S2=(B^2)*(S(2)-(S(1)^2)/N) 9165 LET C(I)=S2/S1 9166 IF (I-1)*(I-4)*(I-5)=0 THEN 9173 9167 IF (I-2)*(I-3)=0 THEN 9171 9168 LET A(6)=B 9169 LET B(6)=A 9170 RETURN 9171 LET A(I)=EXP(A) 9172 GOTO 9174 9173 LET A(I)=A 9174 LET B(I)=B 9175 RETURN 9176 PRINT X(J),Y(J),Y, 9177 LET D=Y(J)-Y 9178 LET D=.1*SGN(D)*INT(1000*ABS(D/Y)) 9179 IF D<0 THEN 9184 9180 IF D>0 THEN 9183 9181 PRINT " 0" 9182 RETURN 9183 PRINT " "; 9184 PRINT D 9185 RETURN 9999 END