matlab load data程序上写的load inoutdata 上面是数据,怎么把数据写上去

matlab中已经运算成功并且保存的结果,如何调用?_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
matlab中已经运算成功并且保存的结果,如何调用?
我有更好的答案
用load *.mat就行了。这样就可以把运算结果的数据下载到现在的工作空间了;*表示运算结果的文件。之后就直接输要的变量就行了
采纳率:22%
来自团队:
比如说:save B再用一个load命令即可调用:load B.mat回车,就把B调进工作空间了
为您推荐:
其他类似问题
您可能关注的内容
matlab的相关知识
等待您来回答苹果/安卓/wp
Ψ▄┳一大卫卍卐席尔瓦
Ψ▄┳一大卫卍卐席尔瓦
积分 19573, 距离下一级还需 12027 积分
权限: 自定义头衔, 签名中使用图片, 隐身, 设置帖子权限, 设置回复可见, 签名中使用代码
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发, 提升卡, 沉默卡, 千斤顶, 变色卡, 置顶卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 207 天连续签到: 1 天[LV.7]常住居民III
本帖最后由 fantuanxiaot 于
22:18 编辑
非常感谢blake_libo和faruto的源码,在他们的基础上启发改编完成
源码或者Wind的复权算法如有错误请提醒我
还有,这个例子显示除权的信息感觉有很大的缺失。
& && &&&量化板块支持分享重要代码、书籍资料(最好介绍详细) 、量化报告(最好介绍详细)、量化思想分享及提问(与量化或者编程软件、数理统计相关)、如果介绍详细或者有原创代码分享,有重大奖励!绝不手软!另外,发帖分享idea或者资料、转载代码,一般都会有奖励!但是不支持与量化无关的灌水帖!
22:06:29 上传
22:06:26 上传
22:06:22 上传
22:06:18 上传
源代码文件如下:
本帖隐藏的内容
(669.35 KB)
22:07:23 上传
本帖隐藏的内容
%%&&一个基于股价复盘价的改编
%%&&直接提取了blake_libo函数
%%&&数据和读取数据来自blake_libo的方法
%%&&Modified by fantuanxiaot
clc
clear all
close all
format compact
%%&&by&&fantuanxiaot
%&&只读形式进行打开(read)
%&&这应该是通达信特有的数据处理格式
file_fid=fopen('FT_SZ300100.day','r');
%&&指向开头
frewind(file_fid)
%&&文件的属性
dir_nature=dir('FT_SZ300100.day');
%&&读取8行751列的数据进去
%&&时间从130923
%&&dir_nature.bytes/32=751
%&&数据总共有8*751个
data=fread(file_fid,[8 dir_nature.bytes/32],'uint32');
frewind(file_fid)
%&&将文件的指针指向第20个字节
fseek(file_fid,20,'bof');
%&&成交量是float型数据,每隔28个数读取4个数
data(6,:)=fread(file_fid,dir_nature.bytes/32,'float=&long',28);&&
%&&开盘价,最高价,最低价,收盘价
%&&成交额&&
data(2:5,:)=data(2:5,:)/100;&&
data(6,:)=round(data(6,:)/10);&&
%&&这里做了变动,结果一样
%&&对日期进行转换
%&&data(1,:)=datenum(fix(data(1,:)/10000),fix(mod(data(1,:)/100,100)),mod(data(1,:),100));&&
data(1,:)=datenum(num2str(data(1,:)'),'yyyymmdd')';&&
fclose(file_fid);
stockdata=fints(data(1,:)',data([2:7],:)',{'OPEN','HIGH','LOW','CLOSE',...
& & 'AMOUNT','VOLUME'},'D','SZ300100');
%%&&以上将数据进行了处理
%&&提取一段时间的数据就像这样fetch(myFts,'01-Jan-2001',[],'03-Jan-2001',[],1,'d')
%&&fetch(myFts,'01-Jan-2001','11:00','03-Jan-2001','12:00',1,'d')
FromDate = '04-Jan-2011';
ToDate = '20-Feb-2012';
stock=fetch(stockdata,FromDate,[],ToDate,[],1,'d');
%&&载入除权数据
load('FT_Dividend_Data.mat')
%&&一些数据处理
txtRightout(2:end,3:8)=num2cell(numRightout);
%&&寻找除权的股价时间
index=strcmp('300100',txtRightout(:,2));
%&&得到了除权的信息dividend_information
dividend_information=txtRightout(index,:);
dividend_information=[txtRightout(1,:);dividend_information];
%%&&下面进行向前的复权处理
%%&&方法是基于wind的涨跌幅法则
Date=stockdata.
stock=fts2mat(stockdata);
OPEN=stock(:,1);
HIGH=stock(:,2);
LOW=stock(:,3);
CLOSE=stock(:,4);
Date=datestr(Date,'yyyymmdd');
%&&数据的处理方法来自blake_libo的贡献
%&&再转化为数字
Date=str2num(Date);
%&&除权日期
chuquanriqi=cell2mat(dividend_information(2:end,3));
%&&派现金
paixianjin=cell2mat(dividend_information(2:end,5));
%&&配股价&&
peigujia=cell2mat(dividend_information(2:end,6));
%&&送股权
songzhuangu=cell2mat(dividend_information(2:end,7));
%&&配股数
peigushu=cell2mat(dividend_information(2:end,8));
%%&&向前的复权处理
%&&除权位置
location=ismember(Date,chuquanriqi);
numlocation=1:length(Date);
%&&将数据分开多少部分
split_num=sum(location)+1;
%&&得到了位置
location_num=numlocation(location);
%&&计算位置
caculate_num=location_num-1;
%&&得到计算复权分开的位置区间
location_forward=[1 location_caculate_num length(Date)]';
Close_yesterday=CLOSE(caculate_num);
Close_T=Close_
%&&昨日收盘价的运算
for i=1:length(Close_yesterday)
& & %&&红利
& & hongli=paixianjin(i)/10;
& & %&&送股
& & songgu=songzhuangu(i)/10;
& & %&&配股数
& & peigus=peigushu(i)/10;
& & %&&配股价
& & peiguj=peigujia(i)/10;
& & %&&流通股份比例
& & liutong=peigus+
& & Close_yesterday(i)=(Close_yesterday(i)-hongli+peiguj*liutong)/(1+liutong);
end
%&&得到了比例
close_ratio=Close_T./Close_
close_ratio_cum=cumprod(close_ratio);
%&&向前的复权价格处理
Foward_CLOSE=[];
Foward_OPEN=[];
Foward_LOW=[];
Foward_HIGH=[];
for i=1:length(location_forward)
& & lo_num=location_forward(i,:);
& & CLOSE_Forward=CLOSE(lo_num(1):lo_num(2));
& & OPEN_Forward=OPEN(lo_num(1):lo_num(2));
& & LOW_Forward=LOW(lo_num(1):lo_num(2));
& & HIGH_Forward=HIGH(lo_num(1):lo_num(2));
& & if i&length(location_forward)
& && &&&CLOSE_Forward=CLOSE_Forward/close_ratio_cum(end+1-i);
& && &&&Foward_CLOSE=[Foward_CLOSE;CLOSE_Forward];
& && &&&OPEN_Forward=OPEN_Forward/close_ratio_cum(end+1-i);
& && &&&Foward_OPEN=[Foward_OPEN;OPEN_Forward];
& && &&&LOW_Forward=LOW_Forward/close_ratio_cum(end+1-i);
& && &&&Foward_LOW=[Foward_LOW;LOW_Forward];
& && &&&HIGH_Forward=HIGH_Forward/close_ratio_cum(end+1-i);
& && &&&Foward_HIGH=[Foward_HIGH;HIGH_Forward];
& & end
& & if i==length(location_forward)
& && &&&Foward_CLOSE=[Foward_CLOSE;CLOSE_Forward];
& && &&&Foward_OPEN=[Foward_OPEN;OPEN_Forward];
& && &&&Foward_LOW=[Foward_LOW;LOW_Forward];
& && &&&Foward_HIGH=[Foward_HIGH;HIGH_Forward];
& & end
end
%%&&作图
FT_Candle(Foward_HIGH(1:200),Foward_LOW(1:200),Foward_CLOSE(1:200),...
& & Foward_OPEN(1:200),'m',stockdata.dates(1:200),17)
title('基于SZ300100的复权价格处理','fontname','华文楷体','fontsize',16)
FT_MACD(Foward_CLOSE(1:200),9,26,12)
title('基于SZ300100的MACD显示','fontname','华文楷体','fontsize',16)
%%&&以上作图显示貌似还有一些除权的信息统计不全复制代码function FT_Candle(hi, lo, cl, op, color, dates, dateform)
%%&&Modified by fantuanxiaot
%%&&模仿faruto进行修改
%%&&以下是一些例子
%& &load disney
%& &FT_Candle(dis_HIGH(end-20:end),dis_LOW(end-20:end),dis_CLOSE(end-20:end),dis_OPEN(end-20:end))
%& &FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end))
%& &FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m')
%& &FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m',dis_nv.dates(end-200:end))
%& &FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m',datestr(dis_nv.dates(end-200:end))
%& &FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m',dis_nv.dates(end-200:end),2)
%& &FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m',datestr(dis_nv.dates(end-200:end)),2)
%& &FT_Candle(dis_HIGH(end-200:end),dis_LOW(end-200:end),dis_CLOSE(end-200:end),dis_OPEN(end-200:end),'m',datestr(dis_nv.dates(end-200:end)),17)
%& &FT_Candle(dis_HIGH,dis_LOW,dis_CLOSE,dis_OPEN,'m',datestr(dis_nv.dates),17)
%& &FT_Candle(dis_HIGH(end-400:end),dis_LOW(end-400:end),dis_CLOSE(end-400:end),dis_OPEN(end-400:end),'m',datestr(dis_nv.dates(end-400:end)),17)
%%&&以上是一些例子
%& &CANDLE Candlestick chart.
%& &CANDLE(HI, LO, CL, OP)
%& &CANDLE(HI, LO, CL, OP, COLOR, DATES, DATEFORM)
%& &Optional Inputs: COLOR, DATES, DATEFORM
%& &Inputs:
%& && && &HI - Column vector of high prices of a security.
%
%& && && &LO - Column vector of low prices of a security.
%
%& && && &CL - Column vector of closing prices of a security.
%
%& && && &OP - Column vector of opening prices of a security.
%& &Optional Inputs:
%& && &COLOR - Three element color vector, [R G B], or a string specifying the
%& && && && &&&color name. MATLAB supplies a default color if none is specified
%& && && && &&&or if it is empty. The default color differs depending on the
%& && && && &&&background color of the figure window. See COLORSPEC in the
%& && && && &&&MATLAB Reference Guide for color names.
%& && &DATES - Column vector of dates for user specified X-axis tick
%& && && && &&&labels.
%
%& &DATEFORM - A scalar dictating the format of the date string tick labels.
%& && && && &&&See DATEAXIS for details on the date string formats.
%
%& &See also BOLLING, HIGHLOW, MOVAVG, POINTFIG.
%& && &&&Copyright
The MathWorks, Inc.
%& && &&&$Revision: 1.9.2.4 [& && &&&DISCUZ_CODE_4& && &&&]&&$Date:
21:10:22 $
if nargin & 5 || isempty(color)
& & color ='k';
end
if nargin & 4
& & error('finance:candle:missingInputs', ...
& && &&&'Missing high, low, closing, or opening data.')
end
if size(hi, 2) & 1 || size(lo, 2) & 1 || size(cl, 2) & 1 || size(op, 2) & 1
& & error('finance:candle:invalidInputs', ...
& && &&&'Please specify input data as column vectors.')
elseif size(hi, 1) ~= size(lo, 1) || size(lo, 1) ~= size(cl, 1) || size(cl, 1) ~= size(op, 1),
& & error('finance:candle:mismatchInputData', ...
& && &&&'Number of data must be consistent across inputs.');
end
if nargin == 6 || nargin == 7
& & %&&补充了一下
& & dates=datenum(dates);
& & if size(dates, 2) ~= 1
& && &&&error('finance:candle:invalidDateSize', ...
& && && && &'DATES must be a column vector.');
& & elseif size(dates, 1) ~= size(hi, 1)
& && &&&error('finance:candle:mismatchDatesData', ...
& && && && &'Number of dates must correspond to number of data.');
& & end
end
%%&&以下作图进行了修改
backg='g';
backr='r';
% Determine if current plot is held or not
if ishold
& & hldflag = 1;
else
& & hldflag = 0;
end
m = length(hi(:));
figure(1)
scrsz=get(0,'ScreenSize');
set(figure(1),'Position',[scrsz(3)*0.1 scrsz(4)*0.25 scrsz(3)*0.95 scrsz(4)]*0.7,...
& & 'color','w')
movegui(figure(1),'center')
% Need to pad all inputs with NaN's to leave spaces between day data
tmp =
nanpad = tmp(1, ones(1, m));
hilo = [hi'; lo'; nanpad];
index = 1:m;
indhilo = index(ones(3, 1), :);
plot(indhilo(:), hilo(:), 'color', color)
clpad = [cl(:)';nanpad];
clpad = clpad(:)';
oppad = [op(:)'; nanpad];
oppad = oppad(:)';
% Create boundaries for filled regions
xbottom = index - 0.25;
xbotpad = [xbottom(:)'; nanpad];
xbotpad = xbotpad(:)';
xtop = index + 0.25;
xtoppad = [xtop(:)'; nanpad];
xtoppad = xtoppad(:)';
ybottom = min(clpad, oppad);
ytop = max(clpad, oppad);
% Plot lines between high and low price for day
hold on
% z-data used to stagger layering. This prevents renderer layering issues.
zdata =
zdata(~isnan(zdata)) = .01;
zdata2 = zdata + .01;
% Plot box representing closing and opening price span
% If the opening price is less than the close, box is empty
i = find(oppad(:) &= clpad(:));
boxes(i) = patch([xbotpad(i); xbotpad(i); xtoppad(i); xtoppad(i)],...
& & [ytop(i); ybottom(i); ybottom(i); ytop(i)], ...
& & [zdata(i); zdata(i); zdata(i); zdata(i)], ...
& & backr, 'edgecolor', 'r');
% If the opening price is greater than the close, box is filled
% If the opening price is greater than the close, box is filled
i = find(oppad(:) & clpad(:));
boxes(i) = patch([xbotpad(i); xbotpad(i); xtoppad(i); xtoppad(i)],...
& & [ytop(i); ybottom(i); ybottom(i); ytop(i)],...
& & [zdata2(i); zdata2(i); zdata2(i); zdata2(i)], ...
& & backg, 'edgecolor', 'g'); %#ok
% set tag for use with timeser.m
setappdata(gca, 'plottype', 'Candle ')& && &&&% set tag for use with timeser.m
[Highest,hind] = max(hi);
[Lowest,lind] = min(lo);
% If original figure was not held, turn hold off
if ~hldflag
& & hold off
end
%[EOF]
if nargin & 6
& & text(hind,Highest*1.001,['\leftarrow',num2str(Highest)],'fontname','Times','fontsize',14);
& & text(lind,Lowest*0.999,['\leftarrow',num2str(Lowest)],'fontname','Times','fontsize',14);
end
if nargin &=6
& & dateset =
& & text(dateset(hind),Highest*1.001,['\leftarrow',num2str(Highest)],'fontname','Times','fontsize',14);
& & text(dateset(lind),Lowest*0.999,['\leftarrow',num2str(Lowest)],'fontname','Times','fontsize',14);
end
% Add support for providing dates.
% Add support for providing dates.
if nargin == 6 || nargin == 7
& & dateset =
& & hcdl_vl = findobj(gca, 'Type', 'line');
& & hcdl_bx = findobj(gca, 'Type', 'patch');
& & % The CANDLE plot is made up of patch(es) and a line.&&hcdl_vl is the
& & % handle t it's actually only 1 line object.
& & % hcdl_bx contains the handle(s) of the patch object(s) that make up the
& & % empty and filled boxes.&&The XData of those objects need to be changed
& & % to dates so that ZOOM works correctly.
& & line_xdata = get(hcdl_vl, 'XData');
& & set(hcdl_vl, 'XData', dateset(line_xdata));
& & for pidx=1:length(hcdl_bx),& &% Need to do loop since there can be 1 or 2 patches.
& && &&&patch_xdata = get(hcdl_bx(pidx), 'XData');
& && &&&offset = [-0.25*ones(2, size(patch_xdata, 2)); ...
& && && && &+0.25*ones(2, size(patch_xdata, 2))] * min(abs(diff(dateset)));
& && &&&set(hcdl_bx(pidx), 'XData', dateset(round(patch_xdata))+offset);
& & end
& & % Change XTickLabel to date string format.
& & if ~exist('dateform', 'var') || isempty(dateform)
& && &&&datetick('x',20);
& & else
& && &&&datetick('x', dateform);
& & end
end
set(gca,'fontname','Times','fontsize',10)
hold off
%[EOF]复制代码function [DIFF, DEA, MACDbar] = FT_MACD(Close,short,long,Mlen)
%&&Last Modified by blake
%&&Last Modified by fantuanxiaot
%&&MACD指标计算
%&&几个具体的例子
%&&FT_MACD
%&&FT_MACD(10*rand(100,1),9,26,12)
%&&[DIFF, DEA, MACDbar] = FT_MACD
%&&[DIFF, DEA, MACDbar] = FT_MACD(10*rand(100,1),9,26,12)
%&&返回MACD值,如果无需返回则画图
%&&Email:blake_
%&&Input:
%& && & Close: 输入的序列
%& && & short: 短周期
%& && & long: 长周期
%& && & Mlen: 均线周期
%& && & handle: axes句柄
%&&Output:
%& && & MA_value: 计算的均线返回值
%&&程序实现测试所使用的MATLAB版本:MATLAB R)
%&&如果程序在您本机运行不了,请首先检查您MATLAB的版本号,推荐使用较新版本的MATLAB。
%%&&输入输出参数设置
if nargin==3
& & Mlen = 9;
end
if nargin==2
& & long = 26;
& & Mlen = 9;
end
if nargin==1
& & short = 12;
& & long = 26;
& & Mlen = 9;
end
if nargin==0
& & Close=10*rand(100,1);
& & short = 12;
& & long = 26;
& & Mlen = 9;
end
%%&&计算
DIFF = FT_EMA(Close, short)-FT_EMA(Close, long);
DEA = FT_EMA(DIFF, Mlen);
DIFF(1:29) = 0;
DEA(1:29) = 0;
MACDbar = 2*(DIFF-DEA);
MACDbar(MACDbar==0) =
DIFF(DIFF==0) =
DEA(DEA==0) =
MACDbar = MACDbar';
DEA = DEA';
DIFF = DIFF';
%%&&Plot
if nargout == 0
& & figure(2)
& & scrsz=get(0,'ScreenSize');
& & set(figure(2),'Position',[scrsz(3)*0.1 scrsz(4)*0.25 scrsz(3)*0.95 scrsz(4)]*0.7,...
& && &&&'color','w')
& & movegui(figure(2),'center')
& &
& & pind = find(MACDbar &= 0);
& & nind = find(MACDbar & 0);
& & h1 = bar(pind,MACDbar(pind),'r','EdgeColor','r','LineWidth',0.1);
& & h2 = bar(nind,MACDbar(nind),'g','EdgeColor','g','LineWidth',0.1);
& & plot(DIFF,'k');
& & plot(DEA,'b');
& & legend('MACD','MACD','DIFF','DEA')
& & set(gca,'fontname','华文楷体','fontsize',12)
& & current_axes=
& & strx=get(current_axes,'XTickLabel');
& & stry=get(current_axes,'YTickLabel');
& & x=get(current_axes,'XTick');
& & y=get(current_axes,'YTick');
& & yl=ylim(current_axes);
& & xl=xlim(current_axes);
& & %&&句柄设置
& & set(current_axes,'XTickLabel',[]);
& & set(current_axes,'YTickLabel',[]);
& & %&&使之倾斜
& & xtoy=zeros(1,length(x))+yl(1)-(max(yl)-min(yl))/30;
& & ytox=zeros(1,length(y))+xl(1)-(max(xl)-min(xl))/30;
& & text(x,xtoy,strx,'rotation',-20,'HorizontalAlignment'...
& && &&&,'center','FontName','times','FontSize',10,'backg','c');
& & text(ytox,y,stry,'rotation',-40,'HorizontalAlignment'...
& && &&&,'center','FontName','times','FontSize',12,'backg','c');
& & title('MACD/DEA/DIFF figure','fontname','华文楷体','fontsize',16)
end
end
function EMAvalue = FT_EMA(Price, len, coef)
%&&指数移动平均线 函数
%&&Last Modified by LiYang
%&&Email:
%&&程序实现测试所使用的MATLAB版本:MATLAB R)
%&&如果程序在您本机运行不了,请首先检查您MATLAB的版本号,推荐使用较新版本的MATLAB。
%%&&输入参数检查
error(nargchk(1, 3, nargin))
if nargin & 3
& & coef = [];
end
if nargin& 2
& & len = 2;
end
%%&&指定EMA系数
if isempty(coef)
& & k = 2/(len + 1);
else
& & k =
end
%%&&计算EMAvalue
EMAvalue = zeros(length(Price), 1);
EMAvalue(1:len-1) = Price(1:len-1);
for i = len:length(Price)& &
& & EMAvalue(i) = k*( Price(i)-EMAvalue(i-1) ) + EMAvalue(i-1);& &
function MA_value = FT_MA(Price, MAlen)
%&&移动平均线
%&&by liyang
%&&
%&&Input:
%& && & Price: 输入的序列
%& && & MAlen: 均线周期
%&&Output:
%& && & MA_value: 计算的均线返回值
%%&&输入参数检查
if nargin & 2
& & % 默认均线周期为5(5分钟线、5日线)
& & MAlen = 5;
end
error(nargchk(1, 2, nargin));
if MAlen &= 0
& & error('The length of MA must &= 1');
end
%%&&初始化
len = numel(Price);
MA_value = zeros(len, 1);
Price = Price(:);
%%&&计算均线
MA_value(1:MAlen-1) = Price(1:MAlen-1);
for i = MAlen:len
& &&&MA_value(i) = sum( Price(i-MAlen+1:i) )/MA
end
end复制代码
支持楼主:、
购买后,论坛将奖励 10 元论坛资金给楼主,以表示您对TA发好贴的支持
载入中......
发表于121楼
继续定期。。。。
发表于122楼
对于财务数据的获取更加感兴趣一点,不知版本怎么实现?
发表于75楼
作为练习可以,但从数据准确性上来说,我觉得通达信的应更靠谱。
奖励积极上传好的资料
总评分:&经验 + 300&
论坛币 + 105&
学术水平 + 24&
热心指数 + 24&
信用等级 + 24&
本帖被以下文库推荐
& |主题: 1297, 订阅: 596
& |主题: 93, 订阅: 71
& |主题: 78, 订阅: 34
回帖奖励 +8
这个好,学习下
总评分:&经验 + 5&
回帖奖励 +8
暂时没有时间看,先收藏,过几天再好好琢磨!
总评分:&经验 + 5&
论坛币 + 5&
Ψ▄┳一大卫卍卐席尔瓦
离歌レ笑 发表于
暂时没有时间看,先收藏,过几天再好好琢磨!
回帖奖励 +8
先回复看明细
总评分:&经验 + 5&
论坛币 + 1&
回帖奖励 +8
跟各位学习来了
总评分:&论坛币 + 1&
学术水平 + 1&
热心指数 + 1&
信用等级 + 1&
总评分:&论坛币 + 5&
学习一下。
总评分:&经验 + 10&
论坛币 + 3&
需要仔细看看。
总评分:&经验 + 7&
论坛币 + 3&
回帖奖励 +8
好东西,回头学习下~
初级学术勋章
初级学术勋章
初级热心勋章
初级热心勋章
中级热心勋章
中级热心勋章
中级学术勋章
中级学术勋章
初级信用勋章
初级信用勋章
中级信用勋章
中级信用勋章
高级热心勋章
高级热心勋章
高级学术勋章
高级学术勋章
特级学术勋章
特级学术勋章
特级热心勋章
高级热心勋章
高级信用勋章
高级信用勋章
特级信用勋章
高级信用勋章
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师在编写一个程序时,经常需要从外部读入数据,或者将程序运行的结果保存为文件。MATLAB使用多种格式打开和保存数据。本章将要介绍 MATLAB中文件的读写和数据的导入导出。 13.1 数据基本操作   本节介绍基本的数据操作,包括工作区的保存、导入和文件打开。 13.1.1 文件的存储   MATLAB支持工作区的保存。用户可以将工作区或工作区中的变量以文件的形式保存,以备在需要时再次导入。保存工作区可以通过菜单进行,也可以通过命令窗口进行。   1. 保存整个工作区   选择File菜单中的Save Workspace As…命令,或者单击工作区浏览器工具栏中的Save,可以将工作区中的变量保存为MAT文件。   2. 保存工作区中的变量   在工作区浏览器中,右击需要保存的变量名,选择Save As…,将该变量保存为MAT文件。   3. 利用save命令保存   该命令可以保存工作区,或工作区中任何指定文件。该命令的调用格式如下: ● save:将工作区中的所有变量保存在当前工作区中的文件中,文件名为 matlab.mat,MAT文件可以通过load函数再次导入工作区,MAT函数可以被不同的机器导入,甚至可以通过其他的程序调用。 ● save('filename'):将工作区中的所有变量保存为文件,文件名由filename指定。如果filename中包含路径,则将文件保存在相应目录下,否则默认路径为当前路径。 ● save('filename', 'var1', 'var2', ...):保存指定的变量在 filename 指定的文件中。 ● save('filename', '-struct', 's'):保存结构体s中全部域作为单独的变量。 ● save('filename', '-struct', 's', 'f1', 'f2', ...):保存结构体s中的指定变量。 ● save('-regexp', expr1, expr2, ...):通过正则表达式指定待保存的变量需满足的条件。 ● save('..., 'format'),指定保存文件的格式,格式可以为MAT文件、ASCII文件等。 13.1.2 数据导入   MATLAB中导入数据通常由函数load实现,该函数的用法如下: ● load:如果matlab.mat文件存在,导入matlab.mat中的所有变量,如果不存在,则返回error。 ● load filename:将filename中的全部变量导入到工作区中。 ● load filename X Y Z ...:将filename中的变量X、Y、Z等导入到工作区中,如果是MAT文件,在指定变量时可以使用通配符“*”。 ● load filename -regexp expr1 expr2 ...:通过正则表达式指定需要导入的变量。 ● load -ascii filename:无论输入文件名是否包含有扩展名,将其以ASCII格式导入;如果指定的文件不是数字文本,则返回error。 ● load -mat filename:无论输入文件名是否包含有扩展名,将其以mat格式导入;如果指定的文件不是MAT文件,则返回error。 例13-1 将文件matlab.map中的变量导入到工作区中。   首先应用命令whos –file查看该文件中的内容:   && whos -file matlab.mat    Name&&&&&&&&&&&&&&&&& Size&&&&&&&&&&&&& Bytes Class    A&&&&&&&&&&&&&&&&&&& 2x3&&&&&&&&&&&&& 48 double array    I_q&&&&&&&&&&&&&&&& 415x552x3&&&&&&&&&&& 687240 uint8 array    ans&&&&&&&&&&&&&&& 1x3&&&&&&&&&&&&&& 24 double array    num_of_cluster&&&&&& 1x1&&&&&&&&&&&&&& 8 double array   Grand total is 687250 elements using 687320 bytes   将该文件中的变量导入到工作区中:   && load matlab.mat   该命令执行后,可以在工作区浏览器中看见这些变量,如图13-1所示。 图13-1 导入变量后的工作区视图   接下来用户可以访问这些变量。   && num_of_cluster   num_of_cluster =   &&&& 3   MATLAB中,另一个导入数据的常用函数为importdata,该函数的用法如下: ● importdata('filename'),将filename中的数据导入到工作区中; ● A = importdata('filename'),将filename中的数据导入到工作区中,并保存为变量A; ● importdata('filename','delimiter'),将filename中的数据导入到工作区中,以delimiter指定的符号作为分隔符; 例13-2 从文件中导入数据。   && imported_data = importdata('matlab.mat')   imported_data =   &&&&&&&&&&&&&& ans: [1.8 1.6534]   &&&&&&&&&&&&&&&& A: [2x3 double]   &&&&&&&&&&&&&& I_q: [415x552x3 uint8]   &&& num_of_cluster: 3   与load函数不同,importdata将文件中的数据以结构体的方式导入到工作区中。 13.1.3 文件的打开   MATLAB中可以使用open命令打开各种格式的文件,MATLAB自动根据文件的扩展名选择相应的编辑器。 && 需要注意的是open('filename.mat')和load('filename.mat')的不同,前者将filename.mat以结构体的方式打开在工作区中,后者将文件中的变量导入到工作区中,如果需要访问其中的内容,需要以不同的格式进行。 && 例13-3 open与load的比较。   && clear   && A = magic(3);   && B = rand(3);   && save   Saving to: matlab.mat   && clear   && load('matlab.mat')   && A   A =   &&&& 8&&&& 1&&&& 6   &&&& 3&&&& 5&&&& 7   &&&& 4&&&& 9&&&& 2   && B   B =   &&& 0.9501&&& 0.4860&&& 0.4565   &&& 0.2311&&& 0.8913&&& 0.0185   &&& 0.6068&&& 0.7621&&& 0.8214   && clear   && open('matlab.mat')   ans =   &&& A: [3x3 double]   &&& B: [3x3 double]   && struc1=   && struc1.A   ans =   &&&& 8&&&& 1&&&& 6   &&&& 3&&&& 5&&&& 7   &&&& 4&&&& 9&&&& 2   && struc1.B   ans =   &&& 0.9501&&& 0.4860&&& 0.4565   &&& 0.2311&&& 0.8913&&& 0.0185   &&& 0.6068&&& 0.7621&&& 0.8214 13.2 文本文件的读写   在上一节中介绍的函数和命令主要用于读写mat文件,而在应用中,需要读写更多格式的文件,如文本文件、word文件、xml文件、xls文件、图像文件和音视频文件等。本节介绍文本文件(txt)的读写。其他文件的读写,用户可以参考MATLAB帮助文档。   MATLAB中实现文本文件读写的函数如表13-1所示。 表13-1 MATLAB中文本文件读写函数 函&&& 数 功&&& 能 csvread 读入以逗号分隔的数据 csvwrite 将数据写入文件,数据间以逗号分隔 dlmread 将以 ASCII 码分隔的数值数据读入到矩阵中 dlmwrite 将矩阵数据写入到文件中,以 ASCII 分隔 textread 从文本文件中读入数据,将结果分别保存 textscan 从文本文件中读入数据,将结果保存为单元数组      下面详细介绍这些函数。   1. csvread、csvwrite   csvread函数的调用格式如下: ● M = csvread('filename'),将文件filename中的数据读入,并且保存为M,filename中只能包含数字,并且数字之间以逗号分 隔。M是一个数组,行数与filename的行数相同,列数为filename列的最大值,对于元素不足的行,以0补充。 ● M = csvread('filename', row, col),读取文件filename中的数据,起始行为row,起始列为col,需要注意的是,此时的行列从0开始。 ● M = csvread('filename', row, col, range),读取文件filename 中的数据,起始行为 row,起始列为col,读取的数据由数组 range 指定,range 的格式为:[R1 C1 R2 C2],其中R1、C1为读取区域左上角的行和列,R2、C2为读取区域右下角的行和列。   csvwrite 函数的调用格式如下: ● csvwrite('filename',M),将数组M中的数据保存为文件filename,数据间以逗号分隔。 ● csvwrite('filename',M,row,col),将数组M中的指定数据保存在文件中,数据由参数 row和col指定,保存row和col右下角的数据。 ● csvwrite写入数据时每一行以换行符结束。另外,该函数不返回任何值。   这两个函数的应用见下面的例子。 例13-4 函数csvread和csvwrite 的应用。   本例首先将MATLAB的图标转化为灰度图,将数据存储在文本文件中,再将其部分读出,显示为图形。   编写M文件,命名为immatlab.m,内容为:   % the example of functions csvread and csvwrite   I_MATLAB= imread('D:\matlab.bmp');&&&& % read in the image   I_MATLAB= rgb2gray(I_matlab);&&&&&&&&& % convert the image to gray image   figure,imshow(I_matlab,'InitialMagnification',100); % show the image   csvwrite('D:\matlab.txt',I_matlab);&&&& % write the data into a text file   sub_MATLAB= csvread('D:\matlab.txt',100,100);% read in part of the data   sub_MATLAB= uint8(sub_matlab);&&&&&&&& % convert the data to uint8   figure,imshow(sub_matlab,'InitialMagnification',100);&&&&& % show the new image   在命令窗口中运行该脚本,输出图形如图13-2所示。 (a)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (b) 图13-2 例13-3 的运行结果   该例中涉及到了少量的图像处理内容,超出本书的范围,感兴趣的读者可以查阅 MATLAB帮助文档中关于Image Processing Toolbox的介绍。   2. dlmread、dlmwrite(个人觉得这个比较好用)  dlmread函数用于从文档中读入数据,其功能强于csvread。dlmread的调用格式如下: ● M = dlmread('filename') ● M = dlmread('filename', delimiter) ● M = dlmread('filename', delimiter, R, C) ● M = dlmread('filename', delimiter, range)   其中参数delimiter用于指定文件中的分隔符,其他参数的意义与csvread函数中参数的意义相同,这里不再赘述。dlmread函数与csvread函数的差别在于,dlmread函数在读入数据时可以指定分隔符,不指定时默认分隔符为逗号。   dlmwrite函数用于向文档中写入数据,其功能强于csvwrite函数。dlmwrite函数的调用格式为: ● dlmwrite('filename', M),将矩阵M的数据写入文件filename中,以逗号分隔。 ● dlmwrite('filename', M, 'D'),将矩阵M的数据写入文件filename中,采用指定的分隔符分隔数据,如果需要tab键,可以用“\t”指定。 ● dlmwrite('filename', M, 'D', R, C),指定写入数据的起始位置。 ● dlmwrite('filename', M, attribute1, value1, attribute2, value2, ...),指定任意数目的参数,可以指定的参数见下表。 ● dlmwrite('filename', M, '-append'),如果filename指定的文件存在,在文件后面写入数据,不指定时则覆盖原文件。 ● dlmwrite('filename', M, '-append', attribute-value list),叙写文件,并指定参数。 ● dlmwrite 函数的可用参数如表13-2所示。
表13-2 dlmwrite函数的可用参数 参 数 名 功&&& 能 delimiter 用于指定分隔符 newline 用于指定换行符,可以选择“pc”或者“unix” roffset 行偏差,指定文件第一行的位置,roffset 的基数为 0 coffset 列偏差,指定文件第一列的位置,coffset 的基数为 0 precision 指定精确度,可以指定精确维数,或者采用 c 语言的格式,如“.5f”      3. textread,textscan   当文件的格式已知时,可以利用textread函数和textscan函数读入。这里只介绍这两个函数应用的实例。   例13-5 通过%读入文件,按照原有格式读取。 文件的内容为:   Sally&&& Level1 12.34 45 Yes 在命令窗口中输入:   && [names, types, x, y, answer] = textread('D:\mat.txt','%s %s %f %d %s', 1) 得到结果为:   names =   &&& 'Sally'   types =   &&& 'Level1'   x =   && 12.3400   y =   &&& 45   answer =   &&& 'Yes'         例13-6 函数csvread和csvwrite的应用   Sally Level1 12.34 45 1.23e10 inf NaN Yes   Joe Level2 23.54 60 9e19 -inf 0.001 No   Bill Level3 34.90 12 2e5 10 100 No   && fid = fopen('D:\mat.txt');   && C = textscan(fid, '%s %s ?2 ? %u %f %f %s');   && fclose(fid); 13.3 低级文件I/O   本节介绍一些基本的文件操作,这些操作如表13-3所示。 表13-3 MATLAB的基本文件操作 函&&& 数 功&&& 能 &&&& fclose 关闭打开的文件 &&&& feof 判断是否为文件结尾 &&&& ferror 文件输入输出中的错误查找 &&&& fgetl 读入一行,忽略换行符 &&&& fgets 读入一行,直到换行符 &&&& fopen 打开文件,或者获取打开文件的信息 &&&& fprintf 格式化输入数据到文件 &&&& fread 从文件中读取二进制数据 &&&& frewind 将文件的位置指针移至文件开头位置 &&&& fscanf 格式化读入 &&&& fseek 设置文件位置指针 &&&& ftell 文件位置指针 &&&& fwrite 向文件中写入数据      下面重点介绍函数fprintf。该函数的调用格式如下:   count = fprintf(fid, format, A, ...),该语句将矩阵A及后面其他参数中数字的实部以 format 指定的格式写入到fid指定的文件中,返回写入数据的字节数。   上面语句中,参数format由%开头,共可由4个部分组成,分别如下: ● 标记(flag),为可选部分。 ● 宽度和精度指示,为可选部分。 ● 类型标志符,为可选部分。 ● 转换字符,为必需部分。   1. 标记   标记用于控制输出的对齐方式,可以选择的内容如表13-4所示。 表13-4 标记的可选内容 函&&& 数 功&&& 能 示&&& 例   负号(-) &&&&&&&&&& 在参数左侧进行判别 &&&& %-5.2d   加号(+) &&&&&&&&&& 在数字前添加符号 &&&& %+5.2d   空格 &&&&&&&&&& 在数字前插入空格 &&&& % 5.2d   0 &&&&&&&&&& 在数字前插入0 &&&& .2d   2. 宽度和精度指示   用户可以通过数字指定输出数字的宽度及精度,格式如下: ● o,指定数字的宽度; ● %6.2f,指定数字的宽度及精度; ● %.2f,指定数字的精度。 例13-6 fprintf函数宽度和精度指示符示例。   在命令窗口中输入如下命令:   && file_type = fopen('D:\type.txt','w');   && fprintf(file_h, '%6.2f .8f\n', 1.2, -43.3);   && fprintf(file_h, 'o f\n', 1.2, -43.3);   && fprintf(file_h, '%.2f %.8f\n', 1.2, -43.3);   && fclose(file_h)   ans =   &&&& 0   打开该文件,其内容为:    1.20 -43.   1.200000&& -43.300000   1.20 -43.   从上述结果可以看出宽度和精度控制的效果。   3. 转换字符   转换字符用于指定输出的符号,可以选择的内容如表13-5所示。 表13-5 格式化输出的标志符及意义 标 志 符 意&&& 义 &&&& %c 输出单个字符 &&&& %d 输出有符号十进制数 &&&& %e 采用指数格式输出,采用小写字母 e,如:3.1415e+00 (续表)&& 标 志 符 意&&& 义 &&&& %E 采用指数格式输出,采用大写字母 E,如:3.1415E+00 &&&& %f 以定点数的格式输出 &&&& %g %e及%f的更紧凑的格式,不显示数字中无效的 0 &&&& %G 与%g相同,但是使用大写字母E &&&& %i 有符号十进制数 &&&& %o 无符号八进制数 &&&& %s 输出字符串 &&&& %u 无符号十进制数 &&&& %x 十六进制数(使用小写字母a-f) &&&& %X 十六进制数(使用大写字母A-F)      其中 %o、%u、%x、%X支持使用子类型,具体情况这里不再赘述。格式化输出标志符的效果见下面的例子。 例13-7 fprintf 格式化输出示例。   && x = 0:.1:1;   && y = [x; exp(x)];   && fid = fopen('exp.txt', 'wt');   && fprintf(fid, '%6.2f .8f\n', y);   && fclose(fid)   ans =   &&&& 0   显示该文件:   && type exp.txt    0.00&& 1.    0.10&& 1.   …    0.90&& 2.    1.00&& 2.   例13-9 利用 fprintf 函数在显示器上输出字符串   && fprintf(1,'It''s Friday.\n')   It's Friday.   在该例中,利用1表示显示器,并且用两个单引号显示单引号,使用\n进行换行。在格式化输出中,这类符号称为转义符。MATLAB中的常用转义符如表13-6所示。       表13-6 MATLAB中的常用转义符 转 义 符 功&&& 能 && \b&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 退格 && \f&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 表格填充 && \n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&  换行符 && \r            回车 && \t            tab && \\           && 反斜线 && \'' 或 ''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 单引号 && %%         &&&& 百分号 13.4 利用界面工具导入数据   除前面几节介绍的函数外,也可以通过界面工具将数据导入到工作区中。本节介绍利用工作区浏览器中的工具导入数据。   选择工作区浏览器工具栏中的“Import Data”,选择待导入的文件,这里我们选择了一个文本文件,其内容为逗号分隔的数字,打开窗口如图13-3所示。
阅读(...) 评论() &

我要回帖

更多关于 matlab load excel 的文章

 

随机推荐