2011-03-21 72 views
0

我在matlab中有这个非常简单的函数。Matlab - 输入参数未定义

function [f]=f1(a, xx) 
xx 
f = -exp(-a(1)*(xx(1)-1)^2 - a(2)*(xx(2)-1)^2) - exp(-a(1)*(xx(1)+1)^2 -a(2)*(xx(2)+1)^2); 

它确实打印了xx的值,然后抱怨“输入参数”xx“未定义”。 这怎么可能?这是怎么回事?

我用feval调用函数 这里是另一个不使用feval的例子。我得到错误 输入参数“xxx”未定义。请帮助我,我不知道发生了什么,我被卡住了。

我有: 函数[ANS] = F2(XXX) XXX %f2为1 /(1 + XXX^2),对于问题2 ANS =函数1 /(1 + XXX^2) ; 端

一个文件是neville.m

Q =威(X,XI,F2) %NEVILLE实现用于多项式插值尼维尔方法

NPLUS1 = MAX(大小(XI)); Q =零(nplus1); Q(:,1)= f2(xi);

对于i = 2:NPLUS1 对于j = 2:ⅰ Q(I,J)=((X - 十一(IJ))* Q(I,J-1) - (X - X(ⅰ ))* Q(i-1,j-1))/(x(i)-x(ij)); 结束; 结束;

另一个文件是neville_driver.m N = 6; aux = [0:6]; xi = -5 + 10 * aux/N;

Q = neville(4,xi,f2)

+1

你是怎么称呼你的功能的? – 2011-03-21 02:02:16

回答

0

xx是函数吗?因为语法xx(2)是一个函数调用。你的意思是xx*2

编辑:你的第一个示例代码正常工作对我来说:

feval(@f1,[2,2],[10,10]); 

打印XX,然后将结果。

EDIT2:和F1代码:

function [f]=f1(a, xx) 
xx 
f = -exp(-a(1)*(xx(1)-1)^2-a(2)*(xx(2)-1)^2)-exp(-a(1)*(xx(1)+1)^2-a(2)*(xx(2)+1)^2); 
end 
+0

不,xx是一个矢量 – Viktor 2011-03-21 02:33:27

+0

哦,是的,我的坏。我会尝试你的代码... – usul 2011-03-21 02:37:41

+0

也许我应该使用句柄,当我使用f2作为函数参数? – Viktor 2011-03-21 02:40:37

2

看起来你传递函数f2neville.m。尝试使用Q=neville(x,xi,@f2);另外,如果xi是一个向量,则应该在操作之前使用点(.)使用元素明智乘法(并将其提高到n次方),否则会给出错误。即,1/(1+xxx.^2)

+0

所以,这个想法是,在neville_driver.m我想使用f2作为fi,但在neville.m我想有一个参数的函数。我到底该怎么做? – Viktor 2011-03-21 02:46:23

+0

@viktor:什么是'fi'? – 2011-03-21 02:49:49

+0

fi是一个函数参数。在这种特殊情况下,我将f2传递给fi。 – Viktor 2011-03-21 02:51:32

相关问题