poster
2019-12-10, 20:30
我正在为辛普森规则编写Matlab程序,当程序到达left_simpson = Simpson(a,c,(e1)/2,level, level_max);时,我不断收到关于许多输出的错误left_simpson = Simpson(a,c,(e1)/2,level, level_max); settinf left_simpson到Simpson(a,c,(e1)/2,level, level_max); ?
function Simpson(a,b,e1,level, level_max) level = level + 1; h = b - a; c = (a+b)/2; one_simpson = h*(f(a) + 4*f(c) + f(b))/6; d = (a+c)/2; e = (c+b)/2; two_simpson = h*(f(a) + 4*f(d) + 2*f(c) + 4*f(e))/2; if level >= level_max disp('h') simpson_result = two_simpson; disp('maximum levels reached') disp(simpson_result); if abs(two_simpson - one_simpson) < 15*e1 simpson_result = two_simpson + (two_simpson - one_simpson)/15; else left_simpson = Simpson(a,c,(e1)/2,level, level_max); right_simpson = Simpson(c,b,(e1)/2,level, level_max); simpson_result = left_simpson + right_simpson; end end
回答:
您的函数语句(代码的第一行)未声明Simpson返回的内容。我不知道Matlab对这样的声明做了什么。我认为您应该重写Simpson以显式返回一个或多个值。请查看Matlab文档以了解如何执行此操作。
声明辛普森返回的内容后,您就可以避免“输出过多”的问题。
更多&回答... (https://stackoverflow.com/questions/2565313)
function Simpson(a,b,e1,level, level_max) level = level + 1; h = b - a; c = (a+b)/2; one_simpson = h*(f(a) + 4*f(c) + f(b))/6; d = (a+c)/2; e = (c+b)/2; two_simpson = h*(f(a) + 4*f(d) + 2*f(c) + 4*f(e))/2; if level >= level_max disp('h') simpson_result = two_simpson; disp('maximum levels reached') disp(simpson_result); if abs(two_simpson - one_simpson) < 15*e1 simpson_result = two_simpson + (two_simpson - one_simpson)/15; else left_simpson = Simpson(a,c,(e1)/2,level, level_max); right_simpson = Simpson(c,b,(e1)/2,level, level_max); simpson_result = left_simpson + right_simpson; end end
回答:
您的函数语句(代码的第一行)未声明Simpson返回的内容。我不知道Matlab对这样的声明做了什么。我认为您应该重写Simpson以显式返回一个或多个值。请查看Matlab文档以了解如何执行此操作。
声明辛普森返回的内容后,您就可以避免“输出过多”的问题。
更多&回答... (https://stackoverflow.com/questions/2565313)