loop intial guesses in fsolve
3 次查看(过去 30 天)
显示 更早的评论
I am trying to solve some equations by using solve.
Actually I did it. But this time, I am trying to vary some parameters.
Let's say I have one parameters which is 1:1:9.
And I code it like,
a=1:1:9
for i=1:9
y=@(x) x*exp(a(i))-x/2;
f=@(x) a(i)*x^2+1/2*y(x)-300;
x0=200:-10:110;
p(i)=fsolve(f, x0(i));
end
But it gives me an error message that index matrix is not matching. Is it possible to loop initial guesses in fsolve? (above coding is just an example.)
Since I only use one set of initial guesses in my real model, fsolve keep giving me the same solution.
0 个评论
采纳的回答
Matt Tearle
2012-4-3
Works for me. Some possible reasons for your error: p is already defined in your workspace, in a way that doesn't allow the assignment you have in the loop; or your "real" code is actually for a function of multiple variables, (so x is actually a vector).
In the first case, that's easily solved by preallocating p before the loop, which you should do anyway:
a=1:1:9;
x0=200:-10:110;
p = zeros(9,1);
for i=1:9
y=@(x) x*exp(a(i))-x/2;
f=@(x) a(i)*x^2+1/2*y(x)-300;
p(i)=fsolve(f, x0(i));
end
plot(a,p,'o-')
In the second case, you'll just need to changing your indexing. x0 would have to be a matrix, as would p, and you'd have to index into a whole row or column (depending on your choice of orientation) on each iteration.
0 个评论
更多回答(1 个)
Sean de Wolski
2012-4-3
Copying and pasting what you have above works for me. What do you have for fsolve? IS it being shadowed perhaps?
which -all fsolve
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!