如何在matlab中求解非线性方程组的参数值

时间:2015-03-28 23:57:38

标签: matlab

我是matlab的初学者。我有三个非线性方程

spdratio_fw = ( 1 + afw*(vc_fw)^b);
spdratio_pa = ( 1 + aps*(vc_pa)^b);
ind =  (ddhv_fw*( 1 + afw*(vc_fw)^b) - ddhv_pa*( 1 + aps*(vc_pa)^b))/(ddhv_fw + ddhv_pa) ;

从以上三个方程式我必须解决afw,aps和b。

所以我写了命令并保存在trial.m

function F = trial(Y)
afw = Y(1);
aps = Y(2);
b = Y(3);
spdratio_fw = 1.329;
spdratio_pa = 1.168;
ind = 1.312;
vc_fw = 3.2;
vc_pa = 0.76;
ddhv_fw = 20776.82;
ddhv_pa = 2536.54;

fA = spdratio_fw - ( 1 + afw*(vc_fw)^b);
fB = spdratio_pa - ( 1 + aps*(vc_pa)^b);
fC = ind - (ddhv_fw*( 1 + afw*(vc_fw)^b) - ddhv_pa*( 1 + aps*(vc_pa)^b))/(ddhv_fw + ddhv_pa) ;

F = [fA; fB; fC];



end

然后我跑了一个剧本

afw0 = 0.15; aps0 = 0.15; b0 = 1; 
Y0 = [afw0; aps0; b0];
Y = fsolve(@trial, Y0);
result;

但收到错误:

  

???达到最大递归限制500。使用   set(0,'RecursionLimit',N)更改限制。意识到   超出可用的堆栈空间可能会导致MATLAB和/或您的崩溃   计算机。

     

==>中的错误optimget

     

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

我给了命令:

trial

,错误是:

??? Input argument "Y" is undefined.

Error in ==> trial at 2
afw = Y(1);

我不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

您有一个功能trail,通过输入fsolve的句柄调用trail。那是一个无限的递归循环。最后三行不应该是trail.m

的一部分

除了trail是一个函数,你不能将其称为trail,你必须传递参数Y,例如trail(Y0)