Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Entwicklungsingenieur (m/w) für modellbasierte Softwareentwicklung
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler (m/w) für automatische Codegenerierung
Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink im Bereich Fahrwerkregelsysteme
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler Automotive Getriebesteuerungen (m/w)
Umsetzung der Softwarefunktionalität modellbasiert nach Spezifikation
MBtech Group GmbH & Co. KGaA - Sindelfingen

Ingenieur (w/m) modellbasierte Entwicklung/Embedded Programmierung
Organisation und Durchführung von Projekten zur Integration von TargetLink
dSPACE GmbH - Böblingen (bei Stuttgart)

Embedded Software- Entwickler (m/w) - Hardwarenahe Software für innovative Steuerungssysteme
Design, Implementierung und Test von Embedded Software
DR. JOHANNES HEIDENHAIN GmbH - Traunreut (Raum Rosenheim)

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Matlab Rechengenauigkeit

 

UltraCuriositas
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.05.17
Wohnort: München
Version: ---
     Beitrag Verfasst am: 02.08.2017, 21:14     Titel: Matlab Rechengenauigkeit
  Antworten mit Zitat      
Hallo Community,

ich sitze gerade an einer Studienarbeit und möchte meine Berechnung am Ende noch verifizieren.

Dafür muss ein gegebener Parameter >= einem Berechneten sein.

Die Formel hierfür lautet: q= 3.62*E*(t/a)^2

Die Parameter sind alle gegeben oder wurden berechnet.

Problem hierbei ist, dass bei leicht abgeänderten Werten auch eine Abweichung zu sehen sein sollte. Diese werden mir aber in Matlab nicht angezeigt.

Also habe ich die Gleichung in meinem Taschenrechner eingegeben und er zeigte mir eine Abweichung um 2.38*10^-4 an.

Wenn ich in Matlab die genauigkeit auf %.16f stelle sehe ich eine Abweichung, allerdings bei 2.84*10^-14und darum wird verständlicherweise gerundet.

Woran liegt das oder wie kann ich es beheben?

Vielen Dank im Vorraus!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 17.513
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 03.08.2017, 08:36     Titel:
  Antworten mit Zitat      
Hallo,

bitte poste deinen Code. Nur dann kann man dir sagen, woran das liegt oder was du machen kannst, um es zu beheben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
UltraCuriositas
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.05.17
Wohnort: München
Version: ---
     Beitrag Verfasst am: 03.08.2017, 11:39     Titel:
  Antworten mit Zitat      
Code:

%Studienarbeit Leichtbau Aufgabe 2
global F b E szul ;

F =222000;  
b =654;    
E =70350;  
szul = 107;

x0 = [0.1, 0.1, 1];   %Startwerte
fun = @z;             %Handle Zielfunktion    
B = @Bedingungen;     %Handle der Bedingungen
ug = [0,0,0];         %untere Grenze
og = [1000,10,100];   %obere Grenze [Sickenbreite/-höhe,Blechdicke,Sickenanzahl]

% Maximales Minimum (Berechung der Sickenzahl mit Kommastellen)

[P, fval] = fmincon(fun,x0,[],[],[],[],ug,og,B);

% Berechnung mit ganzzahliger Sickenanzahl
u = P(3);
n = int8(u);
m = double (n);
a = b / (2*m+1);
t = sqrt((szul*a^2)/(3.62*E));

% Berechnung von Schwerpunkt und nx

zs =(2*a*m)/(4*m+1); %Schwerpunktsabstand in z-Richtung berechnet von der Unterkante

nx= 3.62*E*(t/a)^2 * t;

fprintf('Lösungswerte:\n\n');
fprintf('Sickenbreite/-höhe \t\t\t= %.4f [mm]\n',a);
fprintf('Blechstärke \t\t\t\t= %.4f  [mm]\n',t);
fprintf('Sickenanzahl \t\t\t\t= %.0f\n',m);
fprintf('Schwerpunktsabstand in y-Richtung \t= %.4f [mm]\n',zs);
fprintf('Kraftfluss \t\t\t\t= %.4f[N/mm]\n',nx);

%Verifizierung

fprintf('\nVerifizierung:\n\n');

%Beulen

fprintf('Lokales Beulen:\n');

fprintf('Sigma_x     = F/A =%.4f [N/mm^2]\n', F/(F/szul));
fprintf('Sigma_krit  = 3.62*E*(t/a)^2 = %.4f [N/mm^2]\n',3.62*E*(t/a)^2);
fprintf('Sigma_krit >= Sigma_x\n');
fprintf('%.4f   >= %.4f\n', 3.62*E*(t/a)^2, F/(F/szul));

