首页 文章

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

提问于
浏览
0

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

    一种可能的方法是更改函数以接受两个参数: 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
    

相关问题