![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/305295/image.png)
Regarding improving efficiency of the code using fzero and int (integral) function in for loop
2 次查看(过去 30 天)
显示 更早的评论
Hi ,
I am working on data generation based on user input values using probability distribution functions. I have to repetatively solve an equation with single variable , which sometimes involves integration too. I used the 'fzero' and' int' function in the code in the 'for' loop. I am facing 2 problems here:
- The fzero function gets stuck in a loop , as it cannot find a real and finite solution
- In case , even if it finds a solution , the program takes long time to generate the data.
I have attached the code for your reference. Run the 'f_example.m' file to check the code.
0 个评论
回答(1 个)
darova
2020-5-29
I tried to plot your function
c1 = .9;
c2 = 0.7;
c3 = 0.6;
x = -1:0.1:1;
f = @(x) c1 - exp(c2*x).*(1-c3*x);
plot(x,f(x))
As you can see you can have only 2 roots max
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/305295/image.png)
So this piece of a code needs to be improved
while (isnan(k(i1)) || isinf(k(i1)) )
x_sol_0=rand;
if isreal(fun(x_sol_0))
k(i1) = fzero(fun,x_sol_0);
end
end
Especially this line
x_sol_0=rand;
Maybe this way
x_sol_0=-x_sol;
Are you sure there are always roots that meet condition?
4 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!