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

vorhandene while scheife in GUI integrieren

 

tobi_whong
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2008, 13:17     Titel: vorhandene while scheife in GUI integrieren
  Antworten mit Zitat      
ich würde gerne diese schleife


beta2_grad = beta2_start_grad;

while delta_l > 0.0001

beta2_grad = beta2_grad-1.0;
beta2 = beta2_grad/1800*pi

yo = 1.0-h2;
phi0 = acos((cos(beta2)+(alpha+yo)*h2/(alpha*yo+1/2*yo^2))/(1+(alpha+yo)*h2/(alpha*yo+1/2*yo^2)));
t2 = (alpha*yo+1/2*yo^2)/(1-cos(phi0));
k2 = sqrt(4*t2/(alpha^2+4*t2));
t = t2*hs^2;

[F1,E1,Z1] = elliptic12((pi-phi0)/2,k2^2,2.220e-16);
[F2,E2,Z2] = elliptic12(pi/2,k2^2,2.220e-16);

xo = 2*t2/sqrt(alpha^2+4*t2)*(F1-F2-2/k2^2*(F1-E1-F2+E2));
d2 = xo+t2/(alpha+yo)*(sin(beta2)-sin(phi0));
l2 = 2*t2/sqrt(alpha^2+4*t2)*(F2-F1)+t2/(alpha+yo)*(beta2-phi0);
S2 = xo*(alpha+yo)-sin(phi0)*t2+t2^2/(alpha+yo)^2*(1/2*beta2-sin(2*beta2)/4-1/2*phi0+sin(2*phi0)/4)+(t2^2/(alpha+yo)^2*sin(phi0)-t*xo/(alpha+yo))*(cos(beta2)-cos(phi0));
beta1 = acos(1-(alpha-h1+1)/t2);
d1 = sin(beta1)*t2/(alpha-h1+1);
l1 = beta1*t2/(alpha-h1+1);
S1 = 1/2*(beta1-sin(beta1)*cos(beta1))*(t2/(alpha-h1+1))^2;

So = S1+S2;
lo = l1+l2;
d = d1+d2;
lges = d+lo;
hs = ls0/lges;
ls = lo*hs;
lk = d*hs;
lu = ls+lk;
t = t2*hs^2*9.81; % * rho*g/1000, Umrechung N->kN
As = So*hs^2;
delta_l = lb0-lk

end;

% Berechnung weiterer Parameter
la = (ls+lk)/2;
Qk = (ls+la)/hs;


















in ein gui integrieren. aber ich bekomms nicht hin
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 23.07.2008, 13:36     Titel:
  Antworten mit Zitat      
Moin,

weil du die nicht als Funktion deklarierst:

Code:
function [] = foo(beta2_start_grad) % in die eckigen Klammern müssen die Variablen rein, die von der Funktion zurückgegeben werden

beta2_grad = beta2_start_grad;

while delta_l > 0.0001

beta2_grad = beta2_grad-1.0;
beta2 = beta2_grad/1800*pi

yo = 1.0-h2;
phi0 = acos((cos(beta2)+(alpha+yo)*h2/(alpha*yo+1/2*yo^2))/(1+(alpha+yo)*h2/(alpha*yo+1/2*yo^2)));
t2 = (alpha*yo+1/2*yo^2)/(1-cos(phi0));
k2 = sqrt(4*t2/(alpha^2+4*t2));
t = t2*hs^2;

[F1,E1,Z1] = elliptic12((pi-phi0)/2,k2^2,2.220e-16);
[F2,E2,Z2] = elliptic12(pi/2,k2^2,2.220e-16);

xo = 2*t2/sqrt(alpha^2+4*t2)*(F1-F2-2/k2^2*(F1-E1-F2+E2));
d2 = xo+t2/(alpha+yo)*(sin(beta2)-sin(phi0));
l2 = 2*t2/sqrt(alpha^2+4*t2)*(F2-F1)+t2/(alpha+yo)*(beta2-phi0);
S2 = xo*(alpha+yo)-sin(phi0)*t2+t2^2/(alpha+yo)^2*(1/2*beta2-sin(2*beta2)/4-1/2*phi0+sin(2*phi0)/4)+(t2^2/(alpha+yo)^2*sin(phi0)-t*xo/(alpha+yo))*(cos(beta2)-cos(phi0));
beta1 = acos(1-(alpha-h1+1)/t2);
d1 = sin(beta1)*t2/(alpha-h1+1);
l1 = beta1*t2/(alpha-h1+1);
S1 = 1/2*(beta1-sin(beta1)*cos(beta1))*(t2/(alpha-h1+1))^2;

So = S1+S2;
lo = l1+l2;
d = d1+d2;
lges = d+lo;
hs = ls0/lges;
ls = lo*hs;
lk = d*hs;
lu = ls+lk;
t = t2*hs^2*9.81; % * rho*g/1000, Umrechung N->kN
As = So*hs^2;
delta_l = lb0-lk

end;

