Well, this time I wrote the code by myself.
clc; clear all; close all;
Fig=figure;
aviobj=avifile('sphere.avi');
for k=1:6
n=2^k-1;
[x y z]=sphere(n);
c = hadamard(2^k);
surf(x, y, z, c)
colormap([1 1 0; 0 1 1]);
axis off; axis equal;
F=getframe(Fig);
for m=1:15
aviobj=addframe(aviobj, F);
end
end
for k=5:-1:1
n=2^k-1;
[x y z]=sphere(n);
c = hadamard(2^k);
surf(x, y, z, c)
colormap([1 1 0; 0 1 1]);
axis off; axis equal;
F=getframe(Fig);
for m=1:15
aviobj=addframe(aviobj, F);
end
end
close(Fig)
aviobj = close(aviobj);
MATLAB applications, tutorials, examples, tricks, resources,...and a little bit of everything I learned ...
Tuesday, June 30, 2009
Saturday, June 27, 2009
Pictures of magic matrix (50x50)
Plotmatrix: This one is 5x5
area:
bar:
comet:
compass:
contour:
contourf:
image:
imagesc:
loglog:
mesh:
pcolor:
plot:
polar:
ribbon:
semilogx
semilogy
spy
stairs
stem3
stem
surf
Friday, June 26, 2009
avi 'Movie' created by avifile function
The code used to create this 'movie':
t = linspace(0,2.5*pi,40);
fact = 10*sin(t);fig=figure;aviobj = avifile('example.avi')
[x,y,z] = peaks;
for k=1:length(fact)
h = surf(x,y,fact(k)*z);
axis([-3 3 -3 3 -80 80])
axis off
caxis([-90 90])
F = getframe(fig);
aviobj = addframe(aviobj,F);
endclose(fig)aviobj = close(aviobj);
The code above was copied from HERE .
Sunday, June 21, 2009
Matlab: Remove the NaN elements
Recently I got a very long column of data and it contains lots of NaN. I found the finite function very useful to help me remove all the NaN elements. Also it can remove the Inf elements. For example:
we get :
I'm using R2008a version and I got a warning like this:
Warning: FINITE is obsolete and will be removed in future versions. Use ISFINITE instead.
C1=[0 1 2 3 NaN 4 5 6 NaN 7 Inf 8 Inf 9];
C2=C1(finite(C1));
we get :
C2=[0 1 2 3 4 5 6 7 8 9]
I'm using R2008a version and I got a warning like this:
Warning: FINITE is obsolete and will be removed in future versions. Use ISFINITE instead.
Thursday, June 18, 2009
xlsread
Today I wrote a small piece to read data from xls files. Each file has several sheets and I only need one single column from each sheet. And at the end, I concatenated the columns to make a very very long colmn.
clc; clear all; close all;
O51=xlsread('TX2005.xls',1,'E1:E8760');
O52=xlsread('TX2005.xls',2,'E1:E8760');
O53=xlsread('TX2005.xls',3,'E1:E8760');
O54=xlsread('TX2005.xls',4,'E1:E8760');
O55=xlsread('TX2005.xls',5,'E1:E8760');
% O56=xlsread('NJ2005.xls',6,'E1:E8760');
% O57=xlsread('NJ2005.xls',7,'E1:E8760');
% O58=xlsread('NJ2005.xls',8,'E1:E8760');
O61=xlsread('TX2006.xls',1,'E1:E8760');
O62=xlsread('TX2006.xls',2,'E1:E8760');
O63=xlsread('TX2006.xls',3,'E1:E8760');
O64=xlsread('TX2006.xls',4,'E1:E8760');
O65=xlsread('TX2006.xls',5,'E1:E8760');
O66=xlsread('TX2006.xls',6,'E1:E8760');
O67=xlsread('TX2006.xls',7,'E1:E8760');
O68=xlsread('TX2006.xls',7,'E1:E8760');
O69=xlsread('TX2006.xls',7,'E1:E8760');
O71=xlsread('TX2007.xls',1,'E1:E8760');
O72=xlsread('TX2007.xls',2,'E1:E8760');
O73=xlsread('TX2007.xls',3,'E1:E8760');
O74=xlsread('TX2007.xls',4,'E1:E8760');
O75=xlsread('TX2007.xls',5,'E1:E8760');
O76=xlsread('TX2007.xls',6,'E1:E8760');
O77=xlsread('TX2007.xls',7,'E1:E8760');
O78=xlsread('TX2007.xls',4,'E1:E8760');
O79=xlsread('TX2007.xls',5,'E1:E8760');
O710=xlsread('TX2007.xls',6,'E1:E8760');
O711=xlsread('TX2007.xls',7,'E1:E8760');
O712=xlsread('TX2007.xls',7,'E1:E8760');
TXHourly=[O51;O52;O53;O54;O55;O61;O62;O63;O64;O65;O66;O67;O68;O69;O71;O72;O73;O74;O75;O76;O77;O78;O79;O710;O711;O712];
clc; clear all; close all;
O51=xlsread('TX2005.xls',1,'E1:E8760');
O52=xlsread('TX2005.xls',2,'E1:E8760');
O53=xlsread('TX2005.xls',3,'E1:E8760');
O54=xlsread('TX2005.xls',4,'E1:E8760');
O55=xlsread('TX2005.xls',5,'E1:E8760');
% O56=xlsread('NJ2005.xls',6,'E1:E8760');
% O57=xlsread('NJ2005.xls',7,'E1:E8760');
% O58=xlsread('NJ2005.xls',8,'E1:E8760');
O61=xlsread('TX2006.xls',1,'E1:E8760');
O62=xlsread('TX2006.xls',2,'E1:E8760');
O63=xlsread('TX2006.xls',3,'E1:E8760');
O64=xlsread('TX2006.xls',4,'E1:E8760');
O65=xlsread('TX2006.xls',5,'E1:E8760');
O66=xlsread('TX2006.xls',6,'E1:E8760');
O67=xlsread('TX2006.xls',7,'E1:E8760');
O68=xlsread('TX2006.xls',7,'E1:E8760');
O69=xlsread('TX2006.xls',7,'E1:E8760');
O71=xlsread('TX2007.xls',1,'E1:E8760');
O72=xlsread('TX2007.xls',2,'E1:E8760');
O73=xlsread('TX2007.xls',3,'E1:E8760');
O74=xlsread('TX2007.xls',4,'E1:E8760');
O75=xlsread('TX2007.xls',5,'E1:E8760');
O76=xlsread('TX2007.xls',6,'E1:E8760');
O77=xlsread('TX2007.xls',7,'E1:E8760');
O78=xlsread('TX2007.xls',4,'E1:E8760');
O79=xlsread('TX2007.xls',5,'E1:E8760');
O710=xlsread('TX2007.xls',6,'E1:E8760');
O711=xlsread('TX2007.xls',7,'E1:E8760');
O712=xlsread('TX2007.xls',7,'E1:E8760');
TXHourly=[O51;O52;O53;O54;O55;O61;O62;O63;O64;O65;O66;O67;O68;O69;O71;O72;O73;O74;O75;O76;O77;O78;O79;O710;O711;O712];
Wednesday, June 10, 2009
2nd version of the epa ozone data code
%This program runs faster than the 1st version
%The data output is in a better form, no cell arrays are involved.
%When the data record is not a number but a string, it converts that record into NaN. In the 1st version, it onverts that into 0.
%This program loads a series of file of ozone data
clear all; close all; clc;
[TXSt TXCo TXSi]=textread('TXSites.txt','%n %n %n','delimiter','|');
[NJSt NJCo NJSi]=textread('NJSites.txt','%n %n %n','delimiter','|');
[LASt LACo LASi]=textread('LASites.txt','%n %n %n','delimiter','|');
FN=textread('filenumber.txt','%s');
TXData=[];NJData=[];LAData=[];%define arrays
for i=1: 161
i
[St Co Si Da Le]=textread(FN{i},'%*s %*s %n %n %n %*s %*s %*s %*s %*s %n %*s %s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s','delimiter','|');
[r c]=size(St);
for j=1:r
if (ismember(St(j), TXSt))&&(ismember(Co(j), TXCo))&&(ismember(Si(j),TXSi))
TXData=[TXData; [St(j), Co(j), Si(j), Da(j), str2double(Le(j))*1000]];
else if (ismember(St(j), NJSt))&&(ismember(Co(j), NJCo))&&(ismember(Si(j),NJSi))
NJData=[NJData; [St(j), Co(j), Si(j), Da(j), str2double(Le(j))*1000]];
else if (ismember(St(j), LASt))&&(ismember(Co(j), LACo))&&(ismember(Si(j),LASi))
LAData=[LAData; [St(j), Co(j), Si(j), Da(j), str2double(Le(j))*1000]];
end
end
end
end
end
%The data output is in a better form, no cell arrays are involved.
%When the data record is not a number but a string, it converts that record into NaN. In the 1st version, it onverts that into 0.
%This program loads a series of file of ozone data
clear all; close all; clc;
[TXSt TXCo TXSi]=textread('TXSites.txt','%n %n %n','delimiter','|');
[NJSt NJCo NJSi]=textread('NJSites.txt','%n %n %n','delimiter','|');
[LASt LACo LASi]=textread('LASites.txt','%n %n %n','delimiter','|');
FN=textread('filenumber.txt','%s');
TXData=[];NJData=[];LAData=[];%define arrays
for i=1: 161
i
[St Co Si Da Le]=textread(FN{i},'%*s %*s %n %n %n %*s %*s %*s %*s %*s %n %*s %s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s','delimiter','|');
[r c]=size(St);
for j=1:r
if (ismember(St(j), TXSt))&&(ismember(Co(j), TXCo))&&(ismember(Si(j),TXSi))
TXData=[TXData; [St(j), Co(j), Si(j), Da(j), str2double(Le(j))*1000]];
else if (ismember(St(j), NJSt))&&(ismember(Co(j), NJCo))&&(ismember(Si(j),NJSi))
NJData=[NJData; [St(j), Co(j), Si(j), Da(j), str2double(Le(j))*1000]];
else if (ismember(St(j), LASt))&&(ismember(Co(j), LACo))&&(ismember(Si(j),LASi))
LAData=[LAData; [St(j), Co(j), Si(j), Da(j), str2double(Le(j))*1000]];
end
end
end
end
end
The first code used to fetch the epa ozone data
%This program loads a series of file of ozone data
clear all; close all; clc;
TXSites=textread('TXSites.txt','%s');
NJSites=textread('NJSites.txt','%s');
LASites=textread('LASites.txt','%s');
year='2006';
NofF='161'; %number of total files
US='_'; %underscore
LQ='('; %lefrquote
RQ=')'; %rightquote
SF='.txt'; %surfix
n=textread('number.txt','%s'); %read 001, 002,003 ...
FN=strcat(year,US,n,LQ,NofF,RQ,SF);%generate FileName
State=[];County=[];Site=[];Date=[];Time=[];Level=[]; %define arrays
TXData=[];NJData=[];LAData=[];%define arrays
for i=1: 161;
FID=fopen(char(FN(i)));
A=textscan(FID,'%*s %*s %s %s %s %*s %*s %*s %*s %*s %n %s %n %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s... %*s %*s %*s %*s','delimiter','|');
State=A{1,1};
County=A{1,2};
Site=A{1,3};
Date=A{1,4};
Time=A{1,5};
Level=A{1,6};
[r c]=size(State);
for j=1:r
ID=strcat(State(j),County(j),Site(j));
if ismember(ID, TXSites)
TXData=[TXData; [State(j), County(j), Site(j), Date(j), Time(j), Level(j)]];
else if ismember(ID, NJSites)
NJData=[NJData; [State(j), County(j), Site(j), Date(j), Time(j), Level(j)]];
else if ismember(ID, LASites)
LAData=[LAData; [State(j), County(j), Site(j), Date(j), Time(j), Level(j)]];
end
end
end
end
end
beep;
clear all; close all; clc;
TXSites=textread('TXSites.txt','%s');
NJSites=textread('NJSites.txt','%s');
LASites=textread('LASites.txt','%s');
year='2006';
NofF='161'; %number of total files
US='_'; %underscore
LQ='('; %lefrquote
RQ=')'; %rightquote
SF='.txt'; %surfix
n=textread('number.txt','%s'); %read 001, 002,003 ...
FN=strcat(year,US,n,LQ,NofF,RQ,SF);%generate FileName
State=[];County=[];Site=[];Date=[];Time=[];Level=[]; %define arrays
TXData=[];NJData=[];LAData=[];%define arrays
for i=1: 161;
FID=fopen(char(FN(i)));
A=textscan(FID,'%*s %*s %s %s %s %*s %*s %*s %*s %*s %n %s %n %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s... %*s %*s %*s %*s','delimiter','|');
State=A{1,1};
County=A{1,2};
Site=A{1,3};
Date=A{1,4};
Time=A{1,5};
Level=A{1,6};
[r c]=size(State);
for j=1:r
ID=strcat(State(j),County(j),Site(j));
if ismember(ID, TXSites)
TXData=[TXData; [State(j), County(j), Site(j), Date(j), Time(j), Level(j)]];
else if ismember(ID, NJSites)
NJData=[NJData; [State(j), County(j), Site(j), Date(j), Time(j), Level(j)]];
else if ismember(ID, LASites)
LAData=[LAData; [State(j), County(j), Site(j), Date(j), Time(j), Level(j)]];
end
end
end
end
end
beep;
Make your code run faster
1) Don't use loop whenever possible. Very likely there will be a function that can do the job that you want to do by using loops.
2) Stay away from cell array whenever possible. I don't understand the details, but handling cell array will take much more time than handling numbers.
3)Use faster CPU. But to my experience (though I am not quite experienced), Matlab will not use all the CPUs to do the work, even if you use a multi core cmputer.
2) Stay away from cell array whenever possible. I don't understand the details, but handling cell array will take much more time than handling numbers.
3)Use faster CPU. But to my experience (though I am not quite experienced), Matlab will not use all the CPUs to do the work, even if you use a multi core cmputer.
Use Matlab to edit sounds, images and videos
imread and imwrite
wavread and wavwrite
video? I don't know. I am a newbie!
wavread and wavwrite
video? I don't know. I am a newbie!
a small trick
When you don't exactly remember the command, you can use Tab key to help you find it out.
For example, you can try this: in command window, input mag and then press the Tab key. See?
This can also help you find some related functions and commands.
For example, you can try this: in command window, input mag and then press the Tab key. See?
This can also help you find some related functions and commands.
Good Resources
The best resource i found is the help command. The second best resource is Google! Yeah!
Dealing with huge data file
Recently I downloaded a huge text file, which is larger than 1GB...
The Notepad and Excel can't fully open that text file for me. Even Matlab can't do that for me. There's always memory overflow. Then I googled a lot and found that Matlab can only handle a certain size of memories. It won't help if you increase the RAM or the page file size on your computer.
After struggling a few days on that, my solution end up like this:
Use a file splitter (such as TextMaster) to split the text file into small pieces first. I set each piece contains 50,000 rows because Excel can open about 65,000 rows.
Then read the first piece, get the info I need and put them aside, then go and read the second pieces. For loop was used to let me open each and every file.
The Notepad and Excel can't fully open that text file for me. Even Matlab can't do that for me. There's always memory overflow. Then I googled a lot and found that Matlab can only handle a certain size of memories. It won't help if you increase the RAM or the page file size on your computer.
After struggling a few days on that, my solution end up like this:
Use a file splitter (such as TextMaster) to split the text file into small pieces first. I set each piece contains 50,000 rows because Excel can open about 65,000 rows.
Then read the first piece, get the info I need and put them aside, then go and read the second pieces. For loop was used to let me open each and every file.
Find the best way to do your job
Although Matlab is believed (at least by myself) can do everything, usually the most efficient method to get your job done is combing something else with it. Human intelligence will always play the most important role.
Here's my own experience. I need to read data from a series of file with the name as:
ABC_1(100).txt
ABC_2(100).txt
.
.
ABC_100(100).txt
It took me a lot of time to write a piece of code that can generate the file names in Matlab and then read the files one by one. Actually what I could have done is just manually input these file names into a text file and then read the file names from it. That may look like a dumb method to you, but in fact, it may take much less time for me.
Here's my own experience. I need to read data from a series of file with the name as:
ABC_1(100).txt
ABC_2(100).txt
.
.
ABC_100(100).txt
It took me a lot of time to write a piece of code that can generate the file names in Matlab and then read the files one by one. Actually what I could have done is just manually input these file names into a text file and then read the file names from it. That may look like a dumb method to you, but in fact, it may take much less time for me.
Matlab Basics : dealing with arrays
Matlab is so powerful at handling arrays. It can generate lots of different kind of arrays, take one or some of specific elements in array and change the value of the elements. Since the data and files saved in computer are all basically 0 and 1, I guess that every file in the computer can be interpreted as certain kind of array, and thus can be accessed and edited by Matlab. (Of course, it's my GUESS.)
How to generate array using Matlab?
mauanlly input: A1=[1 NaN 3; 4 NaN 6; 7 NaN 9] % NaN means Not a Number.
use functions:
A2=magic(3) % magic array
A3=zeros(3) % all elements are0
A3=ones(3) % all elements are 1
How to generate array using Matlab?
mauanlly input: A1=[1 NaN 3; 4 NaN 6; 7 NaN 9] % NaN means Not a Number.
use functions:
A2=magic(3) % magic array
A3=zeros(3) % all elements are0
A3=ones(3) % all elements are 1
Subscribe to:
Posts (Atom)
my-alpine and docker-compose.yml
``` version: '1' services: man: build: . image: my-alpine:latest ``` Dockerfile: ``` FROM alpine:latest ENV PYTH...
-
It took me a while to figure out how to insert a space in Mathtype equations. This is especially useful when you write an equation with mult...
-
Recently I read post from Dr. Doug Hull's blog: http://blogs.mathworks.com/videos/2009/10/23/basics-volume-visualization-19-defining-s...
-
To get the slope of a pair of x and y, usually I first plot the curve and then add the trend line. Actually there are two functions i...