1、下图是需要求解的线性方程组。
2、打开MATLAB,利用左除法(\)求解上述线性方程组。输入如下代码:close allclear allclc% MATLAB左除法(\)求解线性方程组,A = [1 2 3-1 3 79 0 3]b = [1 4 7]'x = A\b。
3、保存和运行上述代码,利用左除法(\)得到线性方程组的解。
4、用求逆法(inv)求解线性方程组,输入如下代码:close allclear allclc,% MATLAB求逆法(inv)求解线性方程组,% A是线性方程组等号左边系数构成的矩阵。
5、保存和运行上述代码,利用求逆法(inv)得到线性方程组的解如下。
6、最后,可以看到左除法(\)和求逆法(inv)求得的线性方程组解是一样的。
拉格朗日function y=lagrange(x0,y0,x)n=length(x0)m=length(x)for i=1:mz=x(i) s=0.0 for k=1:np=1.0 for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j)) endends=p*y0(k)+s endy(i)=send SOR迭代法的Matlab程序 function [x]=SOR_iterative(A,b)% 用SOR迭代求解线性方程组,矩阵A是方阵x0=zeros(1,length(b))% 赋初值tol=10^(-2)% 给定误差界N=1000 % 给定最大迭代次数[n,n]=size(A)% 确定矩阵A的阶w=1% 给定松弛因子k=1 % 迭代过程while k<=Nx(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1) for i=2:nx(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i) endif max(abs(x-x0))<=tolfid = fopen('SOR_iter_result.txt', 'wt') fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n') fprintf(fid,'迭代次数: %d次\n\n',k) fprintf(fid,'x的值\n\n') fprintf(fid, '%12.8f \n', x) break endk=k+1 x0=x endif k==N+1 fid = fopen('SOR_iter_result.txt', 'wt') fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n') fprintf(fid,'迭代次数: %d次\n\n',k) fprintf(fid,'超过最大迭代次数,求解失败!') fclose(fid) end Matlab中龙格-库塔(Runge-Kutta)方法原理及实现龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。该算法是构建在数学支持的基础之上的。龙格库塔方法的理论基础来源于泰勒公式和使用斜率近似表达微分,它在积分区间多预计算出几个点的斜率,然后进行加权平均,用做下一点的依据,从而构造出了精度更高的数值积分计算方法。如果预先求两个点的斜率就是二阶龙格库塔法,如果预先取四个点就是四阶龙格库塔法。一阶常微分方程可以写作:y'=f(x,y),使用差分概念。(Yn+1-Yn)/h= f(Xn,Yn)推出(近似等于,极限为Yn')Yn+1=Yn+h*f(Xn,Yn)另外根据微分中值定理,存在0<t<1,使得Yn+1=Yn+h*f(Xn+th,Y(Xn+th))这里K=f(Xn+th,Y(Xn+th))称为平均斜率,龙格库塔方法就是求得K的一种算法。利用这样的原理,经过复杂的数学推导(过于繁琐省略),可以得出截断误差为O(h^5)的四阶龙格库塔公式:K1=f(Xn,Yn)K2=f(Xn+h/2,Yn+(h/2)*K1)K3=f(Xn+h/2,Yn+(h/2)*K2)K4=f(Xn+h,Yn+h*K3)Yn+1=Yn+h*(K1+2K2+2K3+K4)*(欢迎分享,转载请注明来源:内存溢出
评论列表(0条)