MATLAB:如何对多个输入使用 fsolve,每个输入都依赖于多个参数?

MATLAB : How to use fsolve with multiple inputs, each dependent on multiple parameters?

我正在尝试用 4 个未知数求解以下 4 个方程组,但我不喜欢从 vpasolve 得到的数值结果,所以我阅读了 fsolve 的大量文档的一部分。

我有以下 4 个方程组,其中项:T1,T2,T3,E1,E2,E3,S1,S2,S3,S4 are known 和项 a,b,g,D are unknowns

估算:

T1, T2 and T3 are 303, 323, 343

E1, E2 and E3 are 5e+06, 10e+06, 20e+06

S1, S2, S3 and S4 are 1.52e-06 ; 3.36e-06 ; 6.62e-07 ; 1.38e-06

Estimate values for the unknowns (a;b;g;D) should be around (+-1e-7;+-1e-5;+-0.1;10), but not necessarily.

系统是:

(a*T1+b)*E1 = asinh( S1/(D*(E1)^g) )
(a*T2+b)*E3 = asinh( S2/(D*(E3)^g) )
(a*T3+b)*E2 = asinh( S3/(D*(E2)^g) )
(a*T3+b)*E3 = asinh( S4/(D*(E3)^g) )

为了使系统 "work" 具有 fsolve,我做了以下操作:

F1 = @(a,b,g,D) ( asinh( 1.52e-06/(D*(5*1e06)^g) )-(a*303+b)*(5*1e06) )
F2 = @(a,b,g,D) ( asinh( 3.36e-06/(D*(20*1e06)^g) )-(a*323+b)*(20*1e06) )
F3 = @(a,b,g,D) ( asinh( 6.62e-07/(D*(10*1e06)^g) )-(a*343+b)*(10*1e06) )
F4 = @(a,b,g,D) ( asinh( 1.38e-06/(D*(20*1e06)^g) )-(a*343+b)*(20*1e06) )

然后我写了

r = @(a,b,g,D) [ F1(a,b,g,D) ; F2(a,b,g,D) ; F3(a,b,g,D) ; F4(a,b,g,D) ]

然后,我写了

[x, fval, exitflag] = fsolve(r, [1e-7,1e-5,0.1,10])

我收到以下错误:

Error using @(a,b,g,D)[F1(a,b,g,D);F2(a,b,g,D);F3(a,b,g,D);F4(a,b,g,D)] Not enough input arguments.

Error in fsolve (line 219) fuser = feval(funfcn{3},x,varargin{:});

Caused by: Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.

然后我尝试了各种其他方法来声明函数,但所有这些方法最终都导致了相同的错误 - 或其他错误,但可能是由于格式错误。

我不知道我做错了什么。

你应该区分:

  • 一个包含 4 个元素的向量(= fsolve 所期望的)
  • 4 个参数包含 1 个元素(=您提供的内容)

最简单的解决方案是按如下方式扩展向量:

[x, fval, exitflag] = fsolve(@(x) r(x(1), x(2), x(3), x(4)), [1e-7,1e-5,0.1,10])