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

fehlerhafte Berechnung

 

Happy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 01:04     Titel: fehlerhafte Berechnung
  Antworten mit Zitat      
Moin,

ich habe folgendes (mitlerweile sehr zeitraubendes) Problem: Ich will folgende Gleichung in einem M-file berechnen lassen.

e = extr_punkt_y - a*extr_punkt_x^4 - b*extr_punkt_x^3 - c*extr_punkt_x^2 - d*extr_punkt_x;

Alle Parameter wurden vorher bestimmt. Das Problem ist jetzt, dass das Ergebnis falsch ist. Wenn ich die Gleichung einfach im Command-Window eingebe kommt das richtige Ergebnis raus.

Hab schon viel probiert und wäre sehr dankbar für hilfe!!!


Thomas84

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 08:19     Titel:
  Antworten mit Zitat      
Der Fehler ist so wahrscheinlich schwierig zu finden. Schreib doch noch die Größe der einzelnen Parameter sowie das richtige und falsche Ergebnis mit hin.
Ich würd zumindest erst mal checken ob alle eingabewerte im m-file wirklich so sind wie du sie haben willst.
 
Happy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 10:34     Titel:
  Antworten mit Zitat      
Ja na klar, hier die werte für die einzelnen Parameter:

extr_punkt_x = 63.17
extr_punkt_y = 11.915
a = -2.2733e-004
b = 0.0589
c = -5.7836
d = 254.728

richtiges Ergebnis e = 4227.49 (Command-Window, Taschenrechner)
falsches Ergebnis e = 4229 (M-File)

Hab bereits mithilfe vom Breakpoints überprüft ob die Werte auch so übergeben werden, was auch der Fall ist.
 
Harald
Forum-Meister

Forum-Meister


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

ich habe meine Zweifel, dass dieselbe Berechnung zu verschiedenen Ergebnissen führen kann, aber ich lasse mich gerne eines besseren belehren. Stelle bitte genau zur Verfügung, was du im Command Window eingibst, wie deine Funktion aussieht, und wie sie aufgerufen wird.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 11:12     Titel:
  Antworten mit Zitat      
function FreeVortex(Direction)

Curve_direction_presuresite = [Direction,'\Druckseite.txt'];
Curve_direction_camberline = [Direction,'\Skelettlinie20GR1.txt'];
Druckseite = textread(Curve_direction_presuresite);
Skelettlinie = textread(Curve_direction_camberline);


n_str = input('Drehzahl in 1/min:','s');
n = str2double(n_str)/60;

cm_str = input('Meridiangeschwindigkeit in m/s:','s');
cm = str2double(cm_str);

Profile_Data = Profile_Data_20GR1(Druckseite,Skelettlinie);

h = Profile_Data.Hoehe;
h_m = Profile_Data.Hoehe_Mittenschnitt;

extr_punkt_x = Profile_Data.Skelettlinie.Maximum(1);
extr_punkt_y = Profile_Data.Skelettlinie.Maximum(2);
extr_punkt_x_str = num2str(extr_punkt_x);

x_LE = Profile_Data.Skelettlinie.LE_X;
x_TE = Profile_Data.Skelettlinie.TE_X;
x_LE_str = num2str(x_LE);
x_TE_str = num2str(x_TE);

SL = Profile_Data.Skelettlinie.Laenge;

beta1m = Profile_Data.Skelettlinie.beta1m;
beta2m = Profile_Data.Skelettlinie.beta2m;

beta1m_rad = beta1m * pi/180;
beta2m_rad = beta2m * pi/180;
um = 2 * pi * n * h_m;
cotA1m = (1/tan(beta1m_rad)) + (um/cm);
cotA2m = (um/cm) - (1/tan(beta2m_rad));

y_LE = tan((90 - beta1m)*pi/180);
y_TE = -tan((90 - beta2m)*pi/180);
y_LE_str = num2str(y_LE);
y_TE_str = num2str(y_TE);

d = 254;
dl = 2;

while dl > 1e-004

d_neu = d;
d_neu_str = num2str(d_neu);
Gl_1 = ['0 = a*',extr_punkt_x_str,'^3 + b*',extr_punkt_x_str,'^2 + c*',extr_punkt_x_str,' + ',d_neu_str];
Gl_2 = [y_LE_str,' = a*',x_LE_str,'^3 + b*',x_LE_str,'^2 + c*',x_LE_str,' + ',d_neu_str];
Gl_3 = [y_TE_str,' = a*',x_TE_str,'^3 + b*',x_TE_str,'^2 + c*',x_TE_str,' + ',d_neu_str];
[a,b,c] = solve(Gl_1,Gl_2,Gl_3);
a = double(a); b = double(b); c = double(c);

SL_neu = quad(@(x)Laengenintegral_neu(x,a,b,c,d_neu),x_LE,x_TE);

dl = abs(SL_neu - SL);
h = stepsize(dl);

if SL_neu < SL

d = d - h;

else

d = d + h;

end

end

a = a/4;
b = b/3;
c = c/2;
d = (d_neu);

e = extr_punkt_y - a*extr_punkt_x^4 - b*extr_punkt_x^3 - c*extr_punkt_x^2 - d*extr_punkt_x;
disp(e)


Die Gleichung berechnet den letzten Parameter eines Polynoms (4Grades) und erzwingt aus mathematischer Sicht das die Funktion durch den Punkt geht (extr_punkt_x/y)

Da dies nicht der Fall war hab ich mir die einzelnen Parameter über "disp" ausgeben lassen und dann "per Hand" berechnet, so kam ich dann auf das richtige Ergebnis!
 
Happy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 11:40     Titel:
  Antworten mit Zitat      
liegt es möglicherweise an der Genauigkeit der Berechnung? Evtl. liegen die Zahlen in einer Größenordnung (durch die Potenzen) das schon kleine Unterschiede zu der Abweichung führen.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.02.2010, 12:04     Titel:
  Antworten mit Zitat      
Hallo,

ich hatte hier eigentlich auf etwas gehofft, das ich reproduzieren kann.

Natürlich kann es zu Fehlern kommen, wenn man "nur kopiert":

Code:
% Exakte Werte
a = 1/3
b = 1/7
c = 1/9
v = a*10^2 + b*10 + c

% Aus Command Window kopierte Werte
a = 0.3333;
b = 0.1429;
c = 0.1111;
v = a*10^2 + b*10 + c


In diesem Beispiel ist die Abweichung zwar nicht so groß, der Auslöser ist aber der gleiche.
Unter anderem hat die Problematik letztlich nichts damit zu tun, ob das im Command Window oder in einer Funktion ausgeführt wird. Im vorliegenden Fall lag es daran, dass unterschiedliche Dinge ausgeführt werden.

Probier evtl. auch mal
Code:


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 15:33     Titel:
  Antworten mit Zitat      
Danke für die schnelle Hilfe, es war tatsächlich ein Rundungsfehler!!!
 
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 - 2025 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.