数理方程基于matlab的数值解法

合集下载

MATLAB方程与方程组的数值解ppt课件

MATLAB方程与方程组的数值解ppt课件
注意函数适用的范围。
4
第二节 MATLAB求解方程(组)的 函数及其用法
5
一、左除”\”与右除”/”
在MATLAB环境中,强烈建议使用左除”\”或者右除”/”解线性方程组 左除和右除是根据除号左侧还是右侧是分母而定的,方程系数矩阵 在未知数左侧,则用左除,反之用右除。使用左除”\”或者右除”/”的 好处是因为其对线性方程(组)的广泛适用性,当未知数个数大于方程 个数的时候,左除或右除会给出方程的特解,结合null函数,可以得 到通解。当未知数个数小于方程个数的时候,左除或右除会给出方 程的最小二乘解。
12
二、 MATLAB编程求解等额还款模型
➢ 给定月还款额、还款期数、贷款总额和利率计算到期剩余 贷款(AJfixPayment函数)
➢ 测试AJfixPayment 函数 ➢ 使用fsolve求出合适的月还款值,使得在120次还款后,
贷款余额为零。(SolveAJfixPayment函数)
13
r = roots(c)
其中输入参数: c: 多项式方程系数组成的行向量或者列向量,按降幂顺序排列。
函数输出参数: r: 多项式方程的解向量
参考: 【例11.2-4】8 Nhomakorabea四、 fsolve 函数
[x,fval,exitflag,output,jacobian] = fsolve(fun,x0,options) 其中输入参数:
Fun: 目标函数,一般用函数句柄形式给出 X0: 优化算法初始迭代解 Options: 参数设置(具体设置参考帮助文档) 输出参数: X: 最优解输出(或最后迭代解) Fval: 最优解(或最后迭代解)对应的函数值 Exitflag: 函数结束信息 (具体参考帮助文档 ) Output: 函数基本信息 包括迭代次数,目标函数最大计算次数,使 用的算法名称,计算规模 Jacobian:Jacobian矩阵(主要用来判断是否得到有效解)

基于MATLAB的常微分方程数值解法综述及经济模型

基于MATLAB的常微分方程数值解法综述及经济模型

财经研究19基于MATLAB 的常微分方程数值解法综述及经济模型刘 欣 刘颖华 李海明摘 要:本文对常微分方程初值问题现有的数值解法进行了综述研究。

常用的数值解法:即欧拉法,改进欧拉法,龙格库塔方法,阿达姆斯公式等。

对较为典型的微分方程模型进行数值求解,探讨了数值算法在建模问题中的应用。

关键词:MATLAB 常微分方程 数值解法 模型 引言 在工程技术问题中,经常需要求解常微分方程的初值问题 ()()00,dy f x y dx y x y ⎧=⎪⎨⎪=⎩ (1) 微分方程的数值解法是一种离散化方法。

求这些值称为初值问题的一个数值解。

数值解法的基本思想是求初值问题(1)的解y (x)在一系列等距节点:0123n x x x x x <<<<<处的近似值:0123,,,,,n y y y y y 。

其中相邻两个节点间的距离1i i h x x +=-称为步长,即节点0 (0,1,2,)k x x kh k n =+= 。

1、数值求解法简介常微分方程的数值求解方法很多,常用的有欧拉(Euler)方法、休恩(Heun)方法、龙格-库塔(Runge-Kutta)法。

