0
Я уверен, что я нарушаю какое-то правило священных максимумов. Моя функция выполняется отлично, когда я запускаю ее с помощью одного аргумента. Но при попытке построить результаты, максимумы бесконечно зависают. Любая помощь будет оценена ...plot2d() зависает бесконечно, вызов одной функции ok
define_variable(IS1, 1e-12, real);
define_variable(IS2, 1.2e-12, real);
define_variable(N1, 1.5, real);
define_variable(N2, 1.8, real);
define_variable(VT, 0.025, real);
define_variable(R, 1.0e4, real);
define_variable(VE, 1.0, real);
define_variable(EPS, 1.0e-3, real);
ID1(VD):=IS1*(exp(VD/(N1*VT))-1);
ID2(VD):=IS2*(exp(VD/(N2*VT))-1);
F(V1, V2):=[(VE-V1)/R - ID1(V1-V2), ID1(V1-V2)-ID2(V2)];
define(F1(V1, V2), jacobian(F(V1, V2), [V1, V2]));
define(newton33(V1, V2), [V1, V2] - invert_by_lu(F1(V1, V2)).F(V1, V2));
define(newton(V1, V2), block([val : newton33(V1, V2)], [val[1][1], val[2][1]]));
newton2(V1, V2, n):=block([val : newton(V1, V2)], if (((val[1]-V1)**2 + (val[2]-V2)**2) < (EPS*EPS)) then [val, n*1.0] else newton2(val[1], val[2], n+1));
newton3(x1):=newton2(x1, 0.0, 0)[2];
plot2d(newton3(x), [x, -1.0, 1.0]);
Когда Maxima видит 'plot2d (newton3 (x), ...)', он пытается оценить 'newton3 (x)' перед вызовом 'plot2d'. Но 'newton3' не вычисляет число, когда его аргумент не является числом. Чтобы сделать работу по графике, вам нужно отложить оценку 'newton3'. Написание 'plot2d (newton3, ...)' делает это. Я думаю, что 'plot2d ('(newton3 (x)), ...)' (т. Е. Предотвращает оценку посредством цитирования) также будет делать. –