Matlab非線性方程求解

Matlab求解

  • 非線性方程求解

1、概論

對Matlab非線性方程求解的概括

2、代碼演示

Matlab符號法

(1) fsolve


           

-x0 = [-5;-5];
options = optimset('Display','iter');
[x,fval] = fsolve(@myfunction,x0,options);
%function F = myfunction(x)
%F = [2*x(1)-x(2)-exp(-x(1));-x(1)+2*x(2)-exp(-x(2))];

MATLAB中語句:options=optimset('Display','iter')

optimset命令爲創建或編輯“優化選項”結構變量,爲創建options結構變量,其中display的值爲iter,即在每次優化迭代的時候都顯示輸出

(2)fzero(求解在某處附近的某一解)

  

 -x = fzero('x^4+5*x^2+3*x-20',-2);

(3)roots


 

 -[x] = roots([1 0 5 3 -20]);

(4)solve(解出所有解)


 

-%方程組
a = 'x^2 + sqrt(5)*x = -1';
b = 'x + 3*z^2 = 4';
c = 'y*z + 1 = 0';
[u,v,w] = solve(a,b,c);
vpa(u,6)
vpa(v,6)
vpa(w,6)
%方程
[x] = solve('x^3-x-1=0');
vpa(x,6) 

2、Newton法


 

newton('f','df',1.2,10^(-6),10) 

這裏的newton算法:

       

-function [p1,err,k,y] = newton(f,df,p0,delta,max1)
p0,feval(f,p0)
for k = 1:max1
p1 = p0 - feval(f,p0)/feval(df,p0);
err = abs(p1 - p0);
p0 = p1;
p1,err,k,y = feval(f,p1)
if(err<delta)|(y == 0)
break
end
p1,err,k,y = feval(f,p1)
end

f函數:
       

-function y = f(x)
y = x^3 - 3*x + 2;

df函數:
       

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

3、迭代法

迭代算法:
       

-function [p0,k,err,p] = fixpt(g,p0,tol,max1)
P(1) = p0;
for k = 2:max1
P(k) = feval(g,P(k-1));
k,err = abs(P(k) - P(k-1))
p = P(k);
if (err < tol)
break;
end;
if k == max1
disp('maximum number of iteration exceeded');
end
end
P

4、二分法

二分算法:

       

        -function [c,err,yc] = bisect(f,a,b,delta)
        if nargin < 4 delta = 1e-10;end
        ya = feval(f,a);
        yb = feval(f,b);
        if yb == 0
        c = b;
        return
        end
        if ya*yb>0
        disp('(a,b)不是有根區間');
        return
        end
        max1 = 1 + round((log(b-a)-log(delta))/log(2));
        for k = 1:max1
        c = (a+b)/2;
        yc = feval(f,c);
        if yc == 0
        a = c;
        b = c;
        break;
        elseif yb*yc > 0
        b = c;
        yb = yc;
        else
        a = c;
        ya = c;
        end
        if(b-a) < delta
        break
        end
        end
        k = (a+b)/2;
        c = (a+b)/2;
        err = abs(b-a);
        yc = feval(f,c);

      


5、弦位法

弦位算法:

       

        -function [p1,err,k,y] = secant(f,p0,p1,delta,max1)
        p0,p1,feval(f,p0),feval(f,p1),k=0,
        for k = 1:max1
        p2 = p1 - feval(f,p1)*(p1-p0)/(feval(f,p1)-feval(f,p0));
        err = abs(p2 - p1);
        p0 = p1;
        p1 = p2;
        p1,err,k,y=feval(f,p1)
        if(err < delta) | (y == 0)
        break
        end
        end

代碼下載地址:http://download.csdn.net/detail/qq_34861102/9922160
原文地址:http://blog.csdn.net/qq_34861102/article/details/76724026

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章