1.1 欧拉(Euler)方法根据泰勒(Taylor)定理,如果函数,,y y y '''连续,()()()0001,t y t hf t y y +=为欧拉逼近,将区间[a, b]分成M个等距的子区间,子区间的长度即为步长h=(b-a)/M,t k+1= t k +h。

重复上述欧拉逼近过程:()1112,y t hf y y +=;()2223,y t hf y y +=;这些点就是对曲线y=y(t)的逼近。

在(t 1, y 1)点,重复上述步骤,得到(t 2,y 2),….,最后得到(t N , y N )。

步长取得越小,越逼近精确解。

1.2 休恩(Heun)方法对微分方程()y t f dt dy ,=从t 0到t 1积分,利用初始条件()00y t y =,得到 ()()()()()011010',t y t y dt t y dt t y t f tt t t -==⎰⎰→()()()()⎰+=1,01t t dt t y t f t y t y本方法需用欧拉方法作为预报值,并结合梯形公式(()()[]b f a f a b S +-=21)进行校正,即()()()1111,,2+++++=k k k k k k p t f y t f h y y 可见,用休恩方法要比用欧拉方法收敛快。

数值分析中求解线性方程组的MATLAB程序(6种)

数值分析中求解线性方程组的MATLAB程序(6种)

数值分析中求解线性方程组的MATLAB程序(6种)1.回溯法(系数矩阵为上三角)function X=uptrbk(A,B)%求解方程组,首先化为上三角,再调用函数求解[N,N]=size(A);X=zeros(N,1);C=zeros(1,N+1);Aug=[A B];for p=1:N-1[Y,j]=max(abs(Aug(p:N,p)));C=Aug(p,:);Aug(p,:)=Aug(j+p-1,:);Aug(j+p-1,:)=C;if Aug(p,p)==0'A was singular.No unique solution.'break;endfor k=p+1:Nm=Aug(k,p)/Aug(p,p);Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1);endendD=Aug;X=backsub(Aug(1:N,1:N),Aug(1:N,N+1));2.系数矩阵为下三角function x=matrix_down(A,b)%求解系数矩阵是下三角的方程组n=length(b);x=zeros(n,1);x(1)=b(1)/A(1,1);for k=2:1:nx(k)=(b(k)-A(k,1:k-1)*x(1:k-1))/A(k,k);end3.普通系数矩阵(先化为上三角,在用回溯法)function X=uptrbk(A,B)%求解方程组,首先化为上三角,再调用函数求解[N,N]=size(A);X=zeros(N,1);C=zeros(1,N+1);Aug=[A B];for p=1:N-1[Y,j]=max(abs(Aug(p:N,p)));C=Aug(p,:);Aug(p,:)=Aug(j+p-1,:);Aug(j+p-1,:)=C;if Aug(p,p)==0'A was singular.No unique solution.'break;endfor k=p+1:Nm=Aug(k,p)/Aug(p,p);Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1);endendD=Aug;X=backsub(Aug(1:N,1:N),Aug(1:N,N+1));4.三角分解法function [X,L,U]=LU_matrix(A,B)%A是非奇异矩阵%AX=B化为LUX=B,L为下三角,U为上三角%程序中并没有真正解出L和U,全部存放在A中[N,N]=size(A);X=zeros(N,1);Y=zeros(N,1);C=zeros(1,N);R=1:N;for p=1:N-1[max1,j]=max(abs(A(p:N,p)));C=A(p,:);A(p,:)=A(j+p-1,:);A(j+p-1,:)=C;d=R(p);R(p)=R(j+p-1);R(j+p-1)=d;if A(p,p)==0'A is singular.No unique solution'break;endfor k=p+1:Nmult=A(k,p)/A(p,p);A(k,p)=mult;A(k,p+1:N)=A(k,p+1:N)-mult*A(p,p+1:N);endendY(1)=B(R(1));for k=2:NY(k)=B(R(k))-A(k,1:k-1)*Y(1:k-1);endX(N)=Y(N)/A(N,N);for k=N-1:-1:1X(k)=(Y(k)-A(k,k+1:N)*X(k+1:N))/A(k,k);endL=tril(A,-1)+eye(N)U=triu(A)5.雅克比迭代法function X=jacobi(A,B,P,delta,max1);%雅克比迭代求解方程组N=length(B);for k=1:max1for j=1:NX(j)=(B(j)-A(j,[1:j-1,j+1:N])*P([1:j-1,j+1:N]))/A(j,j);enderr=abs(norm(X'-P));relerr=err/(norm(X)+eps);P=X';if (err<delta)|(relerr<delta)breakendendX=X';k6.盖斯迭代法function X=gseid(A,B,P,delta,max1);%盖斯算法,求解赋初值的微分方程N=length(B);for k=1:max1for j=1:Nif j==1X(1)=(B(1)-A(1,2:N)*P(2:N))/A(1,1);elseif j==NX(N)=(B(N)-A(N,1:N-1)*(X(1:N-1))')/A(N,N);elseX(j)=(B(j)-A(j,1:j-1)*X(1:j-1)-A(j,j+1:N)*P(j+1:N))/A(j,j);endenderr=abs(norm(X'-P));relerr=err/(norm(X)+eps);P=X';if (err<delta)|(relerr<delta)break;endendX=X';k。

用matlab求这个方程的数值解

用matlab求这个方程的数值解

用matlab求这个方程的数值解:y''-(1-y^2)y'+y=0, y(1)=2,y(2)=0, x?[0,20],麻烦把程序编出来l84232525 11级分类:电脑/网络被浏览78次 2013.04.02用matlab求这个方程的数值解:y''-(1-y^2)y'+y=0, y(1)=2,y(2)=0,x?[0,20],麻烦把程序编出来宝台木莲官采纳率:44% 10级 2013.04.03这是你们老师出的题目吧,这个例子在好多书上都出现过。

具体如下:function dydt = v dp1(t,y) dydt = [y(2); (1-y(1)^2)*y(2)-y(1)]; end 保存函数文件[t,y] = ode45(@vdp1,[0 20],[2; 0]); %This example uses @ to pass vdp1 as a function handle to ode45. T he resulting output is a column vector of time points t and a solution array y.Each row in y corresponds to a time returned in the corresponding row of t. 作图:You can simply use the plot command to view the solver output:plot(t,y(:,1),'-',t,y(:,2),' --') xlabel('time t'); ylabel('solution y'); legend('y_1','y_2')0.001y'''+0.11y''+y'+10y=10 初值X=0,y=0 要三阶微分方程的推导公式,如果有程序可以加分。

第八章基于MATLAB的科学计算—常微分方程数值解法

第八章基于MATLAB的科学计算—常微分方程数值解法

第八章基于MATLAB的科学计算—常微分方程数值解法第八章主要介绍了基于MATLAB的科学计算中的常微分方程数值解法。

常微分方程是数学中一个重要的领域,它研究的是一种未知函数的导数与
自变量之间的关系。

在实际问题中,常微分方程常常被用来描述物理系统、化学反应等现象。

在科学计算中,常微分方程的数值解法是一种常用的计算方式。

本章
首先介绍了常微分方程的基本概念和形式,包括一阶和高阶常微分方程的
定义和求解方法。

然后,详细介绍了数值解法中的欧拉方法、中点方法和
四阶龙格-库塔方法等。

欧拉方法是常微分方程数值解法中最简单的一种方法,它以初始条件
为基础,通过逐步逼近的方式求解方程。

中点方法在欧拉方法的基础上进
行了改进,通过使用两个点的平均斜率来逼近函数的斜率。

四阶龙格-库
塔方法是常微分方程数值解法中最常用的一种方法,它通过使用多个点的
斜率,以及加权平均值的方式来求解方程。

本章还介绍了MATLAB中的常微分方程求解工具箱,包括ode45、
ode23等函数,这些函数可以方便地求解各种不同类型的常微分方程。

MATLAB的求解工具箱提供了多种求解常微分方程的方法,用户可以根据
实际需求选择合适的方法。

总之,本章内容涵盖了基于MATLAB的科学计算中常微分方程数值解
法的基本概念和求解方法。

掌握这些知识,可以帮助科学计算中的研究人
员和工程师更好地理解和应用常微分方程数值解法,在实际问题中进行精
确的数值计算和模拟。

matlab化解方程

matlab化解方程

matlab化解方程用MATLAB求解方程是一种常见的数值计算方法,它可以帮助我们快速而准确地求解各种复杂的数学方程。

本文将介绍如何使用MATLAB 解决方程,并通过实例演示其应用。

我们要明确需要解决的方程是什么。

假设我们有一个一元二次方程,形如ax^2 + bx + c = 0,其中a、b、c是已知的系数。

我们的目标是求出方程的解x。

我们需要在MATLAB中定义方程的系数a、b、c。

我们可以使用变量来表示它们,例如a = 1,b = 2,c = 1。

