MATLAB - 通过迭代找到函数和的零
MATLAB - Finding Zero of Sum of Functions by Iteration
我正在尝试对一个函数求和,然后试图找到所述函数的根。也就是说,例如,取:
假设我有一个矩阵 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 中的符号工具箱。
我建议利用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
永远找不到,所以这个问题有点没有实际意义。
另一种解决方法是写一个函数:
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
我正在尝试对一个函数求和,然后试图找到所述函数的根。也就是说,例如,取:
假设我有一个矩阵 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 中的符号工具箱。
我建议利用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
永远找不到,所以这个问题有点没有实际意义。
另一种解决方法是写一个函数:
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