Ändern Sie eine Excel-Tabelle aus Matlab
Ist es möglich, öffnen Sie ein Arbeitsblatt in excel von matlab Bearbeiten und die Formeln? Die Idee ist es, die Automatisierung von Unsicherheit-Analyse durch erstellen einer zweiten Platte mit der Unsicherheit, die in jeder Zelle für den Wert aus der vorherigen Zelle. Im wesentlichen, ich möchte die Behandlung der Zellen als Variablen und tun SQRT(SUM(Teiltöne(xi)^2)) für jede Zelle. Matlab sollte es kein problem mit der calc, aber können es Bearbeiten, die Formeln in den Blättern?
Den Prozess derzeit ist das kopieren und einfügen aus excel in matlab. Hier ist eine kleine Funktion, welche die Unsicherheit in matlab vor, die auf array von Gleichungen:
function [f_u_total f_u] = uncertAnalysis(f, vars, vars_u)
f_u = [];
f_u_total = [];
for(i=1:length(f))
f(i)
item = uncertAnalysisi(f(i), vars, vars_u);
f_u = [f_u; item(1)];
f_u_total = [f_u_total; item(1)];
end
end
function [f_u_total f_u] = uncertAnalysisi(f, vars, vars_u)
f_u = [];
% take the partials and square them
for i=1:length(vars)
f_u = [f_u; vars(i) (diff(f, vars(i)).*vars_u(i)).^2];
end
% calculate the RSS
f_u_total = (sum(f_u(:,2))).^.5;
end
Nebenbei, sehen die Gleichungen so etwas (warum ich es nicht mache das von hand):
=(9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^4/C!Y3^6/(C!U3^C!Z3)^6*F3^2+1/4*C!S3^2/C!V3^4*C!W3/(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*O3^2+1/4*C!S3^2/C!V3^4*C!W3/(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*P3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^4*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*Q3^2+1/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*S3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*C!Z3^2/C!U3^2*U3^2+4*C!S3^2/C!V3^6*C!W3*(C!O
3-C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*V3^2+1/4*C!S3^2/C!V3^4/C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*W3^2+1/4*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3^3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*X3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^8/(C!U3^C!Z3)^6*Y3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*LOG(C!U3)^2*Z3^2)^(1/2)
- Ich habe zu Fragen, warum Sie die Verwendung von Excel für diese überhaupt? Es ist nicht wirklich vorgesehen für wissenschaftliche Daten-Analyse wie diese. Sie könnten besser exportieren die Daten in text-Dateien, den Import in MATLAB, Berechnung der Ergebnisse, anschließend speichern als text importieren und wieder in Excel.
- David, es ist der "standard" in unserem Labor (mechanical engineering lab). Ich Stimme zu, und halten die Dinge gern rein in matlab, wenn ich kann. Ich muss aber sagen, excel hat auch seine Vorzüge. Zum Beispiel das Blatt "programmiert", während Sie Daten liefert, die für ein paar nette Echtzeit-Berechnungen/Visualisierungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage sein, es zu tun, die über COM/ActiveX/Automation. Blick auf die Externe Schnittstellen Dokument; es ist ein Beispiel dafür, wie Zugriff auf Excel-Dokumente über die Excel-Automation-Schnittstellen.
Habe ich weiter keine Erfahrung im Bearbeiten von Excel auf diese Weise, aber ich weiß, Sie können gerade über alles tun, in Excel durch Automatisierung und Bearbeitung Zelle Formeln, klingt nicht so schwer.
edit: ich kann nicht finden, einen Verweis auf die Excel-Objekt-Modell, aber hier ist ein anderes Beispiel: http://support.microsoft.com/kb/301982
Dies ist nicht eine schrecklich elegante Lösung, aber wenn Sie speichern eine neue
.xls
Tabellenkalkulation ist einfach eine tab-getrennte Datei (oder CSV -) Datei, können Sie Matlab erzeugen Formeln und wenn Excel das Dokument geöffnet ist, werden die Werte aufgefüllt wird.In Perl, ich habe behandelt es so etwas wie dieses:
Und wenn
tmpfile.xls
in Excel geöffnet wird, wird die ZelleC1
wird angezeigt, wie 3, die dynamisch aktualisiert und angemessen, wennA1
oderB1
geändert werden.(Ich bin nicht gut mit Matlab, so habe ich keine Kenntnis von der Art der plugins)
EDIT: Meine Vorherige Annahme, dass XLSWRITE nicht funktionieren würde, war falsch. Ich habe nur versucht, die folgenden in MATLAB:
und wenn ich öffnete die Datei in excel, die Funktion war in der Tat da! Die Beschränkung auf diese würde, die Sie hätten verwenden Sie nur die Funktionen, die in Excel.
Leider, ich glaube nicht, dass XLSREAD Lesen können die Formeln in MATLAB (es erscheint nur das Ergebnis bekommen).
BISHER VORGESCHLAGENEN OPTIONEN:
Möchten Sie vielleicht zu prüfen, die Spreadsheet Link EX software auf der MathWorks-website, obwohl ich bin ein wenig vertraut mit ihm und bin nicht sicher, ob selbst das tun können, was Sie brauchen. Etwas anderes, dass Sie in Aussehen sollte ist MATLAB Builder EX, die "ermöglicht die Integration von MATLAB® - Anwendungen in Ihrer Organisation Excel® - Arbeitsmappen als makro-Funktionen oder add-ins". Klingt vielversprechend...
COM/ActiveX. Sie können öffnen Sie eine Excel-Instanz über den folgenden Befehl:
Dann verwenden Sie eine Kombination von code-Vervollständigung und die VBA-Hilfe in Excel selbst zu arbeiten, sich den rest.
Erinnern, um Excel zu schließen mit
On a side note, so genannte CSE (Ctrl-Shift-Enter) Formeln helfen kann? Sehen Google.
Als alternative, finden Sie den code unten ein (xlswrite) für ActiveX verwenden von Matlab:
http://www.mathworks.com/matlabcentral/fileexchange/2855