声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1321|回复: 14

[编程技巧] 请问这是怎么回事啊?

[复制链接]
发表于 2006-12-15 17:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
??? 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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2006-12-15 17:56 | 显示全部楼层
你执行了f函数后并没有把结果赋给变量f
所以在下面使用f的时候matlab认为没有定义
 楼主| 发表于 2006-12-15 18:25 | 显示全部楼层
那请问怎么把结果赋给变量f呢?
发表于 2006-12-15 19:57 | 显示全部楼层

回复

这似乎是一段相当糟糕的程序.
输入参量除了f外,似乎都是多余的.
发表于 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 编辑 ]
 楼主| 发表于 2006-12-15 21:12 | 显示全部楼层
什么意思啊?
我该怎么改呢?
发表于 2006-12-15 22:56 | 显示全部楼层
楼主是保研了 提前修数值分析的嘛?
:-)
 楼主| 发表于 2006-12-15 23:16 | 显示全部楼层
df   的函数怎么定义呢?我用m函数也是不行啊。
dfx0=feval(diff(f),x0)  为什么不行呢?
发表于 2006-12-16 12:04 | 显示全部楼层
恩 一般你做的牛顿的法的时候 DF的函数形式一般都是自己求导算出来然后定义的

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

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

其实做数值分析实验不一定非要用MATLAB的,虽然matlab在数值计算方面很强 目前也很流行
但是在解决实际的问题的时候 选择一个自己熟悉的语言来效率会更高
 楼主| 发表于 2006-12-16 12:45 | 显示全部楼层
能推荐本书么?
发表于 2006-12-16 14:01 | 显示全部楼层
数值方法和MATLAB实现与应用

数值方法(MATLAB版第4版)/国外计算机科学教材系列
作者:(美)马修斯
这个中英文版都有
 楼主| 发表于 2006-12-16 16:48 | 显示全部楼层
你们这些人,只顾评头论足,说这儿不好那儿不好,我问你们个问题,没有一个人回答,只说些不相关的话,奉劝各位以后回帖时候先看看别人的题目好不好啊!!!
 楼主| 发表于 2006-12-16 16:49 | 显示全部楼层
我在书上面找不到,才来这里问的,看来还不如去图书馆看看
发表于 2006-12-16 22:16 | 显示全部楼层

回复

你没有听别人的意见进行修改,老想着问题一拿来,别人就帮你写好了,
这种思想本身就有问题,不要忘了这是讨论版;
要记住: 别人没有这个义务一定要帮你解决问题,你有你的事情,别人也很忙啊,
知道的会帮你提点意见,有时间的才能帮你修改程序.
这里不欢迎那种没有解决问题,就随便出言不逊的人!
发表于 2006-12-17 12:26 | 显示全部楼层
14楼的说的好啊!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-10-3 21:30 , Processed in 0.059868 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表