我有一个带有常数'X'的非线性方程。 我想获得10个不同的'X'值的方程的解。 在MATLAB中这样做的最佳方法是什么?
使用fsolve,我想过使用循环运行10次。但问题是,不可能将'X'的值作为参数发送到由fsolve调用的函数(根据其语法,fsolve只能发送初始猜测值)并且包含非线性方程
这是我的MATLAB代码:
function f = crd(m)
X=0.1; %Paramter for whose different values I want to solve the NLE using a loop
t=(1/(0.8/3600))*log(1/(1-X));
U=350; P=0.1134; T=165; L=21.415; %Constants
a=0.00102*820*2200/(U*P); %Constant
Q=(0.8/3600)*900*exp(-(0.8/3600)*t)*0.9964*(347.3*1000);
Tmi=60; %Constant
b=m*2200;
q=(a/t)+(b/L);
f = ( b - (Q/(T-Tmi)) ) * (b/(L*L*q*q)) - exp(-1/q);
end
每次更改参数'X'的值,我可以多次从命令窗口使用“fsolve(@ crd,10)”。但我想用循环来做这件事。 我想得到X = 0.1,0.2,...,0.9,1.0
的解决方案答案 0 :(得分:0)
一种可行的方法是将您的功能更改为接受两个参数:m
和X
:
function f = crd(m,X)
....
end
然后,当您想要调用fsolve
时,您可以创建一个临时函数,该函数接受单个参数m
,并将X
的实际值传递给它。那就是:
for X = [0.1, 0.2, 0.3, 0.4]
f = @(m) crd(m,X); % a function that accepts m as input
sol = fsolve(f, 10);
...
end