Verfasst am: 18.07.2020, 17:14
Titel: Zahl suchen, die Wert am nächsten ist
Hallo,
ich habe eine Liste von Frequenzen 0.1:0.1:25 Hz. Von diesen habe ich mir die Periodendauer ausgeben lassen.
Ich habe nun einen zweiten Vektor mit den Zahlen Pt = 3759:20000.
Ich muss jetzt einen Faktor x suchen, der einen Wert zwischen 3759-20000 so multipliert, dass er der Periodendauer(1,i) am nächsten ist.
Suche für jede Periodendauer das beste Pt*x. Pt und x dürfen keine Dezimalzahlen sein!
Gibt es dazu eine Funktion in Matlab, die mir diesen Wert automatisch sucht?
Sonst wäre meine Idee verschiedene Teiler = T/Pt zu suchen, die den kleinsten Fehler aufzeigen. Diese Position in Pt suchen und damit multiplizieren.
Vllt gibt es noch eine bessere Variante?
Vielen Dank
Falls noch jemanden interessiert wie die Ergebnisse sind oder das für einen ähnlich Fall benutzen möchte ist hier nochmal die komplette Variante
Der Fehler bei dieser Variante befindet sich im Tausendstelbereich bzw für meinen Fall im mHz Bereich. Denke das ist ein gutes Resultat.
subplot(2,2,4) plot(T_find/10^6,'r');
xticks(1:10:250);
xticklabels(0:1:25);
xlabel('Frequence (Hz)');
ylabel('Period Time (s)');
title('Created Period Time');
set(gca,'fontsize',12);
figure;
hold on
yyaxis left
plot(Divisor_find,'o-')
xticks(1:10:250);
xticklabels(0:1:25);
xlabel('Frequence (Hz)');
ylabel('Multiplier');
yyaxis right
plot(Pt_find/10^6,'o-');
xticks(1:10:250);
xticklabels(0:1:25);
xlabel('Frequence (Hz)');
ylabel('PictureTime/illuminateTime (s)');
legend('Value Multiplier','Value for PictureTime/illuminateTime');
set(gca,'fontsize',15);
hold off
figure;
f_diff = abs(f-f_find);
plot(f_diff,'o-');
xticks(1:10:250);
xticklabels(0:1:25);
xlabel('Frequence (Hz)');
ylabel('Period Time Difference (s)');
title('Difference between real und created period time') set(gca,'fontsize',15);
Im übrigen wäre ich vorsichtig: dass der Fehler im Divisor minimal ist, heißt nicht, dass er auch in der Multiplikation minimal ist.
Meine Idee wäre:
startend bei k = 0
Solange für T(i) k die Division durch keines der Pt restfrei aufgeht, wird k erhöht.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Im übrigen wäre ich vorsichtig: dass der Fehler im Divisor minimal ist, heißt nicht, dass er auch in der Multiplikation minimal ist.
Hallo Harald, Danke für deinen Hinweis! Du hast recht, das ist mir auch in den Sinn gekommen und deshalb hatte ich mir noch die Gesamtdauer anschaut, die durch die Multiplikation entsteht. Um wie viel sich die erzeugte Periodendauer von der gewünschten unterscheidet. Dafür habe ich auch das zeitliche Intervall 3,759-20ms auf 3,759-15ms, 3,759-10ms und 3,759-5ms kleiner gemacht, um zu sehen was passiert. Habe es mal als Datei hinzugefügt und die Unterschiede sind sehr klein.
Man sieht, wird das Intervall kleiner, wird der Fehler aufgrund der geringen Kombinationsmöglichkeiten größer und somit der zeitliche Unterschied zwischen der gewollten und erzeugten Periodendauer größer.
Zu deiner Überlegung, das habe ich davor schon mal probiert und um restfreie Variablen zu erhalten, bei 300 Frequenzen (0.1:0.1:30 Hz, Vorgabe) erhielt ich nur 13 Stück.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.