接下来,我们可以使用MATLAB中的根函数来求解方程的解。

根函数可以接受一个多项式方程的系数作为输入,并返回方程的根。

在这个例子中,我们可以使用根函数来求解一元二次方程的解。

在MATLAB中,根函数的语法是roots(coef),其中coef是一个包含方程系数的向量。

在我们的例子中,coef = [a b c],即coef = [1 2 1]。

在MATLAB命令窗口中输入roots([1 2 1]),即可得到方程的解。

在这个例子中,方程的解为x = -1。

除了使用roots函数外,MATLAB还提供了其他一些求解方程的函数。

例如,如果我们需要求解非线性方程组,可以使用fsolve函数。

如果我们需要求解常微分方程,可以使用ode函数。

除了使用MATLAB内置的函数外,我们还可以使用MATLAB的符号计算工具箱来求解方程。

符号计算工具箱可以帮助我们进行符号计算,得到方程的精确解。

使用符号计算工具箱求解方程需要先定义方程的符号变量。

在MATLAB中,我们可以使用syms函数来定义符号变量。

例如,我们可以使用syms x来定义变量x为符号变量。

接下来,我们可以使用solve函数来求解方程。

solve函数可以接受一个或多个方程作为输入,并返回方程的解。

在我们的例子中,我们只有一个方程,即x^2 + 2x + 1 = 0。

我们可以使用solve函数来求解方程的解。

实验二_基于Matlab的微分方程数值解法

实验二_基于Matlab的微分方程数值解法

实验二微分方程数值解法一.实验原理及实验内容:对微分方程描述的控制系统,利用欧拉法、二阶龙格-库塔法、四阶龙格-库塔法分别编写M文件,进行数值计算和作图。

1.分别用欧拉法、二阶龙格-库塔法、四阶龙格-库塔法求下面系统的输出响应y(t)在0≤t≤1上,h=0.1时的数值解。

'2,(0)1=-=y y y要求保留4位小数,并将三种方法的结果与真解2=进行比较。

()ty t e-2.若为如2y y y==何编程计算?',(0)1二.实验仪器:计算机Matlab软件三.实验数据记录:程序一:disp('欧拉算法');y=1;h=0.1;for i=0:0.1:1disp(y);y=y+h*(-2*y);enddisp('欧拉算法');ydisp('精确解');yy=exp(-2*t)h=0.1;disp('函数的2阶数值解为');disp('y=');y=1;for t=0:h:1;disp(y);k1=-2*y;k2=-2*(y+k1*h);y(i+1)=y(i)+(k1+k2)*h*1/2;endh=0.1;disp('函数的4阶数值解为');disp('y=');y=1;for t=0:h:1;disp(y);k1=-2*y;k2=-2*(y+k1*h*1/2);k3=-2*(y+k2*h*1/2);k4=-2*(y+k3*h);y=y+h*1/6*(k1+2*k2+2*k3+k4); end>>程序2:t=0:0.1:1;n=length(t);y(1)=1;h=0.1;for i=1:n-1y(i+1)=y(i)+h*(y(i)*y(i)); enddisp('欧拉算法');ydisp('精确解');yy=exp(-2*t)h=0.1;disp('函数的2阶数值解为');disp('y=');y=1;for t=0:h:1;disp(y);k1=y*y;k2=(y+k1*h)^2;y=y+(k1+k2)*h*1/2;endh=0.1;disp('函数的4阶数值解为');disp('y=');y=1;disp(y);k1=y*y;k2=(y+k1*h*1/2)^2;k3=(y+k2*h*1/2)^2;k4=(y+k3*h)^2;y=y+h*1/6*(k1+2*k2+2*k3+k4); end。

matlab方程组数值解法

matlab方程组数值解法

matlab方程组数值解法Matlab方程组数值解法随着科学技术的发展,数值计算在科学研究和工程实践中的应用越来越广泛。

对于复杂的数学模型,通过解析方法求得准确的解析解往往是困难的甚至不可能的。

因此,数值解法成为了求解这些问题的重要手段之一。

Matlab作为一种强大的数值计算工具,提供了多种数值解法来解决方程组的数值求解问题。

在Matlab中,求解方程组的数值解法主要包括直接法和迭代法两种。

直接法是指通过一系列直接计算来求解方程组的解,常见的方法有高斯消元法和LU分解法。

迭代法则是通过迭代计算来逼近方程组的解,常见的方法有雅可比迭代法和高斯-赛德尔迭代法。

高斯消元法是一种经典的直接法,它通过消元和回代的方式将方程组化为简化的三角方程组,然后通过回代计算得到解。

Matlab中提供了直接调用的函数,如"linsolve"函数,可以直接求解线性方程组。

对于非线性方程组,可以通过牛顿法等迭代法来求解。

LU分解法是另一种常用的直接法,它将方程组的系数矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积,然后通过回代计算得到解。

在Matlab中,可以使用"lu"函数进行LU分解,并通过"\"运算符求解线性方程组。

雅可比迭代法是一种简单而有效的迭代法,它通过迭代计算逐步逼近方程组的解。

在每一步迭代中,通过将方程组中的每个未知数的迭代解代入到方程组中的对应方程中,得到新的近似解。

通过多次迭代,可以得到逼近方程组解的解向量。

在Matlab中,可以使用"jacobi"函数进行雅可比迭代。

高斯-赛德尔迭代法是雅可比迭代法的改进版,它在每一步迭代中使用上一步迭代得到的未知数的新近似解。

这样可以更快地逼近方程组的解。

在Matlab中,可以使用"gauss_seidel"函数进行高斯-赛德尔迭代。

除了这些常见的数值解法外,Matlab还提供了其他一些数值求解函数,如"fsolve"函数可以求解非线性方程组,"ode45"函数可以求解常微分方程组等。

matlab求解二元一次方程组的数值解

matlab求解二元一次方程组的数值解

matlab求解二元一次方程组的数值解摘要:一、引言二、Matlab中求解二元一次方程组的常用方法1.直接法2.迭代法3.数值方法三、数值方法的原理及应用1.雅可比迭代法2.托马斯迭代法3.平方根法四、实例演示1.编写Matlab程序2.输出结果及分析五、结论与展望正文:一、引言二元一次方程组是数学中的一种基本问题,而在工程、科学等领域中也广泛存在。

