MATLAB初始目标函数评估错误

时间:2020-04-09 18:02:11

标签: matlab

我正在尝试通过相对于方程系统迭代常数(A)的值来在MATLAB中创建图。我的代码粘贴在下面:

function F=Func1(X, A)

%X(1) is c
%X(2) is h 
%X(3) is lambda
%A is technology (some constant) 
%a is alpha

a=1;

F(1)=1/X(1)-X(3)

F(2)=X(3)*(X(1)-A*X(2)^a)

F(3)=-1/(24-X(2))-X(3)*A*a*X(2)^(a-1)

clear, clc

init_guess=[0,0,0]

for countA=1:0.01:10
    result(countA,:)=[countA,fsolve(@Func1, init_guess)] 
end


display('The Loop Has Ended') 
display(result) 
%plot(result(:,1),result(:,2))

第一组代码是我要定义的方程组。在第二行代码中,我尝试编写一个循环,该循环以0.01的增量迭代所需的A值[1,10]。现在,我只是想让我的循环代码正常工作,但我一直在遇到这个错误:

“初始目标函数评估失败。FSOLVE无法继续。”

我不确定为什么会这样。据我了解,这是我最初的猜测矩阵的大小不正确的结果,但是我认为它应该是3号,因为我正在求解三个变量。此外,我非常有信心在循环代码中引用Func1代码没有任何问题。

衷心感谢您提供的所有建议。我只在MATLAB上工作了几天,因此,如果这是一个微不足道的修复,请原谅我的无知。谢谢。

1 个答案:

答案 0 :(得分:2)

代码问题:

函数1/X(1)中的

Func1容易被零误算除。我将其更改为1/(X(1)+eps)

如果countA递增0.01,则不能用作result的索引。也许引入索引ind来增加。

我已经在函数中包含了常量A,以阐明什么是优化变量。

这是更新的代码。我不知道结果是否合理:

init_guess=[0,0,0];

ind = 1;
for countA=1:0.01:10
    result(ind,:)=[countA, fsolve(@(X) Func1(X,countA), init_guess)];
    ind = ind+1;
end

display('The Loop Has Ended')
display(result) 
%plot(result(:,1),result(:,2))

function F=Func1(X,A)

%X(1) is c
%X(2) is h 
%X(3) is lambda
%A is technology (some constant) 
%a is alpha

a=1;

F(1)=1/(X(1)+eps)-X(3);

F(2)=X(3)*(X(1)-A*X(2)^a);

F(3)=-1/(24-X(2))-X(3)*A*a*X(2)^(a-1);

end