我想使用fsolve
来解决以下两个方程:
p*x(1) - x(2) - exp(-x(1))=0 .... (1)
-x(1) + 2*x(2) - exp(-x(2))=0.....(2)
其中“p”是我想要从-3到+3变化的系数,即-3:0.1:3
。如果每次手动指定p
的值,则此方法有效,如下所示:
x=fsolve(@myfun,x0)
function F = myfun(x)
F = [-3*x(1) - x(2) - exp(-x(1));
-x(1) + 2*x(2) - exp(-x(2))];
Matlab可以自动改变p
的值吗?
答案 0 :(得分:0)
您可以使用arrayfun
在一行中执行此操作,但它看起来有点复杂,只需循环p
可能会更快:
function F = myfun(x,p)
F = [p*x(1) - x(2) - exp(-x(1));
-x(1) + 2*x(2) - exp(-x(2))];
p_values = -3:.1:3;
x = arrayfun(@(p)fsolve(@(x)myfun(x,p), x0), p_values, 'UniformOutput', false)
然后和x
是包含不同答案的单元格数组。 x{1}
包含p = p_values(1)
等解决方案
要使x
矩阵与每列一个解决方案(即x(:,1)
是p = p_values(1)
的解决方案),只需致电cell2mat
:
x = cell2mat(x);