【问题标题】:How to solve parameter values from a system of non-linear equations in matlab如何从matlab中的非线性方程组求解参数值
【发布时间】:2015-03-30 04:24:33
【问题描述】:

我是 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);

我不知道如何解决它。

【问题讨论】:

  • 您认为您的问题为何以及如何不同?展示您的尝试,以便我们有一个帮助的起点。

标签: matlab


【解决方案1】:

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

另外trail是一个函数,不能叫trail,必须传参数Y,比如trail(Y0)

【讨论】:

  • 好的,根据建议我删除了最后三行(我相应地编辑了上面的代码。但同样的错误存在。我需要更改名称“试用”吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多