求解二元一次方程组的数值解是Matlab编程中的常见任务,本文将介绍在Matlab中求解二元一次方程组的常用方法及实例演示。

二、Matlab中求解二元一次方程组的常用方法直接法是通过高斯消元法求解二元一次方程组。

在Matlab中,可以使用`gesdd`函数直接求解。

例如:```matlabA = [1, 2; 3, 4];b = [5; 6];x = gesdd(A, b);```2.迭代法迭代法是通过不断更新变量来求解方程组。

在Matlab中,可以使用`fsolve`函数进行迭代求解。

例如:```matlabA = [1, 1; 1, 1];b = [2; 3];x0 = [1; 1];x = fsolve(@(x) A*x == b, x0);```3.数值方法数值方法包括雅可比迭代法、托马斯迭代法、平方根法等。

在Matlab 中,可以使用`fsolve`函数结合数值方法求解。

例如:```matlabA = [1, 1; 1, 1];x0 = [1; 1];options = optimoptions("fsolve", "Display", "on", "Tolerance", 1e-6);x = fsolve(@(x) A*x == b, x0, options);```三、数值方法的原理及应用1.雅可比迭代法雅可比迭代法是基于雅可比矩阵的迭代公式进行求解。

在Matlab中,可以使用自定义函数实现。

基于Matlab语言的数理方程解的可视化01

基于Matlab语言的数理方程解的可视化01

基于Matlab 语言的数理方程解的可视化马 列(玉溪师范学院理学院物理系08级物理1班 云南玉溪 653100) 指导老师:倪永勤摘要:介绍Matlab 语言在数学物理方程中的运用,并将数理方程的解用Matlab 编程语言的形式表达出来,在采用Matlab 软件中的绘图工具展示出来,使原本枯燥难懂的数学物理方程的解变得形象直观,有助于物理系学生的学习和教师的教学。

关键词:Matlab 数理方程 可视化1、引言数学物理方法是物理系及其他理工可学生的基础课程之一,其课程内容多而难,题目繁而杂,是一门公认的较难的课程。

在教学过程中,主要是采用公式推导,大量的讲解和演算,所得结果往往是一个复杂的积分或级数,甚至还有一些比较特殊的函数。

尽管数学物理方法的习题通常都有明确的物理意义,可是怎样才能使学生从眼花缭乱的数学表达式中看出其中所表达的物理图像?这不仅是物理系学生的困惑,也是老师们的棘手问题。

在解决这一问题的过程中,不同的教师或学生有不同的方法,有的可能会利用C 语言,有的也会使用FORTRAN 语言,但应用最广泛的还是Matlab 语言。

Matlab 是一个集数学运算、图形处理、程序设计和系统建模的著名语言软件,具有功能强大、使用简单和编程简短易调试的优点。

主要介绍Matlab 在数理方程中的应用,并将数理方程的解可视化,让老师易教省事,学生易学易懂。

介绍了运用MATLAB 求解数理方程中的几类简单的方程:复变函数、波动方程、热传导方程,并用动画的形式演示了方程的解析解。

