|
Happy |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.02.2010, 01:04
Titel: fehlerhafte Berechnung
|
 |
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: ---
|
 |
|
|
 |
|
Verfasst am: 03.02.2010, 08:19
Titel:
|
 |
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: ---
|
 |
|
|
 |
|
Verfasst am: 03.02.2010, 10:34
Titel:
|
 |
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
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 03.02.2010, 10:40
Titel:
|
 |
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
|
|
|
Happy |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.02.2010, 11:12
Titel:
|
 |
|
 |
|
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: ---
|
 |
|
|
 |
|
Verfasst am: 03.02.2010, 11:40
Titel:
|
 |
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
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 03.02.2010, 12:04
Titel:
|
 |
Hallo,
ich hatte hier eigentlich auf etwas gehofft, das ich reproduzieren kann.
Natürlich kann es zu Fehlern kommen, wenn man "nur kopiert":
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
Grüße,
Harald
|
|
|
Happy |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.02.2010, 15:33
Titel:
|
 |
Danke für die schnelle Hilfe, es war tatsächlich ein Rundungsfehler!!!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|