精华内容
下载资源
问答
  • matlab求解非线性方程组代码,用不动点迭代法,用牛顿法法,离散牛顿法法,牛顿-雅可比迭代法,牛顿-SOR迭代法,牛顿下山法,两点割线法,拟牛顿法等方法求非线性方程组的一个根。
  • 利用matlab求解非线性方程组的方法,以解决必要的问题。
  • MATLAB求解非线性方程组 fsolve源程序代码
  • MATLAB求解非线性方程组 fsolve源程序代码 部分源码 function equation() global sigma mu T lambda sigma=5; %定义sigma的值 mu=0.4; %定义mu的值 T=1.7; %定义T的值 N=1;
  • MATLAB求解非线性方程组 fsolve源程序代码
  • matlab中有专门的solve函数来解决方程组的(a-x)^2+(b-y)^2=e^2(C-x)^2+(D-y)^2=v^2已知a,b,c,d,e,v 值求解 X,Y 请问用 matlab 如何写,就是求2个园的交点问题。仿真程序为:global a b c d e v;>> a=1;b=0;c=-...

    matlab中有专门的solve函数来解决方程组
    (a-x)^2+(b-y)^2=e^2
    (C-x)^2+(D-y)^2=v^2
    已知a,b,c,d,e,v 值
    求解 X,Y 请问用 matlab 如何写,就是求2个园的交点问题。
    仿真程序为:
    global a b c d e v;
    >> a=1;b=0;c=-1;d=0;e=1.5;v=1.5;%设定你这几个未知数的值
    >> syms x y;%%%%%%x,y是变量
    >> [x,y]=solve('x^2+y^2-2*a*x-2*b*y=e^2-a^2-b^2','x^2+y^2-2*c*x-2*d*y=v^2-c^2-d^2');%%%%把平方展开了
    >> x=vpa(x,4);y=vpa(y,4);%%%%%%%%%%%取4位有效数字
    %%%%%%%%%%
    格式就是用solve(方程1,方程2,…求解变量1,变量2,…);

    转载于:https://www.cnblogs.com/henuliulei/p/9496052.html

    展开全文
  • 共回答了17个问题采纳率:76.5%matlab源程序为:S=solve('x1-(7+x2^2+4*x3)/12=0','x2-(11-x1^2+x3)/10=0','x3-(8-x2^3)/10=0')disp(S.x1)disp(S.x2)disp(S.x3)S =x1:[6x1 sym]x2:[6x1 sym]x3:[6x1 sym]....

    共回答了17个问题采纳率:76.5%

    matlab源程序为:

    S=solve('x1-(7+x2^2+4*x3)/12=0','x2-(11-x1^2+x3)/10=0','x3-(8-x2^3)/10=0')

    disp(S.x1)

    disp(S.x2)

    disp(S.x3)

    S =

    x1:[6x1 sym]

    x2:[6x1 sym]

    x3:[6x1 sym]

    .90553960985591352219643092016224

    4.7108198630581133928941167091861-7.9450374515536219172121852424559*i

    -5.2695158922292528617657194964984+3.8713841417380648226893682867298*i

    9.2118524484863654155467746544621

    -5.2695158922292528617657194964984-3.8713841417380648226893682867298*i

    4.7108198630581133928941167091861+7.9450374515536219172121852424559*i

    1.0852191683700305323160050352309

    5.9371258424045108656830408249121+3.9341420043515601411303925003274*i

    -1.1927328487972209635047755512223+5.5738872132188748196832209089117*i

    -5.5740051555846103366725355826107

    -1.1927328487972209635047755512223-5.5738872132188748196832209089117*i

    5.9371258424045108656830408249121-3.9341420043515601411303925003274*i

    .67219366871830539734777606306666

    7.4394620996382997437406777575615-35.513860435523229429047897408397*i

    -10.147145922416523554997256893972+14.938231612562670240880881978453*i

    18.118173976838142225165382209754

    -10.147145922416523554997256893972-14.938231612562670240880881978453*i

    7.4394620996382997437406777575615+35.513860435523229429047897408397*i

    1年前

    2

    展开全文
  • matlab求解非线性方程组的几种方法之程序,都是一些常用的方法,可作为工具使用
  • 错误提示信息是矩阵奇异,可能初值不太合适我用自带fsolve解了下结果不是很好[/code]function aa[X,FVAL,EXITFLAG,OUTPUT] =fsolve(@fun,[18.7783 0.01 18.1315 18.0062-2],optimset('MaxFunEvals',1000))function f...

    错误提示信息是矩阵奇异,

    可能初值不太合适

    我用自带fsolve解了下

    结果不是很好

    [/code]

    function aa

    [X,FVAL,EXITFLAG,OUTPUT] =fsolve(@fun,[18.7783   0.01   18.1315   18.0062  -2],optimset('MaxFunEvals',1000))

    function f=fun(x)

    x1=x(1);

    x2=x(2);

    x3=x(3);

    x4=x(4);

    x5=x(5);

    f1=x1+x2+x3+x4+x5-30;

    f2=4.1495*(0.7986-lambertw(2.4534e-007*exp((330.7*x1+354.3091)/443.6719)))-x1/331.0230+1.019e-6*(exp(x1/1.3403)-1)-4.1495*(0.7986-lambertw(2.4533e-007*exp((326.4292*x2+349.7334)/437.9477)))+x2/(0.323+326.4292)-1.019*10^(-6)*(exp(x2/1.3403)-1);

    f3=4.1495*(0.7986-lambertw(2.4534e-007*exp((330.7*x1+354.3091)/443.6719)))-x1/331.0230+1.019e-6*(exp(x1/1.3403)-1)-4.1495*(0.7985-lambertw(2.4532e-007*exp((315.4524*x3+337.973)/423.2354)))+x3/(0.323+315.4524)-1.019*10^(-6)*(exp(x3/1.3403)-1);

    f4=4.1495*(0.7986-lambertw(2.4534e-007*exp((330.7*x1+354.3091)/443.6719)))-x1/331.0230+1.019e-6*(exp(x1/1.3403)-1)-4.1495*(0.7985-lambertw( 2.4531e-007*exp((302.844*x4+324.4644)/406.3363)))+x4/(0.323+302.844)-1.019*10^(-6)*(exp(x4/1.3403)-1);

    f5=4.1495*(0.7986-lambertw(2.4534e-007*exp((330.7*x1+354.3091)/443.6719)))-x1/331.0230+1.019e-6*(exp(x1/1.3403)-1)-1.019*10^(-6)*(exp(x5/1.3403)-1);

    f=[f1 f2 f3 f4 f5];

    [/code]

    Solver stopped prematurely.

    fsolve stopped because it exceeded the function evaluation limit,

    options.MaxFunEvals = 1000 (the selected value).

    X =

    18.7895   19.0894   19.0963   19.1094  -46.0868

    FVAL =

    -0.0022   -0.0180   -0.0172   -0.0175    2.7252

    EXITFLAG =

    0

    OUTPUT =

    iterations: 180

    funcCount: 1001

    algorithm: 'trust-region dogleg'

    firstorderopt: 0.0022

    message: [1x143 char]

    展开全文
  • MATLAB求解非线性方程组的五种方法

    千次阅读 2021-02-01 17:10:41
    MATLAB求解非线性方程组的五种方法 求解线性方程分为两种方法–二分法和迭代法 常见的方法一共有5种 二分法 迭代法 牛顿法 割线法 拟牛顿法 Halley法 使用条件 二分法需要知道两个自变量,分别是一个根的两侧 牛顿法...

    MATLAB求解非线性方程组的五种方法

    求解线性方程分为两种方法–二分法和迭代法
    常见的方法一共有5种
    二分法
    迭代法
    牛顿法
    割线法
    拟牛顿法
    Halley法

    使用条件
    二分法需要知道两个自变量,分别是一个根的两侧

    牛顿法迭代法是最常用的方法,收敛性信赖于初值,取不同的初值可以的方程不同的根,函数用的是一阶导数,输入的是一个猜想的可能的值

    割线法给定两个初值再带入计算,比如要在2附近求一个根,那就可以假设这个范围是(1.9,2)
    拟牛顿法这个比较方便,用时最好可以找到一个好的初始值
    Halley法需要知道函数值以及它的一阶求导、二阶求导

    这里我就从计算代码的角度来讲解,在下面也会按照上面这个顺序给出代码,遇到方程组直接带入已知条件就可以得到答案。

    二分法

    基本函数是这样子的:y = dichotomy(fun,a,b,tol);二分法的算法要输入四个变量,fun,a,b,tol:函数,一个根的左右点,tol=1.0e-6

    function y = fun(x)
    y = x^3 - 5 * x + 4.272;
    

    上面这个就是定义的fun,每次的输入的方程不同,第一条不动,直接改第二行就可以的。比如这里我们要计算的方程y = x^3 - 5 * x + 4.272;
    我们是可以通过简单计算得到一个根的两侧分别是1和1.3

    那在窗口指令指令中输入x=dichotomy(’fun‘,1,1.3,1.0e-6)就可以得到结果

    function y = dichotomy(fun,a,b,tol)
    if nargin < 4
        tol = 1.0e-5;
    end
    n = 1;
    if feval(fun,a)*feval(fun,b)<0
        c = (a+b)/2;
        while (abs(b-c)>tol) && (abs(feval(fun,c))>tol)
            if (feval(fun,c)*feval(fun,a)>0)
                a = c;
                c = (a+b)/2;
            elseif (feval(fun,c)*feval(fun,a)<0)
                b = c;
                c = (a+b)/2;
            else
                y = c;
                tol = 100;
            end
            n = n + 1;
        end
        y = c;
    elseif feval(fun,a)==0
        y = a;
    elseif feval(fun,b)==0
        y = b;
    else
        disp('there may not be a root in the interval');
    end
    n
    
    function y = fun(x)
    y = x^3 - 5 * x + 4.272;
    

    牛顿法
    还是用刚才那道题,y = x^3 - 5 * x + 4.272,一阶导是y = 3 * x^2 - 5;

    function y = dfun(x)
    y = 3 * x^2 - 5;
    

    下面的是具体的算法,根据x = newton(x0,tol),我们只需要输入一个我们猜想的值就可以。但是有一定的误差

    function x = newton(x0,tol)
    if nargin < 2
        tol = 1.0e-5;
    end
    x = x0 - fun(x0)/dfun(x0);
    n = 1; 
    while (norm(x-x0)>tol) && (n<1000)
        x0 = x;
        x = x0 - fun(x0)/dfun(x0);
        n = n + 1; 
    end
    n
    

    割线法

    这里我们用割线法求y = x^3 - 5 * x + 4.272在方程x=2的根,输入上要用两个初始值,比如说现在来计算就可以输入x=secant(2,1.9,10e-6)

    function x = secant(x0,x1,tol)
    if nargin < 3
        tol = 1.0e-5;
    end
    x = x0 - fun(x0) * (x0 - x1) / (fun(x0) - fun(x1));
    n = 1;
    while (abs(x0-x1) > tol) && (n <= 1000)
        x1 = x0;
        x0 = x;
        x = x0 - fun(x0) * (x0 - x1) / (fun(x0) - fun(x1));
        n = n + 1;
    end
    n
    

    拟牛顿法

    这里我们可以直接找到一个初始值输入,比如说broyden2,10e-6),如果不知道不确定也没关系,至少要知道一个范围。比如说给个范围(0.5,0.5)有下面这个函数

    function y = funm(x)
    y(1,1) = x(1,1) - 0.7 * sin(x(1,1)) - 0.2 * cos(x(2,1));
    y(2,1) = x(2,1) - 0.7 * cos(x(1,1)) + 0.2 * sin(x(2,1));
    

    那就可以输入x = broyden(x0,tol)

    function x = broyden([0.50.5],tol)
    if nargin < 2
        tol = 1.0e-5;
    end
    A = eye(size(x0,1));
    x = x0 - A \ funm(x0);
    n = 1;
    while (norm(x - x0) > tol) && (n < 1000)
        x0 = x;
        x = x0 - A \ funm(x0);
        p = x - x0;
        q = funm(x) - funm(x0);
        A = A + (q - A*p)*p'/norm(p)^2;
        n = n + 1;
    end
    n
    

    Halley法

    这个要求二阶导,比如说第一个道题,y = x^3 - 5 * x + 4.272;,二阶导数是下面这个输入

    function y = d2fun(x)
    y = 6 * x;
    

    最后输入x = halley(1,10e-6)就可以计算出一个结果

    function x = halley(x0,tol)
    if nargin < 2
        tol = 1.0e-5;
    end
    m = size(x0,1);
    x = x0 - (eye(m) - 1/2 * (dfun(x0) \ d2fun(x0)) * (dfun(x0) \ fun(x0))) \ ...
        (dfun(x0) \ fun(x0));
    n = 1;
    while (norm(x - x0) > tol) && (n < 1000)
        x0 = x;
        x = x0 - (eye(m) - 1/2 * (dfun(x0) \ d2fun(x0)) * (dfun(x0) \ fun(x0))) \ ...
        (dfun(x0) \ fun(x0));
        n = n + 1;
    end
    n
    
    
    展开全文
  • 只需给出方程系数,能很方便的求解非线性方程组
  • %采用fsolve函数解对应lambda下的方程组,结果保存在x里 value(N)=x(7)-x(8); %求出对应lambda下的omega1-omega2的值,保存在value里 N=N+1; end lambda=0:0.05:1; plot(lambda,value) %绘图 title(['T=',num2str(T...
  • 功能用不动点迭代法求解方程 !迭代公式如图,标红的为自由赋值已知数](https://img-blog.csdnimg.cn/20191212150559141.png) 我的代码 function f=myf(x) d=0; a=0; b=0.3; r=1; x =x(1); y =x(2); z =x(3); f(1)=(2...
  • MATLAB程序分享MATLABfsolve求解非线性方程组源程序代码-MATLAB fsolve求解非线性方程组源程序代码.rar 程序代码见附件,
  • fsolve解非线性方程组,只迭代了8次就退出了,得到的结果进行复算不等于0,存在较大的误差。(是不是需要修改算法?)运行程序得到的结果提示如下:x =1.0e+003 *Columns 1 through 40.008229968721187 0....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,292
精华内容 2,516
关键字:

matlab求解非线性方程组

matlab 订阅