self_fun = @(x) (2.*x.*x-3*x+4+sin(x) +exp(x));deri = @(x) (4*x-3+cos(x) +exp(x));deri_1 = @(f,x,h) ((f(x+h)-f(x)) ./h);x = 0:0.1:1;x = x';y = deri(x);h0 = 0.001;y1 = deri_1(self_fun,x,h0);y2 = deri_2(self_fun,x,h0);plot(x,abs(y1-y),'-ro',x,abs(y2-y),'--b*');legend('error of deri 1','error of deri_2')xlabel('x (Step h is set as 0.001)');ylabel('Error of deriviation approximate functions');x0 = 0;d = [(2):(1):(14)]';h = 10.^(-d);yy = deri(x0)*ones(size(d));yy1 = deri_1(self_fun,x0,h);yy2 = deri_2(self_fun,x0,h);figure;plot(d,abs(yy1-yy),'-ro');legend('error of deri. 1');xlabel('Step h (at the point of x=0)');ylabel('Error of deriviation approximate function');此代码第一行明明已经定义了self_fun函数,但在octave运行中还是显示self_fun undefined,能解释并修改代码吗
时间: 2023-08-02 22:10:29 浏览: 169
根据你提供的代码,出现错误的原因是因为 `deri_2` 函数中引用了一个未定义的函数 `deri_1`。因此,你需要先定义 `deri_1` 函数,然后再运行 `deri_2` 函数。
你可以将 `deri_1` 函数定义如下:
```
deri_1 = @(f,x,h) ((f(x+h)-f(x)) ./h);
```
然后,你将 `deri_2` 函数修改为以下代码:
```
deri_2 = @(f,x,h) ((f(x+2*h)-2*f(x+h)+f(x)) ./(h.^2));
```
这样就可以正常运行代码了。
相关问题
self_fun = @(x) (2.*x.*x-3*x+4+sin(x) +exp(x)); octave中此函数创建时其中的.符号是什么意思,请详细说明
在Octave中,点符号"."用于表示元素级别的运算。在这个函数中,点符号被用来对数组中的每个元素进行运算。具体来说,2.*x.*x表示将x数组中的每个元素平方,然后乘以2,3*x表示将x数组中的每个元素乘以3,sin(x)表示将x数组中的每个元素求正弦值,而exp(x)表示将x数组中的每个元素求指数函数值。这种元素级别运算可以帮助我们快速地对数组进行数学运算,而无需使用循环。
self_fun = @(x) (2.*x.*x-3*x+4+sin(x) +exp(x));deri = @(x) (4*x-3+cos(x) +exp(x));deri_1 = @(f,x,h) ((f(x+h)-f(x)) ./h);x = 0:0.1:1;x = x';y = deri(x);h0 = 0.001;y1 = deri_1(self_fun,x,h0);y2 = deri_2(self_fun,x,h0);plot(x,abs(y1-y),'-ro',x,abs(y2-y),'--b*');legend('error of deri 1','error of deri_2')xlabel('x (Step h is set as 0.001)');ylabel('Error of deriviation approximate functions');x0 = 0;d = [(2):(1):(14)]';h = 10.^(-d);yy = deri(x0)*ones(size(d));yy1 = deri_1(self_fun,x0,h);yy2 = deri_2(self_fun,x0,h);figure;plot(d,abs(yy1-yy),'-ro');legend('error of deri. 1');xlabel('Step h (at the point of x=0)');ylabel('Error of deriviation approximate function');此代码在octave中运行时显示‘self_fun undefined’’
这个错误是因为在这段代码之前没有定义 `self_fun` 函数,所以 Octave 不知道如何解析它。你需要先定义 `self_fun` 函数,例如:
```
self_fun = @(x) (2.*x.*x-3*x+4+sin(x) +exp(x));
```
然后再运行这段代码。
阅读全文