logarithmus mit der eulersche Zahl als basis (ln)



  • hallo zusammen,

    habe ein riesen problem, und zwar brauch ich die formel

    zw=60Ω/[wur]εr * ln(D/d)

    für den wellenwiderstand zu berechnen, doch ich habe leider keine ahnung wie ich der LN hinbringe...

    float wellenkabel = (60/ sqrt(dielek)* ln(kabeldurch/leiterdurch)

    funktioniert nicht!

    kann mir jemand helfen? sehr dringend 😉

    besten dank

    mfg



  • Hallo

    Funktioniert nicht ist keine ausreichende Fehlerbeschreibung!
    Welchen Typ haben kabeldurch und leiterdurch? Wenns beides ints sind, kommts zu Rundungsfehlern.

    bis bald
    akari



  • also...

    hat sich erledigt... konnte mir selber helfen....

    für alle die das selbe problem haben....

    ln y = log y / log e

    somit ergibt sich
    float wellenkabel = (60/ sqrt(dielek)* log10(kabeldurch/leiterdurch)/log10(ezahl))

    mfg



  • kenzo69 schrieb:

    ln y = log y / log e

    das sollteste bei deinem anscheinenden beruf aber wissen ^^

    hier hab ich die Taylorpolynome für ln(x) und e^x mal aus nem projekt von mir rauskopiert

    der precision parameter gibt nicht die anzahl der korrekten nachkommastellen an, (wie man vermuten könnte) sondern einfach die Anzahl der schleifendurchläufe - also je höher das ist, desto genauer werden die ergebnisse - 15 sollte es schon sein, sonst haste bei e^1 schon bei der 4. oder 5. stelle hinterm komma schon falsche werte, aber zu hohe precisions bringen keinen genauigkeits fortschritt mehr (weil die abweichungen dann unterhalb der numerischen genauigkeit von long doubles liegen) und kosten nur noch mehr rechenzeit...

    long double ln(long double x, int precision=15)
       {
       precision = 2*precision-1;
       long double result = 0;
       long double xtemp = (x-1) / (x+1);
       long double xbruch = (x*(x-2)+1) / (x*(x+2)+1);
    
       for(long double j = 1; j <= precision; j+=2)
          {      
          result += xtemp / j;
          xtemp *= xbruch;
          } 
    
       return 2.0*result;
       }
    
    long double exp(long double x, int precision=15)
       {
       long double ifak = 1;
       long double xpotenz = 1;
       long double result = 0;
    
       for(int i = 1; i <= precision; i++)
          {
          result += xpotenz / ifak;
          ifak *= i;
          xpotenz *= x;
          } 
    
       return result;
       }
    

    MfG

    AlgoMan



  • ah und noch n paar anwendungen dazu:

    long double power(long double a, long double b)
       { return  exp( b*ln(a) )  ; }
    long double log(long double b, long double x)
       {return ln(x) / ln(b) ;}
    long double root( long double y, long double x )
       {return exp(  (1.0/y)*ln(x)  )  ;}
    

    gibt dir aba^b, logb(x)log_b(x) und \sqrt[y]{x} zurück.
    MfG

    AlgoMan



  • @kenzo69
    Wenn du statt log10 einfach nur log nimmst, hast du deinen natürlichen Logarithmus (aus cmath).


Anmelden zum Antworten