2、复变函数图形2.1 在Matlab 指令窗口键入复变函数 下面举几个例子: 2.1.1 )sin(ib a + 2.1.2 )1ln(-2.1.3 z sh z ch 22-2.1.4zib iaz e sin -在指令窗中,按下面的格式输入有关的指令,就能得出结果,在此,>>为指令提示符,ans后的内容是计算机输出的结果。

matlab数值求解方程

matlab数值求解方程

matlab数值求解方程Matlab是一种强大的数学软件工具,可以用于数值求解各种复杂的方程。

在本文中,我们将探讨如何使用Matlab来数值求解方程的方法和技巧。

让我们来看一个简单的一元方程的例子。

假设我们要求解方程x^2 - 4 = 0。

我们可以使用Matlab中的solve函数来求解这个方程。

代码如下:```matlabsyms xeqn = x^2 - 4 == 0;sol = solve(eqn, x);disp(sol);```这段代码首先定义了一个符号变量x,并且将方程x^2 - 4 = 0赋值给变量eqn。

然后,调用solve函数来求解方程eqn,并将结果赋值给变量sol。

最后,使用disp函数将求解结果输出到屏幕上。

运行这段代码,我们可以得到方程的解x = -2和x = 2。

接下来,让我们来看一个更复杂的方程组的例子。

假设我们要求解方程组x + y = 5和x - y = 1。

我们可以使用Matlab中的fsolve 函数来求解这个方程组。

代码如下:```matlabfun = @(x) [x(1) + x(2) - 5; x(1) - x(2) - 1];x0 = [0; 0];sol = fsolve(fun, x0);disp(sol);```这段代码首先定义了一个匿名函数fun,该函数接受一个向量x作为输入,返回一个向量,其中第一个元素是方程x + y - 5的值,第二个元素是方程x - y - 1的值。

然后,定义了一个初始解向量x0,将其传递给fsolve函数,以便求解方程组fun。

最后,使用disp函数将求解结果输出到屏幕上。

运行这段代码,我们可以得到方程组的解x = 3和y = 2。

除了使用solve函数和fsolve函数外,Matlab还提供了许多其他数值求解方程的函数和工具。

例如,我们可以使用fzero函数来求解单变量非线性方程,使用lsqnonlin函数来求解非线性最小二乘问题,使用ode45函数来求解常微分方程等等。

MATLAB在数理方程的应用

MATLAB在数理方程的应用

MATLAB在数理方程的应用欧峥 2011326660117 11应数一班一、MATLAB在解偏微分方程中的应用应用MATLAB 求解数学物理方程,可通过编程或直接利用偏微分方程工具箱求解,直接利用偏微分方程工具箱更为简单、方便。

在数理方程课上我们学习解矩形域方程的问题:例如:在矩形域-0.5<x<0.5,-0.5<y<0.5 上求解Δu=-2,且u 在边界上的值为零。

利用偏微分方程工具箱求解过程如下:(1)启动偏微分方程求解界面。

(2)在MATLAB 命令窗口中键入pderect ([-0.5 0.5 -0.5 0.5]), 选择Boundary→Remove All SubdomainBorders 菜单项,得出偏微分方程的求解区域。

(3)单击偏微分方程界面工具栏中的PDE 图标,选择其中的Parabolic 选项,将给定的偏微分方程的参数输入到该对话框中。

(4)边界条件由Boundary 菜单下的Specify Boundary conditions 确定,输入边界条件h=1,r=0。

(5)单击工具栏等号按钮,得到偏微分的解,单击图形设置按钮,得出如图1所示的结果。

MATLAB程序如下:clear allpderect([-0.5 0.5 -0.5 0.5 ]); %微分方程的求解区域h1=1,r=0; %初始条件二、MATLAB在解特殊方程中的应用:例如:画出第一类贝塞尔函数J15 (x)的曲线分布。

MATLAB 语句为:x=0:0.01:50 %求解范围plot(x,BESSELJ(15,x)) %函数语句,输出图形运行结果如图3所示。

图3贝塞尔函数(15 阶)J15 (x)的曲线分布三、MATLAB在傅里叶变换的应用在MATLAB语言中使用fourier函数来实现Fourier变换。

首先定义符号变量t描述时域表达式f,直接调用fourier函数就可求出所需的时域函数的Fourier变换式。

matlab数值解方程

matlab数值解方程

matlab数值解方程MATLAB是一种高级的数值计算软件,它非常适合数学求解问题。

MATLAB有一个非常强大的数值解方程工具箱,可以帮助人们解决各种复杂的方程问题。

在本文中,我们将介绍如何使用MATLAB数值解方程。

MATLAB数值解方程是通过迭代法或牛顿迭代法求解非线性方程或方程组的解。

它可以求解非线性方程组,线性方程组,常微分方程,偏微分方程等。

MATLAB数值解方程可以通过以下步骤进行:1. 定义方程在MATLAB中,通常使用symbolic工具箱来定义方程。

使用syms函数定义变量,并使用等于号将方程左边与右边连接。

例如,要定义以下方程:x ^ 2 + 3 * x - 2 = 0使用以下代码:syms xf = x ^ 2 + 3 * x - 2;2. 求解方程使用solve函数来求解方程。

该函数的输入参数是方程变量和方程,输出是方程的根。

例如,使用以下代码求解上述方程:x = solve(f)执行后,MATLAB将返回方程的根,即[-3.3029, 0.3029]。

3. 解非线性方程组使用fsolve函数可以求解非线性方程组,它可以将一个或多个非线性方程组等效于可用函数语法的单一函数。

示例如下:x0 = [0,0];[x,fval] = fsolve(@(x)[x(1)^2+x(2)^2-1, exp(x(1))-x(2)], x0)其中,x0为初始猜测,@(x)表示匿名函数,包含需要求解的方程组。

4. 解线性方程组使用linsolve函数可以求解线性方程组,它可以将系数矩阵和常数矢量作为输入,并返回解向量。

示例如下:A = [1 2 3; 4 5 6; 7 8 0];B = [3; 6; 9];X = linsolve(A,B)其中,A为系数矩阵,B为常数矢量。

5. 解常微分方程使用ode45函数(一种常用的MATLAB求解常微分方程框架函数)来求解常微分方程。

该函数需要一个匿名函数作为输入,该函数返回微分方程的右侧。

MATLAB求解方程解析解和数值解

MATLAB求解方程解析解和数值解

辽宁工程技术大学上机实验报告用MATLAB求解质点振动方程振动是日常生活和工程技术中常见的一种运动形式。

利用常系数线性微分方程的理论来讨论有关自由振动和强迫振动的相关问题。

利用MATLAB数学软件大致可分四类情况:(1)无阻尼自由振动情况;(2)有阻尼自由振动;(3)无阻尼强迫振动;(4)有阻尼强迫振动求其数值解和解析解;MATLAB软件求解微分方程解析解的命令“ dsolve() ”求通解的命令格式:(’微分方程’自变量'注:微分方程在输入时,一阶导数y'应输入Dy,y'应输入D2y等,D应大写。

1, 无阻尼自由振动情况:常见的数学摆的无阻尼微小振动方程代码如下:>> t=0:pi/50:2*pi;>> y=2*s in( 3*t+2);>>plot(t,y,'b')2 ! ----------------- B------------------ , ------------------- p ----------------- , ------------------ , ------------------- , -----------------1.5 -\ ;1X ; '| - '■' ■I,°.5 ■-! I-0.5 --1 ■-\ : ■-1.5-2 ........................ ....................................................................................................................0 1 2 3 4 5 6 72, 有阻尼自由振动由无阻尼振动的通解可以看出,无阻尼振动是按照正弦规律运动的,摆动似乎可以无限期的进行下去,但事实上,空气从在阻力,在运动时,我们必须把空气阻力考虑在内,所以我们得到有阻尼摆动方程为:记u/m=2n,g/l=w A2,这里n,w是正常数,所以:y=dsolve('D2y+2* n*Dy+wA2*y=0','t'); ( 4.43)解得:y = C3*exp(-t*(n + ((n + w)*(n - w))A(1/2))) + C2*exp(-t*(n - ((n + w)*(n - w))A(1/2)))(1)小阻尼情形:n<w时,方程(4.43)的通解为:y=exp(-n*t)*(c1*cos(w1*t)+c2*si n(w1*t))和前面无阻尼的情形一样,可以把上式的通解改写为一下形式:y=A*exp(-n*t)*si n(w1*t+Q), (4.45)这里的A,Q为任意常数。

Matlab一般方程数值求解 solve

Matlab一般方程数值求解 solve

Matlab一般方程数值求解solveMATLAB为我们求解方程及方程组提供了便利条件.1 任意函数方程与线性方程组MATLAB命令输人格式:solve('eqqu1','equ2',...'equN')或 solve('eqqu1','equ2',...'equN','val1','val2'...,'valN')其中eqni表示第i个方程,vari表示第i个变量,i=1,2,…,N.1.一般方程例如,求解方程 x x^2+b*x+c=0输入:solve('x^2+b*x+c')输出:-1 -1/2*b+1/2*(b^2-4*c)^(1/2)-1/2*b-1/2*(b^2-4*c)^(1/2)注意:如果不能求得精确的符号解,可以计算可变精度的数值解.2.多项式方程除了用上面求解一般方程的方法外,还可以直接用求解多项式方程的MATLAB函数roots(p),其中p是多项式的系数按降幂排列所形成的n+l维列向量,它能够给出全部根(包含重根)。

求解多项式方程x^9+x^8+1=0输入:p=[1,1,0,0,0,0,0,0,0,1];输出:-l.213-0.9017+0.5753 i-0.9017-0.5753 i-0.2694+0.9406 i-0.2694-0.9406 i0.4168+0.8419 i0.4168-0.8419i0.8608+0.3344i0.8608-0.3344i注意:也可以用solve求解,有何区别?3.线性方程组除了使用MATLAB函数solve以外,还可以用其他的MATLAB 命令.如果将线性方程组写成矩阵形式AX=b,就可以考虑用几种形式之一求解.linsolve(A,b);sym(A)\sym(b);A\b;inv(A)*b;pinv(A)*b其中inv(A)表示A的逆矩阵,因此要求A为方阵且可逆;pinv (A)表示 A的广义逆矩阵,A可以为任意矩阵.*************************************************************** ******想:以上MATLAB函数均可以对任意的线性方程组求解,不管有解,无解、有一个还是有无穷多.它们有何区别?A\b:提示1)当Ax=b有唯一解时,给出该唯一解;2)当其有无穷多解时,给出其中零元素最多的一组解;3)当其无解时,给出一个最小二乘(广义)解.pinv(A)*b:当AX=b有无穷多解时,给出其中一个最小范数解;其他两种情形与A\b相同.linsolve(A,b):对齐次方程组,等价于A\b.sym(A)\sym(b):linsolve(A,b)相同.考虑以下几个求解线性方程组AX=b的例子:1)A=[4 1 0;l -1 5;2 2 -3],b=[6; 14; -3];2)A=[4 3 0;3 4 -l;0 -1 4],b=[24;30;-24];3)A=hilb(12),b=sum(A)';或A=hilb(20),b=sum(A)’.其中hilb(n)表示N阶希尔伯特矩阵分析:1)此例中rank(A)=rank(A|b)=2<3,说明方程组有无穷多解;2)此例中rank(A)=rank(A|b)=3,说明方程组有唯一解;3)此例是希尔伯特方程,rank(A)=rank(A|b)=n,说明方程组有唯一解。

