我是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);
我不知道如何解决它。
答案 0 :(得分:1)
您有一个功能trail
,通过输入fsolve
的句柄调用trail
。那是一个无限的递归循环。最后三行不应该是trail.m
除了trail
是一个函数,你不能将其称为trail
,你必须传递参数Y
,例如trail(Y0)