MATLAB - 通过迭代求零函数和

时间:2015-12-22 19:33:40

标签: matlab function sum root series

我正在尝试对函数求和,然后尝试找到所述函数的根。也就是说,例如,采取:

考虑我有一个矩阵X和矢量t,其值为:X(2 * n + 1,n + 1),t(n + 1)

for j = 1:n+1
        sum = 0;
    for i = 1:2*j+1
        f = @(g)exp[-exp[X(i,j)+g]*(t(j+1)-t(j))];
        sum = sum + f;
    end
        fzero(sum,0)
end

即,

我想在

评估

j = 1

f = @(g)exp[-exp[X(1,1)+g]*(t(j+1)-t(j))]
fzero(f,0)

j = 2

f = @(g)exp[-exp[X(1,2)+g]*(t(j+1)-t(j))] + exp[-exp[X(2,2)+g]*(t(j+1)-t(j))] + exp[-exp[X(3,2)+g]*(t(j+1)-t(j))]
fzero(f,0)

j = 3

等...

但是,我不知道如何在实践中实际实现这一点。

感谢任何帮助!

PS - 我在Matlab中没有符号工具箱。

2 个答案:

答案 0 :(得分:3)

我建议使用matlab的数组操作:

zerovec = zeros(1,n+1); %preallocate
for k = 1:n+1
    f = @(y) sum(exp(-exp(X(1:2*k+1,k)+y)*(t(k+1)-t(k))));
    zerovec(k) = fzero(f,0);
end

但是,请注意,指数之和永远不会为零,除非指数很复杂。哪个fzero永远找不到,所以这个问题有点争论。

答案 1 :(得分:-1)

另一种解决方案是编写一个函数:

 function [ sum ] = func(j,g,t,X)
    sum = 0;
    for i = 0:2*j
        f = exp(-exp(X(i+1,j+1)+g)*(t(j+3)-t(j+2)));
        sum = sum + f;
    end
 end

然后循环你的求解器

for j=0:n
  fun = @(g)func(j,g,t,X);
  fzero(fun,0)
end