lary 发表于 2006-12-15 17:35

请问这是怎么回事啊?

??? Input argument 'f' is undefined.

Error in ==> d:\MATLAB6p5\work\NewtonMethod.m
On line 10 ==> dfx0=feval(diff(f),x0)

这是为什么啊?请大家帮帮忙啊!

运行的m文件如下:
function y=NewtonMethod(f,df,x0,x1,delta1,delta2)
x0=input('x0=');
x1=x0
N=40;
delta1=1*10^-6;
delta2=1*10^-5;
for k=2:N
x0=x1
fx0=feval('f',x0)
dfx0=feval(diff(f),x0)
if fx0<delta1
disp(['root=',num2str(x0)])
break
else
x1=x0-fx0/dfx0;
if abs(x1-x0)<delta2
disp(['root=',num2str(x1)])
break
end
end
fx1=feval('f',x1)
if fx1<delta1
disp(['root=',num2str(x1)])
break
end
end
if fx1>delta1 & abs(x1-x0)>delta2
disp(['NOT A APPROPRIATE INITIAL.'])
end

其中,f.m是
function y=f(x)
y=x^3-x-1;

[ 本帖最后由 xinyuxf 于 2007-7-22 16:04 编辑 ]

mulan 发表于 2006-12-15 17:56

你执行了f函数后并没有把结果赋给变量f
所以在下面使用f的时候matlab认为没有定义

lary 发表于 2006-12-15 18:25

那请问怎么把结果赋给变量f呢?

xjzuo 发表于 2006-12-15 19:57

回复

这似乎是一段相当糟糕的程序.
输入参量除了f外,似乎都是多余的.

stephenhope 发表于 2006-12-15 21:06

function y=NewtonMethod(f,df,x0,x1,delta1,delta2)

fx0=feval('f',x0)
dfx0=feval(diff(f),x0)

推测了下楼主也得程序,第一个参数核第二个参数是给出了f函数的句柄和它对应的导数的函数表达式,用于牛顿迭代中

至于feval的实用有一点问题
fx0=feval(f,x0)就行了

对于dfx0=feval(df,x0),是不是更好一些呢?

至于你怎么修改,其实就是吧对应的f和df   的函数写好

在你newton迭代中实用了

[ 本帖最后由 stephenhope 于 2006-12-15 22:51 编辑 ]

lary 发表于 2006-12-15 21:12

什么意思啊?
我该怎么改呢?

stephenhope 发表于 2006-12-15 22:56

楼主是保研了 提前修数值分析的嘛?
:-)

lary 发表于 2006-12-15 23:16

df   的函数怎么定义呢?我用m函数也是不行啊。
dfx0=feval(diff(f),x0)为什么不行呢?

stephenhope 发表于 2006-12-16 12:04

恩 一般你做的牛顿的法的时候 DF的函数形式一般都是自己求导算出来然后定义的

至于DIFF为什么不能求导,应该这么说 diff在对一个符号函数的时候可以使用求导的时候使用
通过你的代码看 f 是个函数的句柄,那么求导当然就报错了

函数的定义 使用关键字function
如果这些你都不知道还是先找本matlab书看下吧

其实做数值分析实验不一定非要用MATLAB的,虽然matlab在数值计算方面很强 目前也很流行
但是在解决实际的问题的时候 选择一个自己熟悉的语言来效率会更高

lary 发表于 2006-12-16 12:45

能推荐本书么?

jimin 发表于 2006-12-16 14:01

数值方法和MATLAB实现与应用

数值方法(MATLAB版第4版)/国外计算机科学教材系列
作者:(美)马修斯
这个中英文版都有

lary 发表于 2006-12-16 16:48

你们这些人,只顾评头论足,说这儿不好那儿不好,我问你们个问题,没有一个人回答,只说些不相关的话,奉劝各位以后回帖时候先看看别人的题目好不好啊!!!

lary 发表于 2006-12-16 16:49

我在书上面找不到,才来这里问的,看来还不如去图书馆看看

xjzuo 发表于 2006-12-16 22:16

回复

你没有听别人的意见进行修改,老想着问题一拿来,别人就帮你写好了,
这种思想本身就有问题,不要忘了这是讨论版;
要记住: 别人没有这个义务一定要帮你解决问题,你有你的事情,别人也很忙啊,
知道的会帮你提点意见,有时间的才能帮你修改程序.
这里不欢迎那种没有解决问题,就随便出言不逊的人!

stephenhope 发表于 2006-12-17 12:26

14楼的说的好啊!
页: [1]
查看完整版本: 请问这是怎么回事啊?