#! /usr/bin/env python3 # coding=utf8 from math import sqrt from math import log from math import exp # y = a*x + b # https://www.math.uni-bielefeld.de/~sek/funktion/leit03.pdf def linRegression(xFeld,yFeld): ok=True a=0 b=0 r=0 if len(xFeld)==len(yFeld): n = len(xFeld) sumX = sum(xFeld) sumY = sum(yFeld) xm= sumX / n ym= sumY / n sumXY=0.0 sumXX=0.0 sumYY=0.0 sumX_XM=0.0 sumY_YM=0.0 sumX_XM_Y_YM=0.0 sumX_XM2=0.0 sumY_YM2=0.0 for i in range(n): x = xFeld[i] y = yFeld[i] sumXY += x*y sumXX += x*x sumYY += y*y diffx = x-xm diffy = y-ym sumX_XM += diffx sumY_YM += diffy sumX_XM_Y_YM += diffx*diffy sumX_XM2 += diffx*diffx sumY_YM2 += diffy*diffy print('xm',xm, 'ym',ym, 'sumXY',sumXY, 'sumXX',sumXX, 'sumYY',sumYY) print('sumX_XM',sumX_XM,'sumY_YM',sumY_YM) print('sumX_XM_Y_YM',sumX_XM_Y_YM, 'sumX_XM2',sumX_XM2, 'sumY_YM2',sumY_YM2) a = (sumXY-n*xm*ym) / (sumXX-n*xm*xm) b = ym - a*xm r = sumX_XM_Y_YM / sqrt( sumX_XM2 * sumY_YM2 ) print('') print('\na: ',a,'b: ',b) print('\nr2: ',r) print('***************') else: ok=False return (ok,a,b,r) # y = b*a^x nun logarithmieren ln(y) = ln(b) + x*ln(a) ln=log in Python def exponentielleRegression1(xFeld,yFeld): print ('exponentielleRegression') ok=True a=0 b=0 r=0 print('log(12)',log(12)) if len(xFeld)==len(yFeld): n = len(xFeld) xxFeld=[] yyFeld=[] for i in range(n): x = xFeld[i] y = yFeld[i] xxFeld.append( x ) yyFeld.append( log(y) ) # print(log(x),log(y)) print(xxFeld) print(yyFeld) (ok,a1,b1,r1) = linRegression(xxFeld,yyFeld) if ok: a=exp(a1) b=exp(b1) r=r1 else: print('ok ist False') ok=False return (ok,a,b,r) # y = b*x^a nun logarithmieren ln(y) = ln(b) + a*ln(x) ln=log in Python def exponentielleRegression2(xFeld,yFeld): print ('exponentielleRegression') ok=True a=0 b=0 r=0 print('log(12)',log(12)) if len(xFeld)==len(yFeld): n = len(xFeld) xxFeld=[] yyFeld=[] for i in range(n): x = xFeld[i] y = yFeld[i] xxFeld.append( log(x) ) yyFeld.append( log(y) ) # print(log(x),log(y)) print(xxFeld) print(yyFeld) (ok,a1,b1,r1) = linRegression(xxFeld,yyFeld) if ok: a=a1 b=exp(b1) r=r1 else: print('ok ist False') ok=False return (ok,a,b,r)