%Festigkeit

fprintf('\nFestigkeit:\n')

fprintf('Sigma_Zul  = %.4f [N/mm^2]\n', szul);
fprintf('Sigma_Zul >= Sigma_x\n');
fprintf('%.4f  >= %.4f\n', szul, F/(F/szul));

%Flächenkriterium

fprintf('\nFlächenkriterium:\n');

fprintf('Kleinste Fläche    = F/Sigma_zul =%.4f [mm]\n', F/szul);
fprintf('Berechnete Fläche  = a*t*(4*m+1) = %.4f [mm^2]\n',a*t*(4*m+1));
fprintf('Berechnete Fläche >= kleinste Fläche\n');
fprintf('\t%.4f >= %.4f \n',a*t*(4*m+1),F/szul);

function [ A ] = z(P)              %Zielfunktion für minmiale Fläche A, P=Parameter
global F b E szul;

        A = P(1)*P(2)*(4*P(3)+1);  

end

function [ c, ceq ] = Bedingungen(P) %Bediungungsfunktion

global F b E szul ;

A = P(1) * P(2) * (4 * P(3) + 1);            %Fläche

c(1) = (2* P(3) + 1) * P(1) - b;             %Gesamtbreite

c(2) = 3.62 * E * (P(2) / P(1))^2 - szul;    %Lokales Beulen

c(3) = F / A - szul;                         %Festigkeit
 
ceq = [];

 
end

 


Das ist mein kompletter Code.
Der angesprochene Vergleich ist bei Verifizierung->Beulen-> letzter fprintf Befehl. Dort habe ich beide Formeln eingegeben die gegenübergestellt werden sollen.

Vielen Dank für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.513
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 03.08.2017, 13:02     Titel:
  Antworten mit Zitat      
Hallo,

ein sehr langer Code, und ich kann nicht daraus erkennen, wo etwas variiert wurde.
F/(F/szul) ist einfach szul, und das wird anfangs festgelegt.
Beim anderen Teil wird hin- und hergerechnet. Warum da am Ende etwas anderes herauskommen soll, erschließt sich mir nicht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
UltraCuriositas
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.05.17
Wohnort: München
Version: ---
     Beitrag Verfasst am: 03.08.2017, 19:21     Titel:
  Antworten mit Zitat      
Ich könnte den Code noch kürzen, müsste dafür aber mehr Text in den Abgabebericht schreiben. Deswegen entschied ich mich für die etwas bequemere Lösung.

Vielen Dank für die Antwort
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.513
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 04.08.2017, 08:05     Titel:
  Antworten mit Zitat      
Hallo,

es ist für die Zwecke hier schon mal hilfreich, wenn man Code zur Verfügung stellt. Noch besser ist es aber, wenn sich der Code auf das wesentliche konzentriert. Das heißt ja nicht, dass du das in deinem Abgabebericht auch so machen musst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 10.481
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.08.2017, 19:39     Titel: Re: Matlab Rechengenauigkeit
  Antworten mit Zitat      
Hallo UltraCuriositas,

Ich verstehe noch nicht, was genau das Problem ist.
Zitat:
Dafür muss ein gegebener Parameter >= einem Berechneten sein.

Welcher Parameter muss größer sein als welcher?
Zitat:
Die Formel hierfür lautet: q= 3.62*E*(t/a)^2

Die Formel wofür?

Zitat:
Problem hierbei ist, dass bei leicht abgeänderten Werten auch eine Abweichung zu sehen sein sollte. Diese werden mir aber in Matlab nicht angezeigt.

Welche Werte änderst Du wie ab?

Zitat:
Wenn ich in Matlab die genauigkeit auf %.16f stelle ...

Man kann ion Matlab nicht die Genauigkeit einstellen. $.16f klingt danach, als meintest Du die Ausgabe per sprintf bzw. fprintf . Hier geht es aber nur um die Anzeige der Zahlen. Mit den Berechnungen hat das nichts zu tun. Ich denke, das ist klar, wollte es aber zur Sicherheit erwähnen.

Zitat:
...sehe ich eine Abweichung, allerdings bei 2.84*10^-14und darum wird verständlicherweise gerundet.

Als Leser kann man nicht wissen, was hier warum gerundet wird.

Zitat:
Woran liegt das oder wie kann ich es beheben?

Weder die Erklärung noch der gezeigte Code helfen zu erkennen, welche Werte Du genau meinst. Es ist gut möglich, dass Dein Taschenrechner mit weniger Stellen rechnet als Matlab, das IEEE754 double Zahlen verwendet.

Versuche also noch mal genau zu erklären, was das Problem ist.

Gruß, Jan
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.