使用Matlab中的特定初始猜测求解方程组

时间:2014-03-17 15:15:57

标签: matlab numerical-methods

我有一个关于求解方程组和解决方案初步猜测的问题。我想解决一个方程组,其中“x”,Tx1向量是我的未知数,“a”是Tx1向量,“B”是TxT矩阵。 “f”是我想要解决的功能。我想解决“x”这样“f == 0”:

x = sym('x', [T,1]);

f = -x+1-(1+erf((a - B*x)./sqrt(2)))/2; % -x+1-normcdf(a-B*x)
Spp = solve(f==0, x);

我使用Matlab的solve(或vpasolve)函数来获取值。如果“B”的条目高于某个值,我应该观察到跳变以改变“a”的值(我这样做)。然而,取决于解的初始猜测,即例如初始猜测是1或0,跳跃的位置发生在“a”的不同值,发生滞后循环。

我使用fzero解决了T = 1的等式。我指定了初始猜测,并且确实能够观察到滞后循环。对于T> 1,fzero不再有效,我尝试了solve以及vpasolvesolve不允许进行初步猜测,对于vpasolve,每当我包含多个方程组和未知变量时,我甚至会从Matlab帮助网站获取示例错误,即vpasolve(eqn,var)工作正常但对于vpasolve(eqn,var,init_guess),我收到以下错误:

  

使用getEqnsVars时出错(第50行)期望两个参数:一个向量   方程和变量向量。

     

sym / vpasolve中的错误(第91行)[eqns,vars] =   getEqnsVars(varargin {1:端-1});

我做错了什么?还有其他功能我可以试试吗?

编辑:我没有使用'fsolve'而是'fzero'来找到根。

1 个答案:

答案 0 :(得分:0)

您可以使用稍微不同的函数f定义并尝试fsolve。在这里,您不必明确将x定义为符号变量。

f = @(x) -x+1-(1+erf((a - B*x)./sqrt(2)))/2; % -x+1-normcdf(a-B*x)
initial_guess = zeros(T,1);
Spp = fsolve(f,initial_guess);