Javascript 如何使用node.js创建一个函数来计算图形曲线下的面积?
我需要做一个函数,这样当我在命令行中输入函数f和系数a、b和n时,它可以计算面积 现在我有这个:Javascript 如何使用node.js创建一个函数来计算图形曲线下的面积?,javascript,node.js,Javascript,Node.js,我需要做一个函数,这样当我在命令行中输入函数f和系数a、b和n时,它可以计算面积 现在我有这个: module.exports = function (f,a,b,n,next) { parseFloat(a); parseFloat(b); parseInt(n); var h = (b-a)/n; var s = 0; var suma = function () { for (var i = 0; i <= n; i++) { var ximj = a+h*
module.exports = function (f,a,b,n,next) {
parseFloat(a);
parseFloat(b);
parseInt(n);
var h = (b-a)/n;
var s = 0;
var suma = function () {
for (var i = 0; i <= n; i++) {
var ximj = a+h*(i-1);
var xi = a+h*i;
var x = (ximj + xi)/2;
s += eval(f,x);
}
return s;
};
if (n<1) {
next(new Error("Koeficijent n je broj ekvidistantnih točaka."))
}
else next(null, {povrsina : function () {return h*suma();}}
);
我的提示文件如下所示:
var pov = require('./integrator.js');
var prompt = require('prompt');
prompt.get (['f','a','b','n'],function (err,koef) {
if (err) return console.log(err);
console.log("f: ",koef.f);
console.log("a: ",koef.a);
console.log("b: ",koef.b);
console.log("n: ",koef.n);
parseFloat(koef.a);
parseFloat(koef.b);
parseInt(koef.n);
pov(koef.f,koef.a,koef.b,koef.n,function(err,rj){
if (err)
console.log(err);
else
console.log("Povrsina ispod grafa funkcije f je " + rj.povrsina());
});
感谢您的帮助:)将读取字符串并对其求值。如果要使用参数x
计算函数f
,则只需编写f(x)
,而无需调用eval()
。这是因为,在JavaScript中,可以像数字、字符串等一样进行传递
在suma
中,尤其是行var ximj=a+h*(i-1)代码>,则for循环将h
乘以-1,然后乘以0,然后乘以1。我猜你的意思是var ximj=a+h*(I+1)
因为h
是差速器的宽度。但这只会产生很小的误差
正如Lends所写,您还需要更正Parse*
调用:
a = parseFloat(a);
b = parseFloat(b);
n = parseInt(n);
读取字符串并对其求值。如果要使用参数x
计算函数f
,则只需编写f(x)
,而无需调用eval()
。这是因为,在JavaScript中,可以像数字、字符串等一样进行传递
在suma
中,尤其是行var ximj=a+h*(i-1)代码>,则for循环将h
乘以-1,然后乘以0,然后乘以1。我猜你的意思是var ximj=a+h*(I+1)
因为h
是差速器的宽度。但这只会产生很小的误差
正如Lends所写,您还需要更正Parse*
调用:
a = parseFloat(a);
b = parseFloat(b);
n = parseInt(n);
应使用来计算字符串数学表达式,例如:
var math = require('mathjs');
var integral = function(f, a, b, n, next) {
a = parseFloat(a);
b = parseFloat(b);
n = parseInt(n);
var h = (b - a) / n;
var s = 0;
var suma = function() {
for (var i = 0; i <= n; i++) {
var ximj = a + h * (i - 1);
var xi = a + h * i;
var x = (ximj + xi) / 2;
s += math.eval(f, { x: x });
}
return s;
};
if (n < 1) {
next(new Error("Koeficijent n je broj ekvidistantnih točaka."))
} else {
next(null, { povrsina: function() { return h * suma(); } });
}
};
var f = 'x * x - 2 * x + 7';
var a = '2';
var b = '4';
var n = '10000';
integral(f, a, b, n, function(err, rj) {
if (err)
console.log(err);
else
console.log("Povrsina ispod grafa funkcije f je " + rj.povrsina());
});
/* output:
Povrsina ispod grafa funkcije f je 20.66806662000201
*/
var-math=require('mathjs');
var积分=函数(f,a,b,n,next){
a=浮点数(a);
b=浮点数(b);
n=parseInt(n);
var h=(b-a)/n;
var s=0;
var suma=函数(){
对于(var i=0;i您应该使用来计算字符串数学表达式,例如:
var math = require('mathjs');
var integral = function(f, a, b, n, next) {
a = parseFloat(a);
b = parseFloat(b);
n = parseInt(n);
var h = (b - a) / n;
var s = 0;
var suma = function() {
for (var i = 0; i <= n; i++) {
var ximj = a + h * (i - 1);
var xi = a + h * i;
var x = (ximj + xi) / 2;
s += math.eval(f, { x: x });
}
return s;
};
if (n < 1) {
next(new Error("Koeficijent n je broj ekvidistantnih točaka."))
} else {
next(null, { povrsina: function() { return h * suma(); } });
}
};
var f = 'x * x - 2 * x + 7';
var a = '2';
var b = '4';
var n = '10000';
integral(f, a, b, n, function(err, rj) {
if (err)
console.log(err);
else
console.log("Povrsina ispod grafa funkcije f je " + rj.povrsina());
});
/* output:
Povrsina ispod grafa funkcije f je 20.66806662000201
*/
var-math=require('mathjs');
var积分=函数(f,a,b,n,next){
a=浮点数(a);
b=浮点数(b);
n=parseInt(n);
var h=(b-a)/n;
var s=0;
var suma=函数(){
对于(var i=0;i首先,如果你想计算曲线下的面积,你需要提供一个上下限,否则答案总是无限的。我个人使用:
函数findArea(下限、上限、系数){
设下限=0
设上限=0
for(设i=0;i<系数.length;i++){
lower+=(系数[i]*Math.pow(lowerLimit,i+1))/(i+1)
上限+=(系数[i]*Math.pow(上限,i+1))/(i+1)
}
返回Math.abs(上-下)
}
如果你以a+bx+cx^2+dx^3…等格式输入两个数字作为限制和一个系数数组,你将得到正确的答案。例如,假设你有方程y=5+4x+3x^2+2x^3,你想找到x=1和x=3之间曲线下的面积,你可以这样调用这个函数,findArea(1,3,[5,4,3,2])
您将得到表示平方单位数的答案92
。请记住,只有当您正在计算的面积完全高于或完全低于x轴时,此方法才有效。如果您的面积穿过x轴,则需要分别计算上下面积!
您可以对照检查结果,但这应该适用于任何曲线。首先,如果要计算曲线下的面积,您需要提供一个x下限和x上限,否则答案将始终是无限的。我个人使用:
函数findArea(下限、上限、系数){
设下限=0
设上限=0
for(设i=0;i<系数.length;i++){
lower+=(系数[i]*Math.pow(lowerLimit,i+1))/(i+1)
上限+=(系数[i]*Math.pow(上限,i+1))/(i+1)
}
返回Math.abs(上-下)
}
如果你以a+bx+cx^2+dx^3…等格式输入两个数字作为限制和一个系数数组,你将得到正确的答案。例如,假设你有方程y=5+4x+3x^2+2x^3,你想找到x=1和x=3之间曲线下的面积,你可以这样调用这个函数,findArea(1,3,[5,4,3,2])
您将得到表示平方单位数的答案92
。请记住,只有当您正在计算的面积完全高于或完全低于x轴时,此方法才有效。如果您的面积穿过x轴,则需要分别计算上下面积!
您可以对照检查结果,但这应该适用于任何曲线。首先,您错误地使用了parseInt和parseFloat。这些函数不改变变量。它们只返回解析值。您必须像这样使用它们:a=parseFloat(a)
首先,您使用的parseInt和parseFloat是错误的。这些函数不改变变量。它们只返回解析后的值。您必须这样使用它们:a=parseFloat(a);
如果您想将当前函数参数保持为字符串,您可以执行(新函数(“x”,“return”+f))(x)
将其转换为函数并立即执行。我不允许使用JavaScript作为它自己的预处理器。询问者应该编写一个函数作为f
传递。如果f
字符串格式不正确怎么办?那你就完了。简单一点,只要不要使用eval
。如果你想保留当前的函数就可以了gument作为一个字符串,您可以使用(新函数(“x”,“return”+f))(x)
将其转换为函数并立即执行。我不允许使用JavaScript作为它自己的预处理器。