Предполагая, что у вас есть функция, определенная как
func = @(x,V) V+x+exp(x);
Существует множество опций, позволяющих избежать дорогостоящих символических вычислений.
Во-первых, создание вектора значений x0
с использованием fzero
и цикл for
:
for V = 1:50
x0(V) = fzero(@(x) func(x,V),0);
end
Во-вторых, то же самое снова, но записано как анонимная функция, поэтому вы можете вызвать x0(1.5)
или x0(1:50)
:
x0 = @(V) arrayfun(@(s) fzero(@(x) func(x,s),0),V);
Наконец, если вы хотите использовать десять шагов метода Ньютона и вычислить производную символически (хотя это не очень хороший метод), * 1017 *
syms y Vsym
g = matlabFunction(diff(func(y,Vsym),y),'Vars',[y Vsym]);
for V = 1:50
x0(V) = 0;
for i = 1:10
x0(V) = x0(V)-func(x0(V),V)/g(x0(V),V); % Newton Raphson
end
end
Что по крайней мере будет более эффективным в циклах, потому что это простоиспользуя анонимные функции.