WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

unzureichende Genauigkeit bei Berechnung

 

MatthiasJ
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 24.08.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2020, 19:23     Titel: unzureichende Genauigkeit bei Berechnung
  Antworten mit Zitat      
Hallo, mein Script gibt mir nicht die erwarteten Ergebnisse. Ich glaube das liegt an Berechnungsungenauigkeiten. Ich berechne mir mit Hilfe von solve ein Vektor(siehe Anhang) der dann folgende Formeln berechnet:

Code:
d_fraeser_teilkreis = 72.5;

steig_winkel_fraeser = 2.3695;
steig_winkel = steig_winkel_fraeser*(pi/180);  

r_e = (d_fraeser_teilkreis/2)/cos(steig_winkel);

load 'alpha_fraeser_stirnschnitt'

kreiswinkel = atan(((d_fraeser_teilkreis/2).*...
    tan(alpha_fraeser_stirnschnitt))./r_e);

r = sqrt(((d_fraeser_teilkreis/2).*cos(kreiswinkel)).^2+...
    (r_e.*sin(kreiswinkel)).^2);
 


Nun gibt er mir für r an manchen Stellen 36.250000000000010 aus und an anderen 36.250000000000000. Eigentlich müssten die Werte im Vektor r von oben nach unten immer größer werden (auch wenn nur sehr gering). Mit dem Befehl digits(...) die Genauigkeit zu erhöhen hat nix gebracht. Gibt es noch andere Möglichkeiten um die Genauigkeit zu erhöhen? Funktioniert digits(...) eventuell nicht mit dem solve Befehl?

alpha_fraeser_stirnschnitt.mat
 Beschreibung:

Download
 Dateiname:  alpha_fraeser_stirnschnitt.mat
 Dateigröße:  263 Bytes
 Heruntergeladen:  242 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.08.2020, 10:00     Titel:
  Antworten mit Zitat      
Hallo,

spätestens wenn du auf Double wechselst gibt es nicht mehr als 16 Stellen relative Genauigkeit.

solve liefert an sich exakte Ergebnisse als symbolische Variablen. Wenn du exakte Ergebnisse willst, solltest du auch mit den symbolischen Variablen weiter rechnen.
Das Problem scheint mir weniger bei der Verwendung der Lösung zu liegen sondern schon bei ihrer Ermittlung. Du müsstest also den Code posten, wie du alpha_fraeser_stirnschnitt berechnest.

Da alpha_fraeser_stirnschnitt nicht monoton ist, würde ich auch nicht erwarten, dass r monoton ist.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
MatthiasJ
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 24.08.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2020, 14:47     Titel:
  Antworten mit Zitat      
Hallo,

schon mal danke für die Antwort. Beim nachschauen ist mir aufgefallen, dass ich nicht mit solve, sondern mit vpasolve rechne, um die Berechnungsdauer zusenken. Durch vpasolve erhalte ich eine Variable u, die dann später zur Ermittlung von alpha_fraeser_stirnschnitt beiträgt. Die Variable u konvertiere ich auch direkt nach dem vpasolve mit double() um. Ich darf also nicht auf double wechseln und muss die symbolischen Variablen komplett durch ziehen?
Hier mein Code:

Code:
j = 1;
for a = stirnschnitt_teilung
syms u
u = double(vpasolve(a==-1./f1(u).*...
(z_koord_matrix(1,i)+stirnschnitt_ebene-u)+f(u)));
u(imag(u)~=0)=[];
u_werte(j) = u;
j = j+1;
end          

schnittpunkt_z = u_werte';
schnittpunkt_x = double(f(schnittpunkt_z));

x1_schnittpunkt = double(f1(schnittpunkt_z)); % 1. Ableitung für Schnittpunkt
x2_schnittpunkt = double(f2(schnittpunkt_z)); % 2. Ableitung für Schnittpunkt

% Z-Werte der Mittelpunkte
z_mittelpunkt = schnittpunkt_z-((x1_schnittpunkt.*...
    (1+(x1_schnittpunkt.^2)))./x2_schnittpunkt);

% X-Werte der Mittelpunkte
x_mittelpunkt = schnittpunkt_x+((1+x1_schnittpunkt.^2)./...
    x2_schnittpunkt);  

alpha_fraeser_stirnschnitt = (pi/2)-atan2(stirnschnitt_teilung'-...
    x_mittelpunkt,repmat(z_koord_matrix(1,i),px_bezugsprofil,1)-z_mittelpunkt);
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.08.2020, 17:35     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich darf also nicht auf double wechseln und muss die symbolischen Variablen komplett durch ziehen?

Wenn du die volle Genauigkeit, die du über digits eingestellt hast, behalten möchtest, dann ganz genau. Wie gesagt, Double kann nur eine begrenzte Stellenanzahl. Hier sieht man das schön:

Code:
digits(200)
S = vpasolve(1.4*x^4 + 3*x^3 - 4*x^2 - 3*x + 2 == 0, x)
S2 = double(S)
S-S2


Mit solve muss man eine Gleichung normal nur einmal lösen und kann dann verschiedene Zahlen einsetzen. solve löst halt exakt, während vpasolve zwar eine beliebig gute Annäherung gibt, aber eben immer noch eine Annäherung.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.