"Array indices must be positive integers or logical values"
"Array indices must be positive integers or logical values"
Problem Details and clues
%For this problem write a script file called NC.m that implements
%the Newton-Cotes method of integration for an arbitrary function f(x). It
%should take as inputs the function and the limits of integration [a: b] and
%output the value of the definite integral. Specifically, you should use the
%Trapezoid rule as presented in Equation (11.73)
function [f]= NC(a,b,fun) %newton-cotes
%a and b are limits of intergration
%setting it up
f(a)= fun(a); %y value for lower limit
f(b)= fun(b); %y value for upper limit
%the actual function
f= (b-a)*(f(a)+f(b))/2;
end
我做错了什么?当我输入时, [f]= NC(-3,0,fun) 并设置 fun= @(x)normpdf(x) 。它不断返回“数组索引必须是正整数或逻辑值”。有人可以对此有所启发吗?
问题是您尝试将 f(a)
分配给 a=0
,因此您混合了向量索引和值,以及将 f
用于两个不同的目的,一个作为函数 NC 的输出,一个作为 fun(x) 的值,这不是一个好主意。
相反,您可以在单独的变量中定义输出:
fa=fun(a);
fb=fun(n);
f=(b-a)*(fa+fb)/2;
或者直接写:f=(b-a)*(fun(a)+fun(b))/2;
问题出在对f(a)
和f(b)
的赋值上。
语法 f(x)
在 MATLAB 中有三种解释,这取决于 f
的类型:
- 使用严格的正整数索引(或逻辑索引)索引数组
f
x
- 使用变量
x
的值计算函数句柄 f
- 使用符号变量
x
. 以某种方式操纵符号函数f(x)
由于 MATLAB 的动态类型和默认双数组,MATLAB 将 f(a)
和 f(b)
的赋值解释为第 (1) 项:MATLAB 将 f
解释为一个双数组,并期望 a
和 b
是数组的有效索引。
那么,根据您的意图,对不带括号的变量符号(例如,fa
和 fb
)进行简单赋值即可解决您的问题。
Problem Details and clues
%For this problem write a script file called NC.m that implements
%the Newton-Cotes method of integration for an arbitrary function f(x). It
%should take as inputs the function and the limits of integration [a: b] and
%output the value of the definite integral. Specifically, you should use the
%Trapezoid rule as presented in Equation (11.73)
function [f]= NC(a,b,fun) %newton-cotes
%a and b are limits of intergration
%setting it up
f(a)= fun(a); %y value for lower limit
f(b)= fun(b); %y value for upper limit
%the actual function
f= (b-a)*(f(a)+f(b))/2;
end
我做错了什么?当我输入时, [f]= NC(-3,0,fun) 并设置 fun= @(x)normpdf(x) 。它不断返回“数组索引必须是正整数或逻辑值”。有人可以对此有所启发吗?
问题是您尝试将 f(a)
分配给 a=0
,因此您混合了向量索引和值,以及将 f
用于两个不同的目的,一个作为函数 NC 的输出,一个作为 fun(x) 的值,这不是一个好主意。
相反,您可以在单独的变量中定义输出:
fa=fun(a);
fb=fun(n);
f=(b-a)*(fa+fb)/2;
或者直接写:f=(b-a)*(fun(a)+fun(b))/2;
问题出在对f(a)
和f(b)
的赋值上。
语法 f(x)
在 MATLAB 中有三种解释,这取决于 f
的类型:
- 使用严格的正整数索引(或逻辑索引)索引数组
f
x
- 使用变量
x
的值计算函数句柄 - 使用符号变量
x
. 以某种方式操纵符号函数
f
f(x)
由于 MATLAB 的动态类型和默认双数组,MATLAB 将 f(a)
和 f(b)
的赋值解释为第 (1) 项:MATLAB 将 f
解释为一个双数组,并期望 a
和 b
是数组的有效索引。
那么,根据您的意图,对不带括号的变量符号(例如,fa
和 fb
)进行简单赋值即可解决您的问题。