interpolation in C



  • Hallo Bin hier auf die Seite gestoßen und wollte das in eine berechnung integrieren
    Hier die Seite: http://paulbourke.net/miscellaneous/interpolation/

    double LinearInterpolate(
    double y1,double y2,
    double mu)
    {
    return(y1*(1-mu)+y2*mu);
    }

    ich raffe aber nicht was das mu sein soll

    vorallem bei der cubic interpolation... kann mir wer helfen.

    Hatte mir ne eigene lineare interpüolationsfunktion geschrieben, aber irgendwie funktiuoniert die nicht.

    int yb=0;
    int B = 2025;
    int dre[0]=2000;
    int dre[1]=2100;
    int vd [0]=-12;
    int vd [1]=-51;
    
    lin_interpol (int rpm_var1, int rpm_var2) {
    
    if ((t_var > dre[rpm_var1]) && (t_var < dre[rpm_var2])) {
    
    int x0 = dre[rpm_var1];
    int y0 = vd[rpm_var1];
    int x1 = dre[rpm_var2];
    int y1 = vd[rpm_var2];
    int yb;
    int B = n_mot;
    
    yb = y0-((B-x0)/(x1-x0))*(y0-y1) // Lineare Interpolation
    }
    
    printf ("yb= %d\n", yb);
    

    Allrdings kommt als ergebnis immer:

    yb= -12 // Also mein y0 Wert....

    bin glaub ich zu blöd



  • Auf die Schnelle erstmal zu deinem 1. Problem.
    Was mu ist steht doch neben der Grafik.
    0<=mu<=1

    wenn mu 0 ist, bekommst du den Wert von y1.
    wenn mu 1 ist, bekommst du den Wert von y2.
    wenn mu 0.5 ist, bekommst du den Wert in der Mitte von y1 und y2.



  • ja, aber wenn mein
    y1 = 123
    y2 = 258 ist

    und ich will den wert für 199 haben??? was ist dann mein mu???
    das raffe ich nicht...

    ich ich hab ja im Normalfall x und y .. muss ich dann die berechnung für beide machen

    naja aber das 2. ist eher mein größeres Problem. warum der mir immer -12 raus haut

    dank dir aber dennoch



  • Der Code dort oben ist nichtmal compilierbar (entweder Anweisungen, die frei im Raum stehen, oder eine lokale Funktionsdefinition). Außerdem fehlt dort der entscheidende Punkt: Wo genau rufst du diese Funktion überhaupt auf?

    PS: Und die Verwendung von globalen Variablen ist im Allgemeinen nicht besonders hilfreich bei der Diagnose von Problemen.



  • Hallo neop12,

    da du bei deinem Code int anstatt double benutzt führt die Division (B-x0)/(x1-x0) immer zu 0 falls B < x1 ist.
    Also entweder alles auf Fließkomamzahlen umstellen oder aber die Formel tauschen

    yb = y0-((B-x0)*(y0-y1)/(x1-x0));
    


  • neop13 schrieb:

    ja, aber wenn mein
    y1 = 123
    y2 = 258 ist

    und ich will den wert für 199 haben??? was ist dann mein mu???
    das raffe ich nicht...

    Zu deinen y1 und y2 gehören doch auch x1 und x2.
    Das mu gehört zu den x-Werten

    mu = (xn - x1)/(x2-x1); für x1<=xn<=x2
    

    Nur berechnet die Formel keine Funktion/kein Feld sondern nur für 2 Werte y1 und y2.



  • ahhh super danke schön

    dölmer hab ich sogar noch dran gedacht


Log in to reply