我是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 回答
你有一个函数
trail
,通过输入trail
的句柄调用fsolve
. 那是一个无限的递归循环 . 最后三行不应该是trail.m
的一部分除了
trail
是一个函数,你不能把它称为trail
,你必须传递参数Y
,例如trail(Y0)