Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab “需要帮助吗?”;试图访问;索引超出范围,因为numel(…)=1“;错误_Matlab - Fatal编程技术网

Matlab “需要帮助吗?”;试图访问;索引超出范围,因为numel(…)=1“;错误

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

我需要在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-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
将数据写入文本文件。仅当您给出文件ID
1
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;