回覆列表
  • 1 # nklal14325

    對於求平方根,變成方程模式為f(x)=x^2-a,即求此方程的實根;下面編寫了兩個function函式,可以直接呼叫。二分法:function x=sqrt_bisect(a)f=@(x)x^2-a;if a1e-6 x=(xa+xb)/2; if f(xb)*f(x)>0 xb=x; elseif f(xa)*f(x)>0 xa=x; else break end endendx;牛頓迭代法:function x=sqrt_newton(a)f=@(x)x^2-a;df=diff(sym("x^2-a"));if a1e-6 x0=x1; x1=x0-f(x0)/subs(df,x0); endendx=x1;呼叫格式為:sqrt_bisect(3)ans = 1.7321或者sqrt_newton(2)ans = 1.4142

  • 2 # 使用者5189701024573

    對於求平方根,變成方程模式為f(x)=x^2-a,即求此方程的實根;

    下面編寫了兩個function函式,可以直接呼叫。

    二分法:

    function x=sqrt_bisect(a)

    f=@(x)x^2-a;

    if a

    warning(["負數不能求平方根"]);

    x=[];

    elseif a==0|a==1

    x=a;

    else

    if a

    xa=a;xb=1;

    else

    xa=1.00;xb=a;

    end

    while abs(xa-xb)>1e-6

    x=(xa+xb)/2;

    if f(xb)*f(x)>0

    xb=x;

    elseif f(xa)*f(x)>0

    xa=x;

    else

    break

    end

    end

    end

    x;

    牛頓迭代法:

    function x=sqrt_newton(a)

    f=@(x)x^2-a;

    df=diff(sym("x^2-a"));

    if a

    warning("負數沒有實平方根");

    x1=[];

    elseif a==0;

    x1=a;

    else

    x0=a;

    x1=x0-f(x0)/subs(df,x0);

    while abs(x1-x0)>1e-6

    x0=x1;

    x1=x0-f(x0)/subs(df,x0);

    end

    end

    x=x1;

    呼叫格式為:

    sqrt_bisect(3)

    ans =

    1.7321

    或者

    sqrt_newton(2)

    ans =

    1.4142

  • 中秋節和大豐收的關聯?
  • 渾身無力能長期吃六味地黃丸嗎?