Matlab的fsolve中方程组的变系数

时间:2015-06-04 20:29:01

标签: matlab optimization

我想使用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的值吗?

1 个答案:

答案 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);