Matlab “需要帮助吗?”;试图访问;索引超出范围,因为numel(…)=1“;错误
我需要在Matlab上编写一个牛顿法代码,并在这里进行处理。但当我尝试使用它时,经过几次计算后,它会给出以下错误: 试图访问df(8);索引超出范围,因为 努梅尔(df)=1。 newtonmethod中的错误(第11行) tz=ti-(f(ti)/df(ti))强>Matlab “需要帮助吗?”;试图访问;索引超出范围,因为numel(…)=1“;错误,matlab,Matlab,我需要在Matlab上编写一个牛顿法代码,并在这里进行处理。但当我尝试使用它时,经过几次计算后,它会给出以下错误: 试图访问df(8);索引超出范围,因为 努梅尔(df)=1。 newtonmethod中的错误(第11行) tz=ti-(f(ti)/df(ti)) function newtonmethod(f) ti = 10; tz = 8; abstol = 0.0001; counter = 0; h=0.1; df=((f(ti+h)-f(ti))/h); while (abs(ti
function newtonmethod(f)
ti = 10;
tz = 8;
abstol = 0.0001;
counter = 0;
h=0.1;
df=((f(ti+h)-f(ti))/h);
while (abs(ti-tz)>abstol)
ti=tz;
tz=ti-(f(ti)/df(ti));
counter=counter+1;
end
ti=tz;
fprintf(tz,'counter=',counter )
end
我该怎么办?那是因为
df = (f(ti+h)-f(ti))/h;
计算单个值(在ti=10
),而不是定义函数
为了能够计算任何ti
的df=df(ti)
值,应将其定义为:
顺便问一下,为什么不用呢
同样的成本,您将获得一个数量级的更高的准确性…对我来说似乎是一个不错的交易:)谢谢!这解决了问题,但我现在又犯了一个错误:我能做什么<代码>使用fprintf无效文件标识符时出错。使用fopen生成有效的文件标识符。
在newtonmethod(第15行)fprintf(tz,'counter=',counter)中出错。
@prophero:是的,请阅读。命令fprintf
将数据写入文本文件。仅当您给出文件ID1
或2
时,它才会写入MATLAB的等效文件stdout
(命令窗口中的普通文本)或stderr
(命令窗口中的错误文本)。当您忽略文件ID时,它默认为stdout
。谢谢,我只是想将结果发送到命令窗口,但看起来我离学习matlab还有很长的路要走。
df = @(ti) ((f(ti+h)-f(ti))/h);
df = @(ti) (f(ti+h)-f(ti-h))/2/h;