我正在尝试通过相对于方程系统迭代常数(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上工作了几天,因此,如果这是一个微不足道的修复,请原谅我的无知。谢谢。
答案 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