我有一个关于求解方程组和解决方案初步猜测的问题。我想解决一个方程组,其中“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
以及vpasolve
。 solve
不允许进行初步猜测,对于vpasolve
,每当我包含多个方程组和未知变量时,我甚至会从Matlab帮助网站获取示例错误,即vpasolve(eqn,var)
工作正常但对于vpasolve(eqn,var,init_guess)
,我收到以下错误:
使用getEqnsVars时出错(第50行)期望两个参数:一个向量 方程和变量向量。
sym / vpasolve中的错误(第91行)[eqns,vars] = getEqnsVars(varargin {1:端-1});
我做错了什么?还有其他功能我可以试试吗?
编辑:我没有使用'fsolve'而是'fzero'来找到根。
答案 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);