matlab解方程数值解

matlab解方程数值解

matlab解方程数值解一、前言MATLAB是一款强大的数学软件,可以用于解决各种数学问题,包括解方程。

在本文中,我们将详细介绍如何使用MATLAB进行方程的数值解。

二、MATLAB中的方程求解函数MATLAB中有多种函数可以用于求解方程,例如fzero、fsolve和vpasolve等。

这些函数的使用方法略有不同,但都可以用于求解方程。

1. fzero函数fzero函数是用于寻找单个变量非线性函数的根。

该函数需要输入一个函数句柄和一个初始猜测值,并返回根的估计值。

例如,要求解方程x^2-2=0,在MATLAB中可以使用以下代码:```f = @(x) x^2 - 2;x0 = 1;x = fzero(f,x0);```其中,@符号表示创建一个匿名函数句柄f,x0为初始猜测值,x为返回的根的估计值。

2. fsolve函数fsolve函数是用于求解多个非线性方程组的根。

该函数需要输入一个包含多个非线性方程的匿名函数句柄和一个初始猜测向量,并返回根向量。

例如,要求解以下非线性方程组:```x^2 + y^2 - 4 = 0exp(x) + y - 1 = 0```在MATLAB中可以使用以下代码:```f = @(x) [x(1)^2 + x(2)^2 - 4; exp(x(1)) + x(2) - 1];x0 = [1;1];x = fsolve(f,x0);```其中,f为一个包含两个非线性方程的匿名函数句柄,x0为初始猜测向量,x为返回的根向量。

3. vpasolve函数vpasolve函数是用于求解符号方程的数值解。

该函数需要输入一个符号方程和一个变量,并返回该变量的数值解。

例如,要求解方程sin(x) + x^2 = 0,在MATLAB中可以使用以下代码:```syms xeqn = sin(x) + x^2 == 0;sol = vpasolve(eqn,x);```其中,syms关键字表示将变量x声明为符号变量,eqn为符号方程,sol为返回的数值解。

Matlab方程的求解

Matlab方程的求解

Matlab方程的求解Matlab是一个广泛使用的数学编程环境,它提供了许多强大的数值计算功能,包括求解各种数学方程。

以下是一些关于如何在Matlab中求解方程的基本步骤。

步骤1:启动Matlab首先,你需要打开Matlab。

你可以在Windows、macOS或Linux等操作系统上安装和使用Matlab。

步骤2:创建方程在Matlab中求解方程的第一步是创建方程。

例如,如果你想求解以下线性方程:2x + 3y = 104x - y = 14你可以在Matlab中输入这些方程如下:eq1 = 2x + 3y == 10;eq2 = 4*x - y == 14;步骤3:使用solve函数求解方程接下来,你可以使用Matlab中的solve函数来求解这些方程。

solve函数可以找到使方程为零的变量值。

你可以输入以下命令来求解上述方程:sol = solve([eq1, eq2], [x, y]);在这个例子中,sol是一个包含解的对象,x和y是未知数,eq1和eq2是包含已知数的方程列表。

这个命令会找到满足这两个方程的x和y的值。

步骤4:显示解你可以使用以下命令来查看解:disp(sol)这将显示包含解的对象sol的属性。

例如,它可能会显示以下内容:x = 1.0000 + 2.0000i y = 3.0000 + 2.0000i这表明x的值为1+2i,y的值为3+2i。

如果你需要的是实数解,可以通过以下方法获得:x_real = real(sol.x); y_real = real(sol.y);disp([x_real, y_real])以上就是在Matlab中求解方程的基本步骤。

需要注意的是,对于一些更复杂的方程或者非线性方程,可能需要使用其他的Matlab函数或者额外的工具箱来求解。

