Verfasst am: 12.08.2010, 23:07
Titel: aus excel funktion einlesen
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});
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: ---
Verfasst am: 13.08.2010, 18:40
Titel:
weiß denn keiner wie das geht oder ist es so einfach, dass keiner lust hat mir zu antworten?
also ich bräuchte wirklich dringend hilfe und es wäre schön, wenn mir jemand helfen kann!
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
lotti
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 16.08.2010, 12:56
Titel:
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
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
gruß lotti
lotti
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 17.08.2010, 19:46
Titel:
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?
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);
ifsize(temp,2) < size(ha,2)
temp(size(ha,2)) = 0; % Ausdehnung von temp elseifsize(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.
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
lotti
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 18.08.2010, 22:23
Titel:
Vielen Dank yankemen! Hat gut funktioniert, mein großes problem ist damit zwar nicht behoben, aber das krieg ich auch noch hin
Danke und Grüße
lotti
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
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.