【问题标题】:Solving a non linear equation multiple times with different parameter values in MATLAB在 MATLAB 中使用不同的参数值多次求解非线性方程
【发布时间】:2018-03-19 21:56:35
【问题描述】:

我有一个带有常数“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 的解决方案

【问题讨论】:

  • 你能分享方程和你的代码吗?
  • @Aziz,我已经编辑了我的问题并在那里添加了代码。

标签: matlab


【解决方案1】:

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

【讨论】:

  • 关于你答案中的第二个代码 sn-p ,我是否必须不可避免地将它写在一个单独的函数中并运行它?我可以从命令行窗口给出相同的命令,或者以某种方式将此代码包含在同一个 MATLAB 文件中吗?我希望程序仅在一个 MATLAB 文件中。我不想有两个函数,因此有两个 .m 文件。
  • 你绝对可以在命令行窗口中写这个。您不必单独创建临时函数。您可以在 fsolve 中执行此操作:sol = fsolve(@(m) crd(m,X), 10)。您仍然需要手动或通过循环设置X
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多