在处理复杂的数学问题时,Matlab的文档和帮助功能可以提供更多的信息和帮助。

matlab数值求解方程

matlab数值求解方程

matlab数值求解方程使用MATLAB进行数值求解方程可以帮助我们快速而准确地找到方程的解。

MATLAB是一种功能强大的科学计算软件,它提供了许多数值求解算法和工具,可以帮助我们解决各种数学问题。

在使用MATLAB进行数值求解方程之前,我们首先需要定义方程。

方程可以是一元方程或多元方程,可以是线性方程或非线性方程。

无论方程的形式如何,MATLAB都可以通过数值方法求解。

在MATLAB中,求解方程的一种常用方法是使用fsolve函数。

该函数可以找到方程的数值解,并给出一个接近解的初值。

使用fsolve 函数时,我们需要提供一个函数句柄,该函数句柄描述了方程的形式。

例如,对于一元方程f(x)=0,我们可以定义一个函数句柄f,然后使用fsolve(f, x0)来求解方程。

除了fsolve函数,MATLAB还提供了其他一些数值求解方程的函数,如fzero函数和vpasolve函数。

这些函数在不同的求解场景中具有不同的优势和适用性。

根据具体的问题和求解要求,我们可以选择合适的函数进行求解。

在使用MATLAB进行数值求解方程时,我们需要注意一些问题。

首先,初值的选择对求解结果的影响很大,不同的初值可能导致不同的解。

因此,在选择初值时,我们可以通过绘制方程的图像或使用数值分析方法来估计初值的范围和接近解的位置。

对于非线性方程,方程的解可能不止一个,我们需要注意区间的选择和解的个数。

在一些情况下,方程可能没有解或者有无穷多个解。

因此,在使用MATLAB进行求解时,我们需要对方程的解的存在性和唯一性进行分析。

MATLAB的数值求解方法是基于迭代的,求解的精度和收敛速度与迭代的次数和初始值的选择有关。

因此,在使用MATLAB进行数值求解时,我们需要注意收敛性和稳定性的问题,以及迭代次数的控制和结果的评估。

MATLAB是一种强大的数值求解工具,在科学计算和工程应用中具有广泛的应用。

通过合理选择数值求解方法和初值,我们可以使用MATLAB快速而准确地求解各种类型的方程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数理方程数值解法与其在matlab软件上的实现张体强1026222 廖荣发1026226[摘要]数学物理方程的数值解在实际生活中越来越使用,首先基于偏微分数值解的思想上,通过matlab软件的功能,研究其数学物理方程的数值解,并通过对精确解和数值解进行对比,追究其数值解的可行性,在此,给出相关例子和程序代码,利于以后的再次研究和直接使用。

[关键字]偏微分方程数值解matlab 数学物理方程的可视化一:研究意义在我们解数学物理方程,理论上求数学物理方程的定解有着多种解法,但是有许多定解问题却不能严格求解,只能用数值方法求出满足实际需要的近似解。

而且实际问题往往很复杂,这时即便要解出精确解就很困难,有时甚至不可能,另一方面,在建立数学模型时,我们已作了很多近似,所以求出的精确解也知识推导出的数学问题的精确解,并非真正实际问题的精确解。

因此,我们有必要研究近似解法,只要使所求得的近似解与精确解之间的误差在规定的范围内,则仍能满足实际的需要,有限差分法和有限元法是两种最常用的求解数学物理方程的数值解法,而MATLAB 在这一方面具有超强的数学功能,可以用来求其解。

二:数值解法思想和步骤2.1:网格剖分为了用差分方法求解上述问题,将求解区域{}(,)|01,01x t x t Ω=≤≤≤≤作剖分。

将空间区间[0,1]作m 等分,将时间[0,1]区间作n 等分,并记1/,1/,,0,,0j k h m n x jh j m t k k n ττ===≤≤=≤≤。

分别称h 和τ为空间和时间步长。

用两簇平行直线,0,,0j k x x j m t t k n =≤≤=≤≤将Ω分割成矩形网格。

2.2:差分格式的建立0u u t x∂∂-=∂∂………………………………(1) 设G 是,x t 平面任一有界域,据Green 公式(参考数学物理方程第五章):()()Gu udxdt udt udx t xΓ∂∂-=--∂∂⎰⎰ 其中G Γ=∂。

于是可将(1)式写成积分守恒形式:()0udt udx Γ--=⎰ (2)我们先从(2)式出发构造熟知的Lax 格式设网格如下图所示图1取G 为以(1,)A j k +,(1,1)B j k ++,(1,1)C j k -+和(1,)D j k -为顶点的矩形。

T ABCD = A 为其边界,则()()()()()DABCABCDudt udx u dx u dx u dt u dt Γ--=-+-+-+-⎰⎰⎰⎰⎰ (3)右端第一个积分用梯形公式,第二个积分用中矩形公式,第三、四个积分用下矩形公式,则由(2)(3)式得到Lax-Friedrich 格式111111()202k k k k k j j j j j u u u u u hτ+-+-+-+-+=截断误差为()[]k k kj h j j R u L u Lu =-111111()22k k k k k k k j j j j j j j u u u u u u u h t xτ+-+-+-+-∂∂=+-+∂∂232223(),(0,0)26kkjj u u h O h j m k n t xττ∂∂=-=+≤≤≤≤∂∂ 所以Lax-Friedrich 格式的截断误差的阶式2()O h τ+ 令/s h τ=:则可得差分格式为111111(),(0,0)222k k k kk j j j j j s s u u u u u j m k n +--++=-+++≤≤≤≤ 0cos()(0)j j u x j m π=≤≤k+10cos(),cos(),(0)k k k m k u t u t k n ππ==-≤≤2.3差分格式的求解差分格式111111(),(0,0)222k k k k k j j j j j s s u u u u u j m k n +--++=-+++≤≤≤≤写成如下矩阵形式:1011121211110000022221100022221100000022220000000000000k k k k k k m m k m k m s s u u s s u u u us s u u +++---⎛⎫-+ ⎪⎛⎫⎛⎫ ⎪ ⎪ ⎪ ⎪-+ ⎪ ⎪ ⎪⎪ ⎪ ⎪= ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪-+ ⎪ ⎪ ⎪ ⎪⎪ ⎪ ⎪⎝⎭⎝⎭ ⎪ ⎪⎝⎭则需要通过对k 时间层进行矩阵作用求出k+1时间层。

