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

时间:2017-11-27 11:26:20

标签: matlab anonymous-function numerical-methods

我正在尝试用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) )

为了使系统"工作"用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])

我收到以下错误:

  

使用时出错   @(A,B,G,d)[F1(A,B,G,d); F2(A,B,G,d); F3(A,B,G,d); F4(A,B, g,D)]不够   输入参数。

     

fsolve出错(第219行)               fuser = feval(funfcn {3},x,varargin {:});

     

引起:       初始用户提供的目标函数评估失败。 FSOLVE无法继续。

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

我不知道自己做错了什么。

0 个答案:

没有答案