数值计算方法matlab程序
- 格式:doc
- 大小:80.50 KB
- 文档页数:32
Matlab中常用的数值计算方法数值计算是现代科学和工程领域中的一个重要问题。
Matlab是一种用于数值计算和科学计算的高级编程语言和环境,具有强大的数值计算功能。
本文将介绍Matlab中常用的数值计算方法,包括数值积分、数值解微分方程、非线性方程求解和线性方程组求解等。
一、数值积分数值积分是通过数值方法来近似计算函数的定积分。
在Matlab中,常用的数值积分函数是'quad'和'quadl'。
'quad'函数可以用于计算定积分,而'quadl'函数可以用于计算无穷积分。
下面是一个使用'quad'函数计算定积分的例子。
假设我们想计算函数f(x) = x^2在区间[0, 1]上的定积分。
我们可以使用如下的Matlab代码:```f = @(x) x^2;integral = quad(f, 0, 1);disp(integral);```运行这段代码后,我们可以得到定积分的近似值,即1/3。
二、数值解微分方程微分方程是描述自然界各种变化规律的数学方程。
在科学研究和工程应用中,常常需要求解微分方程的数值解。
在Matlab中,可以使用'ode45'函数来求解常微分方程的数值解。
'ode45'函数是采用基于Runge-Kutta方法的一种数值解法。
下面是一个使用'ode45'函数求解常微分方程的例子。
假设我们想求解一阶常微分方程dy/dx = 2*x,初始条件为y(0) = 1。
我们可以使用如下的Matlab代码:```fun = @(x, y) 2*x;[x, y] = ode45(fun, [0, 1], 1);plot(x, y);```运行这段代码后,我们可以得到微分方程的数值解,并绘制其图像。
三、非线性方程求解非线性方程是指方程中包含非线性项的方程。
在很多实际问题中,我们需要求解非线性方程的根。
Matlab中的数值计算方法简介引言:Matlab是一种强大的数值计算软件,广泛应用于工程、科学、金融等领域。
它拥有丰富的数值计算方法库,可以帮助研究者和工程师解决各种数值计算问题。
本文将简要介绍几种常见的数值计算方法,并说明它们在Matlab中的实现和应用。
一、插值法插值法是一种通过已知数据点之间的插值,估计未知数据点的数值的方法。
常见的插值方法包括线性插值、拉格朗日插值和样条插值。
在Matlab中,我们可以使用interp1函数进行插值计算。
该函数可以根据给定的数据点,计算出在指定位置的插值结果。
我们可以通过设置插值的方法和插值节点的数目来调整插值的精度与计算效率。
二、数值积分数值积分是一种通过近似求解定积分的方法。
在Matlab中,我们可以使用quad和quadl函数进行数值积分。
这些函数可以自动选择合适的数值积分方法,并提供了较高的精度和计算效率。
我们只需提供被积函数和积分区间,即可获得近似的积分结果。
对于一些特殊形式的积分,如复杂函数或无穷积分,Matlab还提供了相应的函数供我们使用。
三、线性方程组求解线性方程组的求解是数值计算中的一个重要问题。
在实际应用中,我们经常会遇到大规模线性方程组的求解问题。
在Matlab中,我们可以使用矩阵运算功能和线性方程组求解函数来解决这类问题。
Matlab提供了一系列的求解函数,包括直接法和迭代法。
其中,直接法适用于小规模线性方程组,迭代法则适用于大规模线性方程组。
我们可以根据具体情况选择合适的方法和函数来求解线性方程组。
四、微分方程求解微分方程是许多科学和工程问题的数学模型,求解微分方程是数值计算中的常见任务。
在Matlab中,我们可以使用ode45函数来求解常微分方程的初值问题。
该函数采用龙格-库塔方法,对微分方程进行数值积分,并给出近似的解析结果。
对于偏微分方程和其他更复杂的微分方程问题,Matlab还提供了更多的求解函数和工具箱供我们使用。
五、最优化问题求解最优化问题是指在特定约束条件下,求解给定目标函数的最大值或最小值的问题。
如何使用MATLAB进行数值计算使用MATLAB进行数值计算一、引言数值计算是现代科学与工程领域中不可或缺的一部分,它能够解决许多实际问题,包括求解方程、优化问题和模拟实验等。
而MATLAB作为一种功能强大的数值计算软件,被广泛应用于各个领域。
本文将介绍如何使用MATLAB进行数值计算,并结合实例进行说明。
二、MATLAB基础首先,我们需要了解MATLAB的基本操作和语法,以便能够熟练运用。
MATLAB使用矩阵和数组来存储和处理数据,因此,熟悉矩阵和数组操作是非常重要的。
MATLAB中的矩阵和数组是通过方括号来定义的,例如:A = [1 2 3; 4 5 6; 7 8 9]表示一个3x3的矩阵A,其中每个元素由空格或分号隔开。
我们可以使用括号或索引来访问矩阵中的元素。
例如,要访问矩阵A的第二行第三列的元素,可以使用A(2,3)。
MATLAB提供了大量内置的数学函数,包括算术运算、三角函数、指数和对数函数等。
这些函数可以直接应用于矩阵和数组,简化了数值计算的过程。
三、方程求解方程求解是数值计算中的一个重要任务,MATLAB提供了多种方法来求解方程,包括代数方法和数值方法。
1. 代数方法对于一些简单的方程,例如一元一次方程或二次方程,可以直接使用MATLAB内置的解方程函数进行求解。
例如,对于一元一次方程ax + b = 0,可以使用solve函数来求解。
代码示例:syms x;eqn = a*x + b == 0;sol = solve(eqn, x);其中,syms x;指定x为符号变量,eqn为方程表达式,sol为方程的解。
2. 数值方法对于一些复杂的方程,无法用解析方法求解。
这时,可以使用数值方法来近似求解。
MATLAB提供了多种数值求解方法,包括二分法、牛顿法和割线法等。
这些方法可以通过迭代逼近的方式求解方程的根。
代码示例:f = @(x) x^2 - 4;x0 = 2;x = fzero(f, x0);其中,f为方程的表达式,x0为初始猜测值,x为方程的根。
MATLAB中的数学计算方法详解在科学研究和工程领域中,数学计算方法的应用是不可避免的。
MATLAB作为一种强大的数学工具,提供了丰富的数学函数和算法,为用户提供了便捷的数学计算方式。
本文将详细介绍MATLAB中常用的数学计算方法,包括数值计算、符号计算以及优化算法等。
一、数值计算方法数值计算是MATLAB中应用最广泛的数学计算方法之一。
它通过将数值代入数学模型,利用数值逼近的方式求得近似解。
MATLAB提供了各种数值计算函数,如插值、积分、微分等。
下面我们将介绍其中几种常用的数值计算方法。
1. 插值方法插值是一种通过已知数据点来估计未知数据点的方法。
在MATLAB中,可以使用interp1函数实现一维数据的插值。
该函数支持多种插值方法,例如线性插值、样条插值等。
用户只需提供已知的数据点和插值点,即可得到插值结果。
2. 数值积分方法数值积分是计算定积分近似值的方法。
在MATLAB中,可以使用quad函数来进行一维定积分计算。
该函数采用自适应的数值积分算法,能够适应不同类型的函数。
用户只需提供被积函数和积分区间,即可得到积分结果。
3. 数值微分方法数值微分是计算函数导数的方法。
在MATLAB中,可以使用diff函数对函数进行数值微分。
该函数可以计算一阶和二阶导数,还支持多点数值微分和符号数值微分。
通过数值微分,可以方便地求得函数在给定点的导数近似值。
二、符号计算方法符号计算是指在计算过程中处理符号表达式而不是数值。
MATLAB的Symbolic Math Toolbox提供了强大的符号计算功能,可以进行代数操作、求解方程、求导、积分等。
下面我们将介绍几种常用的符号计算方法。
1. 代数操作在MATLAB中,可以使用符号计算功能进行代数操作,如多项式求解、多项式展开、多项式化简等。
通过定义符号变量和符号表达式,可以进行各种代数计算,方便用户进行复杂的代数操作。
2. 方程求解MATLAB的符号计算工具箱提供了solve函数用于求解方程。
Matlab提供了多种数值计算方法,以下是其中一些常用的方法:
1. 整数计算:Matlab中的计算方式和计算器类似,可以直接输入数值然后加上运算符进行运算。
2. 小数计算:小数计算的方式和整数相似。
3. 分数计算:Matlab可以切换至分数模式,这一点较计算器等具有较大优势。
4. 赋值运算:Matlab中除了和计算器一样直接运算,还能进行赋值运算,直接将其中一个值赋值后,带入运算即可。
5. 多重赋值运算:Matlab在数值计算的时候,还支持多重赋值计算。
这样可以很方便的求解列出的问题。
以上内容仅供参考,建议查阅Matlab官方文档获取更全面和准确的信息。
一、介绍龙格库塔法龙格库塔法(Runge-Kutta method)是一种数值计算方法,用于求解常微分方程的数值解。
它通过多步迭代的方式逼近微分方程的解,并且具有较高的精度和稳定性。
二、龙格库塔法的原理龙格库塔法采用迭代的方式来逼近微分方程的解。
在每一步迭代中,计算出当前时刻的斜率,然后根据这个斜率来求解下一个时刻的值。
通过多步迭代,可以得到微分方程的数值解。
三、龙格库塔法的公式龙格库塔法可以表示为以下形式:k1 = f(tn, yn)k2 = f(tn + h/2, yn + h/2 * k1)k3 = f(tn + h/2, yn + h/2 * k2)k4 = f(tn + h, yn + h * k3)yn+1 = yn + h/6 * (k1 + 2k2 + 2k3 + k4)其中,k1、k2、k3、k4为斜率,h为步长,tn为当前时刻,yn为当前时刻的解,yn+1为下一个时刻的解。
四、使用matlab实现龙格库塔法在MATLAB中,可以通过编写函数来实现龙格库塔法。
下面是一个用MATLAB实现龙格库塔法的简单例子:```matlabfunction [t, y] = runge_kutta(f, tspan, y0, h)t0 = tspan(1);tf = tspan(2);t = t0:h:tf;n = length(t);y = zeros(1, n);y(1) = y0;for i = 1:n-1k1 = f(t(i), y(i));k2 = f(t(i) + h/2, y(i) + h/2 * k1);k3 = f(t(i) + h/2, y(i) + h/2 * k2);k4 = f(t(i) + h, y(i) + h * k3);y(i+1) = y(i) + h/6 * (k1 + 2*k2 + 2*k3 + k4);endend```以上就是一个简单的MATLAB函数,可以利用该函数求解给定的微分方程。
如何在MATLAB中进行数值计算在科学计算领域,MATLAB被广泛应用于数值计算,它提供了强大而简便的工具和函数,可以帮助科学家们进行复杂的数学计算和数据分析。
本文将介绍如何在MATLAB中进行数值计算,并探讨一些常用的技巧和技术。
MATLAB中的数值计算是通过矩阵和向量运算来实现的,因此熟悉矩阵运算和向量操作是使用MATLAB进行数值计算的关键。
首先,让我们来看看如何定义和操作矩阵和向量。
在MATLAB中,可以使用矩阵和向量来存储和操作多个数值。
矩阵是一个二维数组,而向量是一个一维数组。
通过使用方括号和逗号来定义矩阵和向量。
例如,以下是一个3x3的矩阵的定义:A = [1, 2, 3; 4, 5, 6; 7, 8, 9];可以通过使用A(i, j)的形式来访问矩阵中的元素,其中i和j分别表示行和列的索引。
例如,要访问第二行第三列的元素,可以使用A(2, 3)。
向量可以通过类似的方式定义,只需要使用一个维度。
例如,以下是一个包含5个元素的行向量的定义:v = [1, 2, 3, 4, 5];可以使用v(i)的形式来访问向量中的元素,其中i表示索引。
例如,要访问第四个元素,可以使用v(4)。
在进行数值计算时,通常需要进行一些基本的运算,如加法、减法、乘法和除法。
在MATLAB中,这些运算可以直接应用于矩阵和向量。
加法运算可以使用加号来实现。
例如,要将两个矩阵A和B相加,可以使用以下代码:C = A + B;减法运算可以使用减号来实现。
例如,要将矩阵A减去矩阵B,可以使用以下代码:D = A - B;乘法运算可以使用乘号来实现。
例如,要将矩阵A乘以矩阵B,可以使用以下代码:E = A * B;除法运算可以使用除号来实现。
例如,要将矩阵A除以矩阵B,可以使用以下代码:F = A / B;除了基本的运算,MATLAB还提供了很多其他的函数和工具箱,可以帮助进行更复杂的数值计算和数据分析。
例如,MATLAB提供了一些常用的数学函数,如幂函数、指数函数、对数函数、三角函数等等。
数值计算方法matlab程序嘿,朋友们!今天咱就来聊聊数值计算方法和那厉害的 Matlab 程序呀!你说数值计算方法像不像一个神奇的魔法盒子呀,里面装满了各种奇妙的技巧和算法。
它能帮我们解决好多好多复杂的数学问题呢!不管是求解方程,还是处理数据,它都能大显身手。
而 Matlab 程序呢,就像是这个魔法盒子的钥匙!有了它,我们就能轻松地打开这个盒子,尽情地利用里面的宝贝。
你想想看呀,当我们面对那些让人头疼的数学式子,自己手动去算得算到啥时候呀。
但有了 Matlab,那可就不一样啦!它能快速又准确地给出结果,就像有个超级聪明的小助手在帮我们干活。
比如说,我们要算一个很复杂的函数的积分。
要是自己去慢慢算,可能头发都要掉光啦!可 Matlab 呢,几下子就给我们搞定了,这多厉害呀!它还能绘制各种漂亮的图形呢!我们可以用它把那些抽象的数据变成直观的图像,一下子就能看出数据的规律和特点。
这就好比把一堆乱麻整理得清清楚楚,明明白白。
而且呀,Matlab 学起来也不难哦!只要我们用心去学,多练习练习,很快就能掌握它的基本用法啦。
到时候呀,我们就可以像个小魔法师一样,轻松地运用数值计算方法和 Matlab 程序解决各种难题。
咱再说说它的实用性吧。
在很多领域,比如工程、科学研究、金融等等,都离不开数值计算方法和 Matlab 呀。
工程师们用它来设计新产品,科学家们用它来分析实验数据,金融分析师们用它来预测市场趋势。
这可不是一般的厉害呀!你难道不想拥有这样一个强大的工具吗?让它帮你在学习和工作中更加得心应手。
总之呢,数值计算方法和 Matlab 程序就像是一对好搭档,它们能让我们的数学之旅变得轻松又有趣。
别再犹豫啦,赶紧去探索这个神奇的世界吧!相信你一定会爱上它们的!怎么样,还不赶紧去试试?。
MATLAB数值计算教程第一章:MATLAB入门1.1 MATLAB简介MATLAB(Matrix Laboratory)是一款强大的数值计算软件,广泛用于工程、科学和金融领域。
它的特点是简单易用、高效快速,并且拥有丰富的工具箱和函数库。
1.2 MATLAB环境搭建要使用MATLAB进行数值计算,首先需要安装MATLAB软件,并进行必要的配置。
通过官方网站下载安装程序,根据提示进行安装即可。
安装完成后,打开MATLAB环境,即可开始使用。
1.3 MATLAB基本操作在MATLAB环境中,可以通过命令行窗口输入和执行命令,也可以使用脚本文件进行批量处理。
常用的基本操作包括变量赋值、算术运算、函数调用等。
例如,使用"="符号赋值变量,使用"+"、"-"、"*"、"/"等符号进行算术运算。
第二章:向量和矩阵操作2.1 向量操作在MATLAB中,向量是一种特殊的矩阵,可以通过一组有序的元素构成。
向量可以进行基本的算术运算,如加法、减法、乘法、除法,还可以进行向量的点积、叉积等操作。
可以使用内置函数和运算符来实现。
2.2 矩阵操作矩阵是MATLAB中最常用的数据结构之一,使用矩阵可以进行多个向量的组合和运算。
可以进行矩阵的加法、减法、乘法、除法等操作,也可以进行矩阵的转置、求逆、求特征值等操作。
MATLAB提供了大量的函数和工具箱来支持矩阵的操作。
第三章:数值计算方法3.1 数值积分数值积分是一种用数值方法计算定积分的方法。
在MATLAB 中,可以使用内置函数来进行数值积分,如trapz函数和quad函数。
也可以使用Simpson法则、复合辛普森法等方法实现数值积分。
3.2 数值微分数值微分是一种用数值方法计算导数的方法。
在MATLAB中,可以使用内置函数进行数值微分,如diff函数和gradient函数。
function [x0,k]=bisect1(fun1,a,b,ep)if nargin<4ep=1e-5;endfa=feval(fun1,a);fb=feval(fun1,b);if fa*fb>0x0=[fa,fb];k=0;return;endk=1;while abs(b-a)/2>epx=(a+b)/2;fx=feval(fun1,x);if fx*fa<0b=x;fb=fx;elsea=x;fa=fx;endendx0=(a+b)/2;>> fun1=inline('x^3-x-1');>> [x0,k]=bisect1(fun1,1.3,1.4,1e-4)x0 =1.3247k =7>>简单迭代法function [x0,k]=iterate1(fun1,x0,ep,N)if nargin<4N=500;endif nargin<3ep=1e-5;endx=x0;x0=x+2*ep;while abs(x-x0)>ep & k<Nx0=x;x=feval(fun1,x0);k=k+1;endx0=x;if k==Nwarning('已达最大迭代次数')end>> fun1=inline('(x+1)^(1/3)'); >> [x0,k]=iterate1(fun1,1.5)x0 =1.3247k =7>> fun1=inline('x^3-1'); >> [x0,k]=iterate1(fun1,1.5)x0 =Infk =>>Steffesen加速迭代(简单迭代法的加速)function [x0,k]=steffesen1(fun1,x0,ep,N)if nargin<4N=500;endif nargin<3ep=1e-5;endx=x0;x0=x+2*ep;k=0;while abs(x-x0)>ep & k<Nx0=x;y=feval(fun1,x0);z=feval(fun1,y);x=x0-(y-x0)^2/(z-2*y+x0);k=k+1;endx0=x;if k==Nwarning('已达最大迭代次数')end>> fun1=inline('(x+1)^(1/3)');>> [x0,k]=steffesen1(fun1,1.5)x0 =1.3247k =3>> fun1=inline('x^3-1');>> [x0,k]=steffesen1(fun1,1.5)x0 =1.3247k =6Newton迭代function [x0,k]=Newton7(fname,dfname,x0,ep,N)if nargin<5N=500;endif nargin<4ep=1e-5;endx=x0;x0=x+2*ep;k=0;while abs(x-x0)>ep & k<Nx0=x;x=x0-feval(fname,x0)/feval(dfname,x0);k=k+1;endx0=x;if k==Nwarning('已达最大迭代次数')end>> fname=inline('x-cos(x)');>> dfname=inline('1+sin(x)');>> [x0,k]=Newton7(fname,dfname,pi/4,1e-8)x0 =0.7391k =4非线性方程求根的Matlab函数调用举例:1.求多项式的根:求f(x)=x^3-x-1=0的根:>> roots([1 0 -1 -1])ans =1.3247-0.6624 + 0.5623i-0.6624 - 0.5623i2.求一般函数的根>> fun=inline('x*sin(x^2-x-1)','x')fun =Inline function:fun(x) = x*sin(x^2-x-1)>> fplot(fun,[-2 0.1]);grid on>> x=fzero(fun,[-2,-1]) x =-1.5956>> x=fzero(fun,[-1 -0.1]) x =-0.6180[x,f,h]=fsolve(fun,-1.6) x =-1.5956f =1.4909e-009h =1(h>0表示收敛,h<0表示发散,h=0表示已达到设定的计算函数值的最大次数)第三章:线性方程组的数值解法1. 高斯消元法function [A,x]=gauss3(A,b)%本算法用顺序高斯消元法求解线性方程组n=length(b);A=[A,b];for k=1:n-1A((k+1):n,(k+1):(n+1))=A((k+1):n,(k+1):(n+1))-A((k+1):n,k)/A(k,k)*A(k,(k+1):(n+1));A((k+1):n,k)=zeros(n-k,1);A;endx=zeros(n,1);%上面为消元过程x(n)=A(n,n+1)/A(n,n);for k=n-1:-1:1x(k)=(A(k,n+1)-A(k,(k+1):n)*x((k+1:n)))/A(k,k);end%上面为回代过程>> A=[2 3 4;3 5 2;4 3 30];>> b=[6,5,32]'b =6532>> [A,x]=gauss3(A,b)A =2.00003.00004.0000 6.00000 0.5000 -4.0000 -4.00000 0 -2.0000 -4.0000x =-1382列选主元的高斯消元法:function [A,x]=gauss5(A,b)%本算法用列选主元的高斯消元法求解线性方程组n=length(b);A=[A,b];for k=1:n-1%选主元[ap,p]=max(abs(A(k:n,k)));p=p+k-1;if p>kt=A(k,:);A(k,:)=A(p,:);A(p,:)=t;end%消元A((k+1):n,(k+1):(n+1))=A((k+1):n,(k+1):(n+1))-A((k+1):n,k)/A(k,k)*A(k,(k+1):(n+1));A((k+1):n,k)=zeros(n-k,1);end%回代x=zeros(n,1);x(n)=A(n,n+1)/A(n,n);for k=n-1:-1:1x(k)=(A(k,n+1)-A(k,(k+1):n)*x((sk+1:n)))/A(k,k);end>> A=[2 3 4;3 5 2;4 3 30]; b=[6,5,32]';>> [A,x]=gauss5(A,b)A =4.0000 3.0000 30.0000 32.00000 2.7500 -20.5000 -19.00000 0 0.1818 0.3636x =-1382三角分解法:Doolittle 分解function [L,U]=doolittle1(A)n=length(A);U=zeros(n);L=eye(n);U(1,:)=A(1,:);L(2:n,1)=A(2:n,1)/U(1,1);for k=2:nU(k,k:n)=A(k,k:n)-L(k,1:k-1)*U(1:k-1,k:n);L(k+1:n,k)=A(k+1:n,k)-L(k+1:n,1:k-1)*U(1:k-1,n)/U(k,k); Endy=zeros(n,1);x=y;y(1)=b(1);for i=2:ny(i)=b(i)-L(i,1:i-1)*y(1:i-1);endx(n)=y(n)/U(n,n);for i=n-1:-1:1x(i)=(y(i)-U(i,i+1:n)*x(i+1:n))/U(i,i); end>> A=[1 2 3;2 5 2 ;3 1 5];b=[14 18 20]'; >> [L,U,x]=doolittle1(A,b)L =1 0 02 1 03 -8 1U =1 2 30 1 -40 0 -36x =2.83331.33332.8333平方根法:function [L,x]=choesky3(A,b)n=length(A);L=zeros(n);L(:,1)=A(:,1)/sqrt(A(1,1));for k=2:nL(k,k)=A(k,k)-L(k,1:k-1)*L(k,1:k-1)';L(k,k)=sqrt(L(k,k));for i=k+1:nL(i,k)=(A(i,k)-L(i,1:k-1)*L(k,1:k-1)')/L(k,k);endendy=zeros(n,1);x=y;y(1)=b(1)/L(1,1);for i=2:ny(i)=(b(i)-L(i,1:i-1)*y(1:i-1))/L(i,i);x(n)=y(n)/L(n,n);for i=n-1:-1:1x(i)=(y(i)-L(i+1:n,i)'*x(i+1:n))/L(i,i); end>> A=[4 -1 1;-1 4.25 2.75;1 2.75 3.5]A =4.0000 -1.0000 1.0000-1.0000 4.2500 2.75001.00002.75003.5000 >> b=[4 6 7.25]'b =4.00006.00007.2500[L,x]=choesky3(A,b)L =2.0000 0 0-0.5000 2.0000 00.5000 1.5000 1.0000x =11>>迭代法求方程组的解Jacobi迭代法:function [x,k]=jacobi2(a,b,x0,ep,N)%本算法用Jacobi迭代求解ax=b,用分量形式n=length(b);k=0;if nargin<5N=500;endif nargin<4ep=1e-5;endif nargin<3x0=zeros(n,1);y=zeros(n,1);endx=x0;x0=x+2*ep;while norm(x-x0,inf)>ep & k<Nk=k+1;x0=x;for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-a(i,j)*x0(j);endendif abs(a(i,i))<1e-10|k==Nwarning('a(i,i) is too small');returnendy(i)=y(i)/a(i,i);endx=y;enda=[4 3 0;3 4 -1; 0 -1 4];b=[24 30 -24]';[x,k]=jacobi2(a,b)x =3.00004.0000-5.0000k =59Gauss-seidel迭代法:function [x,k]=gaussseide2(a,b,x0,ep,N)%本算法用Gauss-seidel迭代求解ax=b,用分量形式n=length(b);k=0;if nargin<5N=500;endif nargin<4ep=1e-5;endif nargin<3x0=zeros(n,1);y=zeros(n,1);endx=x0;x0=x+2*ep;while norm(x-x0,inf)>ep & k<Nx0=x;y=x;for i=1:nz(i)=b(i);for j=1:nif j~=iz(i)=z(i)-a(i,j)*x(j);endendif abs(a(i,i))<1e-10|k==Nwarning('a(i,i) is too small');returnendz(i)=z(i)/a(i,i);x(i)=z(i);endend[x,k]=gaussseide2(a,b)x =3.0000-5.0000k =25最速下降法function [x,k]=zuisuxiajiang(A,b,x0,ep,N)%本算法用最速下降算法求解正定方程组Ax=b, n=length(b);if nargin<5N=500;endif nargin<4ep=1e-8;endif nargin<3x0=ones(n,1);endx=x0;x0=x+2*ep;r=b-A*x;d=r;k=0;while norm(x-x0,inf)>ep & k<Nk=k+1;x0=x;lamda=(d'*d)/(d'*A*d);x=x0+lamda*d;r=b-A*x;endif k==Nwarning('已达最大迭代次数')end共轭梯度算法function [x,k]=gongertidufa(A,b,x0,ep,N)%本算法用共轭梯度算法求解正定方程组Ax=b,,n=length(b);if nargin<5N=500;endif nargin<4ep=1e-8;endif nargin<3x0=ones(n,1);endx=x0;x0=x+2*ep;r=b-A*x;k=0;while norm(x-x0,inf)>ep & k<N k=k+1;x0=x;lamda=(r'*r)/(d'*A*d);r1=r;x=x0+lamda*d;r=b-A*x;beta=(r'*r)/(r1'*r1);d=r+beta*d;endif k==Nwarning('已达最大迭代次数') end常微分方程数值解function [x,y]=Euler1(fun,xspan,y0,h)%本算法用欧拉格式计算微分方程y'=f(x,y)的解。