在MATLAB中使用不同的参数值多次求解非线性方程

时间:2018-03-19 21:56:35

标签: matlab

我有一个带有常数'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

的解决方案

1 个答案:

答案 0 :(得分:0)

一种可行的方法是将您的功能更改为接受两个参数:mX

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