Retrieve past results - matlab

Is it possible to retrieve previous results in the command window? For example i had some matrices and vectors in the command window and after an error the matlab was closed . Is it possible to retrieve them?
Thanks

No guarantees about what happens after a crash, but in general, use the command diary('filename.txt') to append all text in the CommandWindow -- not the Command History window -- to that text file.
(I dunno why MathWorks doesn't call the "CommandWindow" what it is, i.e. the Console, but there you are.)

Related

how to show the linearization result in Dymola?

I tried to use the linearization function in Dymola, but it seems when the result's dimension is large, Dymola won't show the result.
My question is:
How could I print the result or where to find it?
What you can do, is assign the result to a variable. This can be done using the Outputs group as shown in the screenshot below. If you e.g. enter "sys" in the field for ss, you will get a record sys, in which you can access the matrices/vectors by typing sys.A, sys.B etc., which I've tested for a system of size 200x200. Typing this into the command line will display the content. Of course this record not only for outputting it, but also for post-processing.
The only thing this actually does, is modify the call from Modelica_LinearSystems2.ModelAnalysis.Linearize("ModelName") to sys=Modelica_LinearSystems2.ModelAnalysis.Linearize("ModelName"), so it can be done in the Commands window as well.
Call the function from the command line and capture the output. Then you can do with it what ever you want.
Everything you find in the Linear Analysis toolbar is part of the library Modelica_LinearSystems2. The Linearize item in this menu calls the function
Modelica_LinearSystems2.ModelAnalysis.Linearize("<your-model>")
which is also printed to the command line. The function returns the operator record Modelica_LinearSystems2.StateSpace, which contains all the info you are interested in. The default behavior of Dymola is to call the String method of this operator record and print it to the command line. If you look at the source code of Modelica_LinearSystems2.StateSpace.'String' you can see this at the start of the algorithm section:
// If system is too large, do not print the matrices
if size(ss.A,1) > 50 or size(ss.B, 2) > 50 or size(ss.C, 1) > 50 then
...
On the command line you can capture the operator record in a variable like this:
stateSpace = Modelica_LinearSystems2.ModelAnalysis.Linearize("<your-model>");
And then access the values on the command line via
stateSpace.A
stateSpace.B
stateSpace.C
stateSpace.D
For a nice html report you can also pass the operator record to one of the analysis functions:
Modelica_LinearSystems2.StateSpace.Analysis.analysis2.printSystem(stateSpace)
This creates the file systemAnalysis.html in your working directory, containing a nice visual presentation of your system.

Matlab can't find publish file. Where is it?

I have found the publish menu in Matlab. I would like to reference it in my code so as to save output ( without the commands) and all figures. I am using only figure1 throughout. I want to save in two formats pdf and doc.
Where do I put the publish command at the beginning or at the end of my code or putting it another way should I execute the publish commands at beginning? Matlab software keeps telling me it cannot find the file? Further I want to include all graphs. I have added snapnow after each plot.
I have used the following code both at beginning and end of my program. I want to include all graphs but no input commands only output. Options can be seen on edit publishing options window. I tried to start simple.
Code:
publish('c:\data\output.doc')
publish('c:\data\output.doc','doc')
Error message
Cannot find "c:\data\output.doc".
Thank you.
MM

matlab 'evidence removio': delete last shown command

I would like to remove whatever I just typed - and the last shown command - from the matlab console display. Needless to say, this would be ideal for pranksters (but this is of course strictly for academic purposes only). This is as far as I have gotten (based on this related answer):
hist = com.mathworks.mlservices.MLCommandHistoryServices.getSessionHistory; %get history
last = strjoin(cell(hist(end-2:end)),' '); %convert history to string
fprintf(repmat('\b',1,numel(last))); %replace characters of string with whitespace
However I can only access the last typed command (through the command history) - not the last displayed command (which would be ideal). Any ideas how to solve this?
Disclaimer: I don't advise doing this.
The MATLAB CommandWindow contents are stored as a CmdWinDocument, which is an extension of the Java PlainDocument type, and an interface of the Document type. The current window can be accessed using the command:
com.mathworks.mde.cmdwin.CmdWinDocument.getInstance
In theory, you should be able to remove text from the command window using something like:
doc = com.mathworks.mde.cmdwin.CmdWinDocument.getInstance
endpos = doc.getEndPosition
doc.remove(endpos-10,10)
which would, in theory, remove the last 10 character from the document. You may have to call the removeUpdate function as well. Obviously problems will be caused by the fact that these commands will be appended to the document during this process. I have not tested this, and you're likely to cause problems with internally stored offsets within the CmdWinDocument class, so use at your own risk.

Saving displayed values on the command window - MATLAB

I had a GUI to collect all data and to save it when I clicked a button. It displays a graph with all the data it collects. Unfortunately after collecting data for over 2 hours, it stopped. The data was 'precious'.
I don't know of any way to recover the data, but all of it was displayed in the command window. Is there a way I can retrieve all the data from the command window? Does MATLAB have a cache with all the values which I can access?
As long as matlab itself, (and the console in particular) is still responsive, you can just copy and paste everything out of the buffer into any text editor. Then, you can do a few minor edits, to get it into a text matlab input file, and you're good to go. Or if you've formatted your output correctly, you could put it into a text file, and read it in using readtable.
The key issue here, is how much memory do you have in your console window? I'm sure that can be tweaked up large, but did you bother to do that before you started running your GUI.
Note: In the future, always dump data to a log file as soon as it's collected! I've learned this lesson many times, the hard way.

is there a way to update workspace or variable editor values during running script without a break point

I would like to update variable editor at a predefined interval during a running script without having to use a break. Is this possible? I have a sim that runs for hours, I would like to be able to come back every hour and grab some values off a matrix in variable editor to play with in excel without interrupting running script. Any ideas would be greatly appreciated.
I think using assignin to copy your matrix to the base workspace should do exactly what you want. You'd need to manually reopen the variable in the editor to reflect the new data if it's changed.
If you wanted to get fancier, I imagine you could script evalin and openvar to do it for you, but I no longer have real Matlab to test with and Octave's fledgling GUI isn't there yet.