matlab中M文件调用错误

这个M文件我是在figure中generate的,可是在把它存了,所存文件名是aa.m,调用就不对了。。。高手麻烦看一下。
function createfigure(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6)
%CREATEFIGURE(X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5,X6,Y6)
% X1: vector of x data
% Y1: vector of y data
% X2: vector of x data
% Y2: vector of y data
% X3: vector of x data
% Y3: vector of y data
% X4: vector of x data
% Y4: vector of y data
% X5: vector of x data
% Y5: vector of y data
% X6: vector of x data
% Y6: vector of y data

% Auto-generated by MATLAB on 18-May-2009 11:51:47

%% Create figure
figure1 = figure(...
'FileName','C:\MATLAB7\work\untitled29.fig',...
'PaperPosition',[0.6345 6.345 20.3 15.23],...
'PaperSize',[20.98 29.68]);

%% Create axes
axes1 = axes('Parent',figure1);
axis(axes1,[0 120 0 10]);
hold(axes1,'all');

%% Create plot
plot1 = plot(...
x1,y1,...
'LineStyle','none',...
'Marker','o',...
'Parent',axes1,...
'DisplayName','data 1');

%% Create plot
plot2 = plot(...
x2,y2,...
'LineStyle','none',...
'Marker','o',...
'Parent',axes1,...
'DisplayName','data 2');

%% Create plot
plot3 = plot(...
x3,y3,...
'LineStyle','none',...
'Marker','o',...
'Parent',axes1,...
'DisplayName','data 3');

%% Create plot
plot4 = plot(...
x4,y4,...
'LineStyle','none',...
'Marker','o',...
'Parent',axes1,...
'DisplayName','data 4');

%% Create plot
plot5 = plot(...
x5,y5,...
'LineStyle','none',...
'Marker','o',...
'Parent',axes1,...
'DisplayName','data 5');

%% Create plot
plot6 = plot(...
x6,y6,...
'Color',[0 0.5 0],...
'Parent',axes1,...
'DisplayName',' shape-preserving');

%% Create legend
legend1 = legend(axes1,{'data 1','data 2',' shape-preserving','data 3','data 4','data 5'});
最后输入aa图没有画出来,只画出了坐标,命令窗返回的是:
>> aa
??? Input argument "x1" is undefined.

Error in ==> aa at 30
plot1 = plot(...

>>
好像还是不对,我把那些省略号补上也不行。。。 哪位高手再说一下哈,为什么由matlab在figure中generate的m文件都用不了啊?是不是我的操作问题呢?
我的意思是说用x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6替代省略号,保存文件名用createfigure.m其他的没改还是不行,输入后是
>> createfigure.m
??? The function, script, or class createfigure
cannot be indexed using {} or . indexing.

我认为回答应包括一下三个方面:

1. 关于文件名:
由于这个.m文件是用figure中generate的,注意到程序开始处有个“function”,所以createfigure是一个函数,而不是普通的.m脚本文件。而在调用的函数时使用的函数名实际上是文件名。所以无论是保存为默认的createfigure.m还是另存为aa.m都是可以的(函数codes不用做任何修改)。但是,通常我们都尽量保持函数体的名字和文件名相同,没有必要在这上面给自己找麻烦。

2. 关于函数调用:

2.1 调用时需不需要.m?
不需要,而且不可以要。
假设这个函数是以默认createfigure为文件名保存的,那么加上扩展名之后,在当前目录下应该有一个m文件叫createfigure.m,但是在调用它的时候是不要加.m的,MATLAB会分不清,因为比如类在调用成员变量时也要用到“.”的。所以才会有下面的错误报告:

>>createfigure.m
??? The function, script, or class createfigure
cannot be indexed using {} or . indexing.

人家说啦,函数(function),脚本(script)不让用“{}”和“.”。
MATLAB还担心你这createfigure是个类呢,所以还告诉你这个类可能也不能用“.”哦。实际你的createfigure根本就不是类,是函数(function)。
所以,调用.m文件,无论函数(function)还是脚本(script),都别带后缀名.m。

2.2 为什么aa也要报错?
假设这个函数是保存为aa.m的,那么以下错误又是怎么回事呢?

>> aa
??? Input argument "x1" is undefined.

Error in ==> aa at 30
plot1 = plot(...

这是因为这个function找你要输入变量,这次是找你要x1,因为它发现x1没有定义,不知所谓。其实是这里对aa的调用没有带任何输入参数的,所以电脑不知道你所谓的x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6这12个变量是什么。你要问的w实质问题就在这里。
很简单,这时你只用在调用aa的时候给它那12个变量就可以了。
当然,你在问题中没有给数据。这里我就随便给了,你根据自己的数据写x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6。

x1 = 0:120;
y1 = 0.050*x1;
x2 = x1;
y2 = 0.045*x1;
x3 = x1;
y3 = 0.040*x1;
x4 = x1;
y4 = 0.035*x1;
x5 = x1;
y5 = 0.030*x1;
x6 = x1;
y6 = 0.025*x1;

aa(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6);

这时应该不会有错了,当然你会觉得图怎么和你以前的完全不一样.(因为,数据不一样。)
这个时候你可以验证一下第1条,将函数的文件名改为createfigure.m。
在已经定义了x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6后调用:

createfigure(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6);

对吧?应该也没有问题了。

3. 关于省略号:
那完全是为了不让某行程序代码太长,用来另起一行,同时表示下面的一行是紧接着这行代码的,并且他们中间什么字符都没有。
想去掉“...”,就要把下一行代码拿上来,覆盖掉“...”,可以!
不去掉“...”,保持程序原来的样子,也可以!

答完收工~
若有不对,还请斧正。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-08-30
这是调用方式的问题,
在第一次运行时Q_P2是一个函数,
当第一次输入后,由于将Q_P2的属性变为了Q_P,它不再是一个函数,所以当第二次输入时,就没法识别Q_P2函数。
用下面的调用方式就行了
Q_P=Q_P2([5.515,0.4596,0;0.4596,1.838,0;0,0,0.880;],15);
第2个回答  2009-05-18
% createfigure(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6) 这是个函数,而且还有六对参数,在调用时候的时候需要你输入画图使用参数
x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6.

你加省略号干什么?
你可能没明白我的意思,举个例子
x=-2*pi:.1:2*pi;
y=sin(x);
plot(x,y);
绘图后再由matlab在figure中generate的m文件,默认保存函数名,然后运行createfigure(x,y)。
第3个回答  2009-05-18
还有你的保存文件名也要是createfigure.m
第4个回答  2009-05-22
存为createfigure.m试试??
相似回答