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.
Przeliczanie funkcji geometrycznej
- Rejestracja: dni
- Ostatnio: dni
- Postów: 93
Nie wiem, ale nie rozumiem na jakiej podstawie mają być przypisywane wartości. Opisz trochę dokładniej problem, no i popraw błędy ortograficzne.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Tuchów
- Postów: 12270
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ć.
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
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?
- Rejestracja: dni
- Ostatnio: dni
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;
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Tuchów
- Postów: 12270
@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.
- Rejestracja: dni
- Ostatnio: dni
wartośc 0,25-63,5 są to wpisy do rejestru, 2-500 jest to częstotliwość mierzona oscyloskopem.
- Rejestracja: dni
- Ostatnio: dni
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
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Tuchów
- Postów: 12270
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.
- Rejestracja: dni
- Ostatnio: dni
Wartości są dokładne do jednego miejsca po przecinku, w załączniku jest wykres , dokonałem kilku pomiarów.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 819
Skoro już masz funkcję w Excelu to po prostu zrób interpolację i z głowy.
Coś w tym stylu

- Rejestracja: dni
- Ostatnio: dni
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.