MATLAB--非线性、线性方程组的求解

本文介绍了MATLAB中解决非线性及线性方程组的多种方法,包括牛顿法、弦截法、抛物线法、fzero函数、solve函数、fsolve函数、高斯消元法、列主元法、三角分解法以及迭代法等,并提供了相应的MATLAB代码示例。
摘要由CSDN通过智能技术生成

%%牛顿法和牛顿下山法
% h=@(x) x.^3+x.^2-1;
% x = newton_eq(h,1,1000);

function result=newton_eq(h,x,n)
%x为初始值
%n为迭代次数
f = matlabFunction(h);%转化为句柄形式
f1=matlabFunction(diff(h));%weishixian
X(1)=x;
i=2;
while 1
    X(i)=X(i-1)-lamda*f(X(i-1))/f1(X(i-1));
    if abs(f(X(i)))<1e-6
        result=X(i);
        return;
    end
    if abs(f(X(i)))<abs(f(X(i+1)))
        lamda=1;
    else
        lamda=lamda/2;
    end
    if i> n
        result=X(i);
        return;
    end
    i=i+1;
end

%%弦截法

h=@(x) x.^3+x.^2-1;
[x,tol] = xianjie(h,[1,2],1000);

function [result,to]=xianjie(f,x,n)
if nargout==1
    flag=1;
elseif nargout==2
    flag=2;
end
x1=x(1);
x2=x(2);
i=1;
while i < n
    x3=x2-f(x2)*(x2-x1)/(f(x2)-f(x1));
    if abs(f(x3))<1e-6
        if flag==1
        result=x3;
        return;
        elseif flag==2
        result=x3;
        to=abs(f(x3));
        return;
        end   
    end
    x1=x2;
    x2=x3;
    i=i+1;
end

%%抛物线法

h=@(x) x.^3+x.^2-1;
[x,tol] = paowuxian(h,[-5,0,5]);

function [result,tol]=paowuxian(h,x)
if nargout==1||nargout==0
    flag=1;
elseif nargout==2
    flag=2;
end
f=h;
x1=x(1);
x2=x(2);
x3=x(3);
while 1
    y1=f(x1);
    y2=f(x2);
    y3=f(x3);
    f1=lagrange([x1,x2,x3],[y1,y2,y3]);
    a=f1(1);b=f1(2);c=f1(3);
    if b^2-4*a*c<=0
        disp('初值不合适');
        result=[];
        tol=[];
        return;
    end
        x4_1=(-b+sqrt(b^2-4*a*c))/(2*a);
        x4_2=(-b-sqrt(b^2-4*a*c))/(2*a);
        if abs(x1-x4_1)<abs(x2-x4_2)
            x4=x4_1;
        else
            x4=x4_2;
        end
        if abs(f(x4))<1e-6
            if flag==1||flag==0
                result=x4;
                return;
            elseif flag==2
                result=x4;
                tol=abs(f(x4));
                return;
            end
        end
        x1=x2;
        x2=x3;
        x3=x4;
end

%% fzero
% 用法1
x1=fzero('x.^2-2',1);%根趋近于1
x2=fzero('x.^2-2',[0,3]);%根在【0,3】区间里
%用法二
x3=fzero(@myfun,2)
%新建一个脚本文件
% function y=myfun(x)
% y=x.^2-2+x.^3;

fun=@(x) x.^2-2+x.^3;
x4=fzero(fun,2);

options=optimset('Display','Final')%notify
fun=@(x) x.^2-2+x.^3;
x5=fz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值