Эй, у меня есть программа на клене, которая выполняет метод деления пополам, и мне нужно преобразовать ее в C ++.Я пытался преобразовать его в соответствии с тем, что говорилось в справке по генерации кода на форумах по клену, но оно продолжало выбрасывать ошибки.Буду признателен за помощь в этом.Спасибо,
Вот код для клена
Используйте метод деления пополам для решения следующей математической задачи: a.наименьший положительный корень уравнения
f(x):=evalf(1/x-evalf(Pi)*cos(evalf(Pi)*x));
с дельтой = 10 ^ -5 и eps = 10 ^ -6
plot(f(x),x=.05..10.0);
Из приведенного выше графика можно сделать вывод, что данное уравнение имеет наименьшую положительную вещественнуюкорень расположен между 0,0 и 2,0
Чтобы получить их значения с требуемой точностью, мы вызываем метод деления пополам с интервалом выделения корня (0,01,2,0):
Bisect:=proc(funct_equation,ai,bi,Mi,epsfi,deltaxi) local k,M,a,b,u,v,w,c,e,epsf,deltax,feq, notsolved: M:=Mi: feq:=funct_equation: a:=ai: b:=bi: epsf:=epsfi: deltax:=deltaxi: notsolved:=true: u:=evalf(subs(x=a,feq)): v:=evalf(subs(x=b,feq)): printf("a=%+9.6f %+12.6e\nb=%+9.6f %+12.6e\n\n",a,u,b,v); e:=b-a; if (sign(u)<>sign(v)) then printf(" n x f\n"); for k from 1 by 1 while (k<M and notsolved) do:
e:=0.5*e;
c:=a+e;
w:=evalf(subs(x=c,feq)):
printf("%2d %+9.6f %+12.6e\n",k,c,w);
if (abs(e)<deltax or abs(w)<epsf) then
notsolved:=false:
else
if (sign(w) <> sign(u)) then
b:=c: v:=w:
else
a:=c: u:=w:
fi:
fi: od: printf("Root = %+9.6f function = %+12.6e\n",0.5*(a+b),evalf(subs(x=0.5*(a+b),feq))); fi: end: with(plots):
Предупреждение, координаты изменения имени былипереопределено
Bisect(f(x),0.01,2.0,30,1.0e-6,1.0e-5):