% Berechnung weiterer Parameter
la = (ls+lk)/2;
Qk = (ls+la)/hs;
 

Das M-File muss dann genauso heißen wie die Funktion.
Der Aufruf erfolgt in diesem Fall dann über
Code:
[] = foo(beta2_start_grad);
.

Gruß
Alex

PS: Zukünftig bitte immer die Code-Umgebung verwenden...
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
tobi_whong
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2008, 14:12     Titel:
  Antworten mit Zitat      


Zuletzt bearbeitet von tobi_whong am 23.07.2008, 15:56, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 23.07.2008, 15:19     Titel:
  Antworten mit Zitat      
Code:

function berechnung(invar)

%% Bemessungsgrößen
ls0                 =   invar.ls0;         % Gesamtunfang der Membran, d.h. inkl. Bodenkontaktlänge
lb0                 =   invar.lb0;          % Befestigungsabstand der Klemmschienen
alpha0              =   invar.alpha0;        % Innendruckkoeffizient
h1                  =   invar.h1;        % Oberwasserstand (für h1 = 1.0 ist ho = hs)
h2                  =   invar.h2;        % Unterwasserstand (für h1 = 1.0 ist hu = hs)

% [der Rest deines Codes]

 


Aufruf kann dann so erfolgen:
Code:
s = struct('ls0',10,'lb0',4,'alpha0',1.6,'h1',1.0,'h2',0.0);
berechnung(s);


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
tobi_whong
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2008, 15:55     Titel:
  Antworten mit Zitat      
danke für deine hilfe, aber ich starte das vorhandene mfile einfach über
Code:

evalin('base','run SchlauchGeometrieWasser')
 



eine sache habe ich aber noch.
ich habe 5 textboxes in denen die parameter eingegeben werden.
jetzt möchteich, bevor ichmit OK den evailn befeht starte vorher noch ein paar wichtige zwischenwerte errechnen lassen. eben diese hier:

Code:

%% Initialisierung
lk                  =   0.0;
delta_l             =   lb0-lk;
beta2_start_grad    =   1800;
hs                  =   2.0;
alpha               =   alpha0-1.;      % In der japanischen Richtlinie wird mit dem Überdruck gerechnet
 


diese sind ja, wie man sieht abhängig von den vorher eingegebenen werten in den 5 textboxes. nehmen wir zb
Code:
delta_l   =   lb0-lk;


das versuche ich über
Code:
assingin('base','delta_l',str2double(get(edit5_hObject, 'String')))


in den workspace zu schieben, damit das mfile nachher zugriff drauf hat.
aber der assingin befehl stimmt nich nicht ganz.kannst du mir da weiterhelfen?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 23.07.2008, 16:03     Titel:
  Antworten mit Zitat      
Was stimmt denn an dem assingin-Befehl nicht? Gibts ne Fehlermeldung?!

PS: Ich persönlich finde dein Vorgehen etwas umständlich Wink
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
tobi_whong
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2008, 16:23     Titel:
  Antworten mit Zitat      
das mit demumständlich stimmt sicherlich. aber mir fehlt für die "einfachere" variante einfach die erfahrung und das können


Code:

??? Undefined function or variable 'edit5_hObject'.

Error in ==> Schlauchgeometrie_GUI_V2>edit8_Callback at 204
assingin('base','delta_l',str2double(get(edit5_hObject, 'String')))

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> Schlauchgeometrie_GUI_V2 at 42
    gui_mainfcn(gui_State, varargin{:});

??? Error while evaluating uicontrol Callback

 


muss ich die werte aus den textboxes vorher irgendwie ersteinmal allgemein zur verfügungs stellen?
Private Nachricht senden Benutzer-Profile anzeigen
 
tobi_whong
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2008, 16:57     Titel:
  Antworten mit Zitat      
ok. hat sich auch erledigt...kleiner tippfehler irgendwi im gui.

dann die hoffentlich letzte frage

mit
Code:
set(hObject,'Position',[130 32 90 30])


will ich das gui auf den 2. rechten bildschirm schieben lassen. das will aber nicht. 130 und 32 sind die höchsten werte, dann ist es auf dem 1. bildschirm oben rechts in der ecke.
gibt es einen anderen positionsbefehl um das gui hinzuschieben, wo man will?
ich glaube, das man es nur auf den hauptbildschirm positionieren kann.


und noch eins:
wenn ich auf den butten komme, will ich ihn mit enter bestätigen, im moment geht das nur mit mausklick.
was war nochmal der befehl dafür? in der hilfe finde ichs gerade nicht
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 23.07.2008, 17:45     Titel:
  Antworten mit Zitat      
tobi_whong hat Folgendes geschrieben:

wenn ich auf den butten komme, will ich ihn mit enter bestätigen, im moment geht das nur mit mausklick.
was war nochmal der befehl dafür? in der hilfe finde ichs gerade nicht

Wie kommst du denn dann auf den Button?! Mit "Tab"? Dann kannst du den mit der Leertaste bestätigen.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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.