首页 文章

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

提问于
浏览
1

我是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 回答

  • 1

    你有一个函数 trail ,通过输入 trail 的句柄调用 fsolve . 那是一个无限的递归循环 . 最后三行不应该是 trail.m 的一部分

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

相关问题