对上面的矩阵形式我通过C++(或matlab )编出如附录的程序求出数值解、真实解和误差。

例1:如下方程0,01,0 1.(,0)cos(),0 1.(0,)(1,)cos(),0 1.u ux t t xu x x x u t u t t t ππ∂∂-=≤≤≤≤∂∂=≤≤=-=≤≤ 利用 matlab 的数值解法结果并填入表中关系对比如下:表11/900,1/1000(0.9h s τ===)从上面可以看出,数值解精度相当高的三:matlab的在数学物理方程上简单的应用Matlab是一个强大的计算工具,超强的计算能力和绘图能力,下面几个例题来说明matlab数学物理上的应用例1:将函数1/(1-a)2在z=0 处展成幂级数。

解:>>syms a;>>Taylor (1/(1-a)^2,0)ans =1+2*a+3*a^2+4*a^3+5*a^4+6*a^5例2:写出函数f(x)=1/(x2+p2 )(a>0)的Fourier 变换式。

解:>>syms x w;>>syms a potitive>>f=1/(x^2+p^2);>>F=Fourier (f,x,w)F=pi*(signum(0,Re(p),0)*cosh(p*w)-2*Heaviside(w)*sinh(p*w)+sinh(p*w))/p例2:已知函数f(x)=x3 e-x,试求取该函数的Laplace 变换,并对结果进行Laplace 反变换。

解:>>syms x w;>>f=x^3*exp(-x);>>F=laplace(f,x,w)F=6/(w+1)^4对得出的结果进行Laplace 反变换,从而有>>ilaplace(F)ans=x^3*exp(-x)利用手工方法对函数进行Fourier 变换和Laplace 变换,计算起来繁琐、复杂,且容易出错,利用MATLAB 快速、准确。

四:matlab解数学物理方程4.1:数值解法与精确解的可视化对比分析以下面的问题为例子(课本原题)根据上面的可建立方程如下:根据分离变量和差分其图形结果如下:图2 分离变量热传导图3 差分热传导其代码如下:图2x=0:0.1*pi:pi;y=0:0.4:10;[x,t]=meshgrid(x,y);u=0;m=length(j);%matlab可计算的最大数,相当于无穷for i=0:mu=u+8*(-1)^i/(pi*(2*i+1)^2)*(sin((2*i+1)/2*x).*exp(-(2*i+1)^2/ 4*t));end;surf(x,t,u);xlabel('x'),ylabel('t'),zlabel('T');title(' 分离变量法(无穷)');disp(u);图3u=zeros(20,100); %t=1 x=pi 20行100列横坐标为x 纵坐标为t s=(1/100)/(pi/20)^2;fprintf('稳定性系数S为:\n');disp(s);for i=1:20u(i,1)=i/20*pi;;end;for j=1:100u(1,j)=0;endfor j=1:99for i=2:19u(i,j+1)=s*u(i+1,j)+(1-2*s)*u(i,j)+s*u(i-1,j);endendfor j=1:100u(20,j)=u(19,j);end;disp(u);[x,t]=meshgrid(1:100,1:20);surf(x,t,u);xlabel('t'),ylabel('x'),zlabel('T');title(' 有限差分法解');从上面可以看出数值解法精度很高,图形基本完全一样的4.2 :matlab实现数值解法以下面的方程为例基本步骤:(1)区域的离散或子区域的划分;(2)插值函数的选择;(3)方程组的建立;(4)方程组的求解。

a=input(' 请输入系数a 的值:');l=input(' 请输入长度l 的值:');M=input(' 请输入将区间[0,l]等分的个数M:');ot=input(' 请输入时间增量ot 的值:');n=input(' 请输入运行次数n 的值:');ox=l/M;x0=zeros(M+1,1);for ii=1:Mx0(ii+1)=ii*ox;endu=sin(pi*x0/l);%t=0 时u(x,t)的值r=a^2*ot/(ox)^2;for ii=1:n%数据的输入B=zeros(M-1,1);%存放系数矩阵主对角线元素A=zeros (M-2,1);%存放系数矩阵主对角线元素下方次对角线的元素C=zeros (M-2,1);%存放系数矩阵主对角线元素上方次对角线的元素S=zeros(M-1,1);%存放右端的常数项for ii=1:M-2B(ii)=1+2*r;A(ii)=-r;C(ii)=-r;S(ii)=u(ii+1,1);endB(M-1)=1+2*r;S(M-1)=u(M,1);u(1,2)=0;u(M+1, 2)=0;S(1,1)=S(1,1)+r*u(1,2);S(M-1,1)=S(M-1,1)+r*u (M+1,2);%追赶法S(1)=S(1)/B(1);T=B(1);k=2;while k~=MB(k-1)=C(k-1)/T;T=B(k)-A(k-1)*B(k-1);S(k)=(S(k)-A(k-1)*S(k-1))/T;k=k+1;endk=1;while k~=M-1S(M-1-k)=S(M-1-k)-B(M-1-k)*S(M-k);k=k+1;endu(2:M,2)=S; %把结果放入矩阵u 中u(:,1)=u(:,2);% 过河拆桥end%计算精确值,存放在u 的第二列for x=0:Mu(x+1,2)=exp(-(pi*a/l)^2*n*ot)*sin(pi*x*ox/l); end%计算最大相对误差ez=zeros(M-1,1);for ii=2:Mez(ii-1)=abs(u(ii,1)-u(ii,2))/u(ii,2);endE=max(ez);fprintf (' 最后时刻数值解与精确解分别为:\n');disp (u);fprintf (' 差分法得到的结果与正确结果的最大相对误差为:');disp([num2str(E*100) '%']);%画二维图比较plot(x0,u(:,1),'r:',x0,u(:,2),'b-');legend(' 数值解',' 精确解')xlabel('x'),ylabel('u(x,t)')title(' 最后时刻热传导问题数值解与精确解比较')。

相关文档
最新文档