Przeliczanie funkcji geometrycznej

0

Nie wiem jak zabrać się do przeliczania na zmiennych w czasie rzeczywistym, mam zakres wartości 0,25-63,5 które wykładniczo odpowiadają liczbą, wartość 24 = liczba 3, wartosc 48 liczba 8, 63,5 - wartosc 500, liczę na jakąś pomoc. Celem jest napisanie przelicznika wartości na odpowiednik liczby.

0

Nie wiem, ale nie rozumiem na jakiej podstawie mają być przypisywane wartości. Opisz trochę dokładniej problem, no i popraw błędy ortograficzne.

0

0,25-63,5 które wykładniczo odpowiadają liczbą, wartość 24 = liczba 3, wartosc 48 liczba 8, 63,5 - wartosc 500

No dobrze, ale jaką wartość stanowi odpowiednik dolnej granicy?

Wartość podstawowa Po przeliczeniu
0/1 ???? 0,25
{...} {...}
24 3
{...} {...}
48 8
{...} {...}
500 63,5
O takie coś chodzi? Chcesz mieć jakiś wzór do przeliczania wartości w lewej strony na te z prawej?

Może napisz jeszcze skąd się te liczby i ich odpowiedniki biorą i gdzie je wykorzystujesz to być może łatwiej będzie coś wymyślić.

0

Tak , o to chodzi, granica dolnego zakresu dla 0,25 równa sie 2 aczkolwiek ta wartość nie jest zbyt dokładna, najdokładniejsze są 48 i 24, ponieważ zakres 0,25-63,5 jest to zakres ustawień Timera, a wynik częstotliwość w hz, i problemem jest przeliczanie tego.

0

Dla mnie to wygląda na zwykłą normalizację MIN-MAX.
X * = (X-minX) / maxX-mniX.

X* - wartość znormalizowana, X - wartość pola oryginalnego, minX - najmniejsza wartość pola X, maxX największa wartość pola X; (maxX-minX) = zakres.

wtedy np. 0.5 będzie oznaczało na 32.4 itd.

0

wartosc 32,5 odpowiada 4

0

Chodzi o to że tworzysz znormalizowane wartości dla tych liczb.
Np. jeśli zrobisz wykres tych oryginalnych wartości i tych znormalizowanych to otrzymasz taki sam wykres tylko wartości znormalizowanych.
Potem można normalizację odwrócić czyli zdenormalizować i masz wynik wartości oryginalnej.
Np. do sieci neuronowej musisz wprowadzić wartości znormalizowane i wypluje ona też wartość znormalizowaną wtedy denormalizujesz i masz rzeczywisty wynik sieci.
To podstawa analizy matematycznej / statystyka itp.

0

nie bardzo rozumiem, jak to przedstawić w kodzie, pewnie dlatego że matematyka nie jest moją mocną stroną, mogłbyś pokazać jakąś przykładową implementację na zmiennych?

0

Ja też nie wiem czy ci żle nie podpowiadam ale to tylko pomysł.
Przykład w kodzie ;)

 
    private void normalizacjaMinMax(){ 
        
        double Xn = (X3 - Xmin) / (Xmax - Xmin);
        System.out.println("Wartość znormalizowana dla "+ X3 + " to: " +  Xn);        
    }
 
        double X1 = 8.0;
        double X2 = 15.548;
        double X3 = 25.0;
        
        double Xmin = X1;
        double Xmax = X3;
0

@damian21 - czy aby na pewno podane przez Ciebie wartości są poprawne? Gdzie masz zapisane wartości odpowiadające tym podanym? Masz do tego jakąś tabelkę? Podaj tutaj lub wklej do PasteBin.

0

wartośc 0,25-63,5 są to wpisy do rejestru, 2-500 jest to częstotliwość mierzona oscyloskopem.

0
damian21 napisał(a):

0,25-63,5 jest to zakres ustawień Timera, a wynik częstotliwość w hz

to powiedz co dokładnie przeliczasz, prawdopodobnie wzór znajdziesz w książkach i wikipedii

0
damian21 napisał(a)

2-500 jest to częstotliwość mierzona oscyloskopem.

Być może pomiary nie są najdokładniejsze;

Jedyne co przychodzi mi na myśl to mnożenie wartości przez stałą 0.125:

function Calculate(const AValue: Double): Double;
begin
  Result := AValue * 0.125;
end;

Wtedy wartości mniej więcej odpowiadają tym pomiarowym:

AValue [2 .. 500] Result [0,25 .. 62,5] Pomiar Różnica
2 0,25 0,25 0
24 3 3 0
32,5 4,0625 4 0,0625
48 6 6 0
500 62,5 63,5 -1
jednak dla 500 będzie to 62,5, więc o 1 mniej niż wynika z pomiaru; Niestety odpowiednik dla 48 wychodzi 6, a nie tak jak podałeś - 8, co znacząco odbiega od wartości pomiarowej i tutaj nie wiem czy pomiar był niedokładny, czy po prostu mój wzór jest błędny, jednak nic innego nie przychodzi mi do głowy;

Ciekaw jestem jak wygląda wykres pomiarów - czy układa się liniowo, czy parabolicznie, bo z podanych pomiarów wynika, że i jedno i drugie.

0

Wartości są dokładne do jednego miejsca po przecinku, w załączniku jest wykres , dokonałem kilku pomiarów.

0

Skoro już masz funkcję w Excelu to po prostu zrób interpolację i z głowy.
Coś w tym stylu

Clipboard.png

0

Niestety po użyciu tego wzoru w excelu dostaje jakies dziwne wartości 2.802075391
1.7068
-10.6012
-43.3967
-52.4172
72.6623
509.6668
1503.9213
3368.2508
6482.9803
11295.9348
18322.4393
28145.3188
41414.8983
44544.3988
47846.3309
51326.8692
53136.07477

A mój wykres próbowałem zinterpolować aczkolwiek nic to nie zmieniło.

0

Oczywiste jest, że dla Twoich danych wzór interpolacyjny będzie inny.
W Excelu to się nazywa linia trendu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1