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

aus excel funktion einlesen

 

lotti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 23:07     Titel: aus excel funktion einlesen
  Antworten mit Zitat      
hallo,
ich möchte aus einer excel-zelle gerne eine funktion in der form

3*x^2-7

in matlab einlesen und dann als formel weiterverwenden. x habe ich als variable definiert. ich kann zwar die zelle in in excel auslesen, kann auch den string sehen, habe aber probleme das ganze so umzuwandeln dass ich damit rechnen kann...

hier mein code:

Code:

[o, hai] = xlsread ('Mappe1', 'Balkengeometrie', 'E73');
x = 0:200:1000 ;
ha = str2double(hai{1});
 


als ergebnis hätte ich gerne:

ha=3*x^2-7

kann mir jemand sagen wie das geht? ich muss dazu sagen, dass ich gerade erst anfange mich mit matlab zu beschäftigen...

lg


lotti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2010, 18:40     Titel:
  Antworten mit Zitat      
weiß denn keiner wie das geht oder ist es so einfach, dass keiner lust hat mir zu antworten? Confused
also ich bräuchte wirklich dringend hilfe und es wäre schön, wenn mir jemand helfen kann!

lg
 
lotti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2010, 20:26     Titel:
  Antworten mit Zitat      
hat sich erledigt
 
yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 16.08.2010, 10:24     Titel:
  Antworten mit Zitat      
Moin lotti,

magst Du Dein Ergebnis bitte schreiben? Ich hatte keinen Schimmer, wie es gehen könnte, deswegen habe ich z.B. nicht geschrieben.

Danke,
yankemen
_________________

Code:
% Kommentare brauchen ein Leerzeichen nach dem %
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
lotti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2010, 12:56     Titel:
  Antworten mit Zitat      
Hallo yankeman,

ich hab das jetzt so gelöst:

Code:
   
        [o, has] = xlsread ('Mappe1', 'Balkengeometrie', 'E73');
        [o, bas] = xlsread ('Mappe1', 'Balkengeometrie', 'E74');
         l = xlsread ('Mappe1', 'Balkengeometrie', 'E76');
         x = 0:200:l ;      %Ort der Messstellen
         test = size(x) ;   %Anzahl der Messstellen        
          for Z=1:test(2)  
              xin = x(Z);
              hai= regexprep (has{1}, 'x', 'xin');
              bai= regexprep (bas{1}, 'x', 'xin');
              Iy(Z,:) = (eval(bai))*(eval(hai))^3/12;
              Iz(Z,:) = (eval(hai))*(eval(bai))^3/12;    
              ha(Z,:) = eval(hai);  
              ba(Z,:) = eval(bai);      
          end
 


geht bestimmt auch schöner, aber es erfüllt seinen Zweck Wink
Das ganze ist ein Code zum berechnen von Flächenträgheitsmomenten eines Balkens, dessen Geometrie ich aus Excel auslese.

Für Verbesserungsvorschläge bin ich immer offen Razz

gruß lotti
 
lotti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.08.2010, 19:46     Titel:
  Antworten mit Zitat      
hallo zusammen,

bei der Schleife, die ich oben aufgeführt habe, stellt sich ein Problem heraus, dass vielleicht der Grund ist warum mein ganzes programm nicht funktioniert. Matlab gibt mir für die Variablen Iy,Iz,ha und ba eine Warnung raus:

Warning: The variable 'xxx' appears to change size on every loop iteration (within a script). Consider preallocating for speed.

kann mir jemand sagen, wie ich diese warnung beheben und dadurch die schleife verbessern kann?

vielen dank schonmal im voraus!
 
yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 18.08.2010, 08:40     Titel:
  Antworten mit Zitat      
Moin lotti,

vielen Dank für Deine Lösung!

Zu Deiner neuen Frage:
Matlab kann dynamisch Matrizen vergrößern. Allerdings muss dazu die ganze Matrix neu angelegt werden, was Zeit verbraucht. Wenn Du weißt, wie groß die Matrix werden wird, dann kannst Du sie mit
Code:
xxx = zeros(zeilen,spalten); % bzw. xxx = zeros(wert) für quadratische Matrix
% oder je nach Eignung mit
xxx = ones(zeilen,spalten);
vorbelegen. Wenn Du immer nur an das Ende der vorhandenen Werte etwas schreiben willst, musst Du einen Index mitführen, der vor der Schleife mit 1 initialisiert wird und nach der Zuweisung inkrementiert wird.
Code:
   
        [o, has] = xlsread ('Mappe1', 'Balkengeometrie', 'E73');
        [o, bas] = xlsread ('Mappe1', 'Balkengeometrie', 'E74');
         l = xlsread ('Mappe1', 'Balkengeometrie', 'E76');
         x = 0:200:l ;      % Ort der Messstellen
         test = size(x) ;   % Anzahl der Messstellen        
         Iy = zeros(test(2)); % Hier die Vorbelegung = preallocation
         Iz = zeros(test(2)); % wenn Du weißt, wieviele Spalten es werden, dann kann man das hier besser einstellen. Du bekommst jetzt das Problem, dass unten die falsche Spaltenzahl entsteht.
         ha = zeros(test(2));
          for Z=1:test(2)  % da Deine Schleife bis test(2) läuft, ist dies die maximale Zeilenzahl
              xin = x(Z);
              hai= regexprep (has{1}, 'x', 'xin');
              bai= regexprep (bas{1}, 'x', 'xin');
              Iy(Z,:) = (eval(bai))*(eval(hai))^3/12;
              Iz(Z,:) = (eval(hai))*(eval(bai))^3/12;    
              % wenn Du eine flexible Spaltenzahl hast, dann würde ich das jeweils einfügen:
              temp = eval(hai);
              if size(temp,2) < size(ha,2)
                  temp(size(ha,2)) = 0; % Ausdehnung von temp
              elseif size(temp,2) > size(ha,2)
                  ha(Z,size(temp,2)) = 0; % Ausdehnung von ha
              end
              ha(Z,:) = temp;  
              ba(Z,:) = eval(bai);      
          end
 


Du musst also wissen, wie viele Spalten es werden. Wenn das konstant ist, dann kannst Du es von vornherein festlegen, wenn nicht, dann muss Du dynamisch erweitern: entweder immer temp (was schneller ist) oder beides.

Grüße,
yankemen
_________________

Code:
% Kommentare brauchen ein Leerzeichen nach dem %
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
lotti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2010, 22:23     Titel:
  Antworten mit Zitat      
Vielen Dank yankemen! Hat gut funktioniert, mein großes problem ist damit zwar nicht behoben, aber das krieg ich auch noch hin Smile

Danke und Grüße
lotti
 
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.