基于Matlab编程用三种迭代格式对椭圆型方程的数值计算

基于Matlab编程用三种迭代格式对椭圆型方程的数值计算
基于Matlab编程用三种迭代格式对椭圆型方程的数值计算

《应用计算方法教程》matlab作业二

6-1 试验目的计算特征值,实现算法 试验容:随机产生一个10阶整数矩阵,各数均在-5和5之间。 (1) 用MATLAB 函数“eig ”求矩阵全部特征值。 (2) 用幂法求A 的主特征值及对应的特征向量。 (3) 用基本QR 算法求全部特征值(可用MATLAB 函数“qr ”实现矩阵的QR 分解)。 原理 幂法:设矩阵A 的特征值为12n ||>||||λλλ≥???≥并设A 有完全的特征向量系12,,,n χχχ???(它们线性无关),则对任意一个非零向量0n V R ∈所构造的向量序列1k k V AV -=有11()lim ()k j k k j V V λ→∞ -=, 其中()k j V 表示向量的第j 个分量。 为避免逐次迭代向量k V 不为零的分量变得很大(1||1λ>时)或很小(1||1λ<时),将每一步的k V 按其模最大的元素进行归一化。具体过程如下: 选择初始向量0V ,令1max(),,,1k k k k k k k V m V U V AU k m +===≥,当k 充分大时1111,max()max() k k U V χλχ+≈ ≈。 QR 法求全部特征值: 111 11222 111 ,1,2,3,k k k k k A A Q R R Q A Q R k R Q A Q R +++==????==??=???? ??????==?? 由于此题的矩阵是10阶的,上述算法计算时间过长,考虑采用改进算法——移位加速。迭 代格式如下: 1 k k k k k k k k A q I Q R A R Q q I +-=?? =+? 计算k A 右下角的二阶矩阵() () 1,1 1,() (),1 ,k k n n n n k k n n n n a a a a ----?? ? ??? 的特征值()()1,k k n n λλ-,当()()1,k k n n λλ-为实数时,选k q 为()()1,k k n n λλ-中最接近(),k n n a 的。 程序

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

Matlab在物理上的应用举例

1. 单列波 %%单列波 t=0:0.001:10; A=input('振幅A='); w=input('频率w='); a=input('a='); y=A.*sin(w.*t+a); plot(t,y); pause(1),sound(y); ylabel('y'),xlabel('t') 2. %%光的单缝衍射现象 Lambda=500e-9; % a=input('a='); % 可取0.2e-3,1e-3,2e-3三种情况z=1 % ymax=3*Lambda*z/a; % Ny=51; % ys=linspace(-ymax,ymax,Ny); % NPoints=51; % yPoint=linspace(-a/2,a/2,NPoints); % for j=1:Ny % L=sqrt((ys(j)-yPoint).^2+z^2); % Phi=2*pi.*(L-z)./Lambda; % SumCos=sum(cos(Phi)); % SumSin=sum(sin(Phi)); % B(j)=(SumCos^2+SumSin^2)/NPoints^2; % end clf,plot(ys,B,'*',ys,B);grid; % 3. %%用毕奥-沙伐尔定律计算电流环产生的磁场 mu0=4*pi*1e-7; I0=5.0;Rh=1; C0=mu0/(4*pi)*I0; NGx=21;NGy=21; x=linspace(-Rh,Rh,NGx); y=linspace(-3,3,20);y=x; Nh=20; theta0=linspace(0,2*pi,Nh+1); theta1=theta0(1:Nh); y1=Rh*cos(theta1); z1=Rh*sin(theta1); theta2=theta0(2:Nh+1); y2=Rh*cos(theta2); z2=Rh*sin(theta2);

计算方法_全主元消去法_matlab程序

%求四阶线性方程组的MA TLAB程序 clear Ab=[0.001 2 1 5 1; 3 - 4 0.1 -2 2; 2 -1 2 0.01 3; 1.1 6 2.3 9 4];%增广矩阵 num=[1 2 3 4];%未知量x的对应序号 for i=1:3 A=abs(Ab(i:4,i:4));%系数矩阵取绝对值 [r,c]=find(A==max(A(:))); r=r+i-1;%最大值对应行号 c=c+i-1;%最大值对应列号 q=Ab(r,:),Ab(r,:)=Ab(i,:),Ab(i,:)=q;%行变换 w=Ab(:,c),Ab(:,c)=Ab(:,i),Ab(:,i)=w;%列变换 n=num(i),num(i)=num(c),num(c)=n;%列变换引起未知量x次序变化for j=i:3 Ab(j+1,:)=-Ab(j+1,i)*Ab(i,:)/Ab(i,i)+Ab(j+1,:);%消去过程 end end %最后得到系数矩阵为上三角矩阵 %回代算法求解上三角形方程组 x(4)=Ab(4,5)/Ab(4,4); x(3)=(Ab(3,5)-Ab(3,4)*x(4))/Ab(3,3); x(2)=(Ab(2,5)-Ab(2,3)*x(3)-Ab(2,4)*x(4))/Ab(2,2); x(1)=(Ab(1,5)-Ab(1,2)*x(2)-Ab(1,3)*x(3)-Ab(1,4)*x(4))/Ab(1,1); for s=1:4 fprintf('未知量x%g =%g\n',num(s),x(s)) end %验证如下 %A=[0.001 2 1 5 1; 3 -4 0.1 -2 2;2 -1 2 0.01 3; 1.1 6 2.3 9 4]; %b=[1 2 3 4]'; %x=A\b; %x1= 1.0308 %x2= 0.3144 %x3= 0.6267 %x4= -0.0513

高斯-赛德尔迭代法matlab程序

disp('划分为M*M个正方形') M=5 %每行的方格数,改变M可以方便地改变剖分的点数 u=zeros(M+1);%得到一个(M+1)*(M+1)的矩阵 disp('对每个剖分点赋初值,因为迭代次数很高,所以如何赋初值并不重要,故采用对列线性赋值。') disp('对边界内的点赋初值并使用边界条件对边界赋值:') for j=1:M-1 for i=1:M-1 u(i+1,j+1)=100*sin(pi/M*j)/M*(M-i);%对矩阵(即每个刨分点)赋初值 end end for i=1:M+1 u(1,i)=100*sin(pi*(i-1)/M);%使用边界条件对边界赋值 u(1,M+1)=0; end u tic %获取运行时间的起点 disp('迭代次数为N') N=6 %迭代次数,改变N可以方便地改变迭代次数 disp('n为当前迭代次数,u为当前值,结果如下:') for n=1:N for p=2:M i=M+2-p; for j=2:M u(i,j)=0.25*(u(i,j-1)+u(i+1,j)+u(i-1,j)+u(i,j+1));%赛德尔迭代法 end end n %输出n u %输出u end disp('所用的时间:') t=toc %获取算法运行需要的时间 [x,y]=meshgrid(0:1/M:1,0:1/M:1); z=u(1,:); for a=2:M+1 z=[z;u(a,:)];%获取最终迭代的结果,幅值给z,z的值代表该点的点位值 end mesh(x,y,z)%绘制三维视图以便清楚地显示结果 mesh(x,y,z,'FaceColor','white','EdgeColor','black') %绘制三维视图以便清楚地显示结果

应用MATLAB求解经典物理若干典型问题_本科生毕业论文

应用MATLAB求解经典物理若干典型问题 大学本科生毕业论文 应用MATLAB求解经典物理若干典型问题The application of MATLAB in solving some classical physics questions

摘要 MATLAB是 MathWorks公司推出的一套科学计算软件,MATLAB的意思是矩阵实验室。MATLAB具有起点低、功能强大、易学易用以及兼有数值运算和符号运算功能的优点。利用MATLAB,绘图十分方便,它既可以绘制各种图形,包括二维图形和三维图形,还可以对图形进行修饰和控制。本文通过在MATLAB环境下编写通过科学计算解决经典物理问题,如力学、热学、电磁学中的一些常见问题。本文的思路主要是,先介绍经典物理习题,然后对习题进行分析,解答,再通过MATLAB 软件进行编程,模拟实验结果。通过多次验证。得到所需答案。再通过图形绘制,形象的描绘出图形,与预期结果进行比较、验证。作出总结。本文展示的MATLAB 软件在解决物理问题中的应用。 关键词:力学;热学;电磁学;MATLAB程序

ABSTRACT .MathWorks MATLAB is introduced in a scientific computing software, MATLAB means Matrix Laboratory . MATLAB has a low starting point, powerful, easy to use, and both numerical calculation and symbolic operation advantages. Using MATLAB, the drawing is very convenient, both to draw various graphics, including the two-dimensional graphics and three-dimensional graphics, graphics can also be modified and controlled. This article written by the MATLAB environment to solve by classical physics scientific computing problems, such as mechanical, thermal, electromagnetics some common problems. The main idea of this paper is to introduce classical physics problems, and then exercises to analyze, answer, and then programmed by MATLAB software to simulate the experimental results. Through multiple authentication. Get the answers you need. And through graphics rendering, the image depicts the graphics, compared with the expected results to verify. Conclusion. This article presents the MATLAB software to solve the problem of physics. Key Words:Mechanics;heat;electromagnetism,;MATLAB

lu分解法、列主元高斯法、jacobi迭代法、gaussseidel法的原理及matlab程序

一、实验目的及题目 1.1 实验目的: (1)学会用高斯列主元消去法,LU 分解法,Jacobi 迭代法和Gauss-Seidel 迭代法解线性方程组。 (2)学会用Matlab 编写各种方法求解线性方程组的程序。 1.2 实验题目: 1. 用列主元消去法解方程组: 1241234 123412343421233234x x x x x x x x x x x x x x x ++=??+-+=??--+=-??-++-=? 2. 用LU 分解法解方程组,Ax b =其中 4824012242412120620266216A --?? ?- ?= ? ?-??,4422b ?? ? ?= ?- ?-?? 3. 分别用Jacobi 迭代法和Gauss-Seidel 迭代法求解方程组: 123234 1231234102118311210631125x x x x x x x x x x x x x -+=-??-+=-??-+=??-+-+ =? 二、实验原理、程序框图、程序代码等 2.1实验原理 2.1.1高斯列主元消去法的原理 Gauss 消去法的基本思想是一次用前面的方程消去后面的未知数,从而将方程组化为等价形式: 1111221122222n n n n nn n n b x b x b x g b x b x g b x g +++=??++=????= ? 这个过程就是消元,然后再回代就好了。具体过程如下: 对于1,2, ,1k n =-,若() 0,k kk a ≠依次计算

()() (1)()()(1)()()/,,1, ,k k ik ik kk k k k ij ij ik kj k k k i i ik k m a a a a m a b b m b i j k n ++==-=-=+ 然后将其回代得到: ()() ()()()1/()/,1,2,,1 n n n n nn n k k k k k kj j kk j k x b a x b a x a k n n =+?=??=-=--? ? ∑ 以上是高斯消去。 但是高斯消去法在消元的过程中有可能会出现() 0k kk a =的情况,这时消元就无法进行了,即使主元数() 0,k kk a ≠但是很小时,其做除数,也会导致其他元素数量级的严重增长和舍入误差的扩散。因此,为了减少误差,每次消元选取系数矩阵的某列中绝对值最大的元素作为主元素。然后换行使之变到主元位置上,再进行销元计算。即高斯列主元消去法。 2.1.2直接三角分解法(LU 分解)的原理 先将矩阵A 直接分解为A LU =则求解方程组的问题就等价于求解两个三角形方程组。 直接利用矩阵乘法,得到矩阵的三角分解计算公式为: 1111111 11 1,1,2,,/,2,,,,,1,,,2,3, ()/,1,2, ,i i i i k kj kj km mj m k ik ik im mk kk m u a i n l a u i n u a l u j k k n k n l a l u u i k k n k n -=-===?? ==?? =-=+??=??=-=++≠?? ∑∑且 由上面的式子得到矩阵A 的LU 分解后,求解Ux=y 的计算公式为 11 111,2,3,/()/,1,2, ,1 i i i ij j j n n nn n i i ij j ii j i y b y b l y i n x y u x y u x u i n n -==+=??? =-=?? =??? =-=--?? ∑∑ 以上为LU 分解法。

MATLAB在物理中的应用(单摆).doc

<>课程论文 MATLAB在单摆实验中的应用 姓名蔡小强 学号:2010110102 专业:物理学 班级:10物理学 学院:物电学院 完成日期:2011/12/11

MATLAB在单摆实验中的应用 【摘要】借助MATLAB 计算软件, 研究无阻尼状态下单摆的大摆角运动, 给出了任意摆角下单摆运动周期的精确解。同时利用MATLAB 函数库中的ode45 函数, 求解出大摆角下的单摆的运动方程。并利用其仿真动画形象的展现出单摆的运动规律, 为单摆实验中大摆角问题的讲解提供了较好的教学辅助手段。 【关键字】单摆模型;周期;MATLAB 一、问题的提出 在工科物理教学中,物理实验极其重要,它担负着训练学生基本实验技能、验证学生所学知识、提高学生综合实力的重要职责。通过一系列的物理实验,学生可在一定程度上了解并掌握前人对一些典型物理量的经典测量方法和实验技术,并为以后的实验工作提供有价值的借鉴,进而培养学生的动手实践能力和综合创新能力。然而,物理实验的优劣很大程度受限于物理实验条件的制约。当前,受限于以下条件(很多情况下物理实验环境都是难以有效构造的),物理实验的效果并不理想:1)一些实验设备比较复杂并且昂贵,难以普及应用;2)有效实验环要求非常苛刻,是现实环境中难以模拟,甚至根本无法模拟;3)除此以外,有些实验的实验环境即使可以有效构造,它的实验结果却仍然是难以直接、完整观察获取的,如力场、电场、磁场中的分布问题等。鉴于以上原因,物理仿真实验已引起了大家的关注,出现了一些软件。但很多是基于Flash、Photoshop 、3D Studio MAX之类的图形图像软件制作。这些软件可以制作逼真的实验环境和生动的实验过程动画,还可以制作出实际实验所无法达到的效果。但这类软件本身是制作卡通动画的,对物理实验规律和过程很少涉及,很难做到真正的交互使用,及精确的计算分析同时开发也很困难。因此,基于这些软件的仿真在工科物理实验教学中应用很少。本文利用MATLAB 计算软件及其仿真功能对单摆实验过程进行模拟、仿真及后期分析,对物理实验教学改革提供一种新思路。 具体地,本文将描述一种新颖的单摆实验方法, 其主要的意义在于给学生以综合性实验技能训练。一个综合性实验, 它必须涉及多方面的知识和实验技能。本文描述的单摆实验方法即具备这样的特征。它的实验原理虽然简单, 但所涉及到的知识点极为丰富: 力学振动, 计算机编程等。学生通过这样的实验不仅可以得到综合性的实验技能训练, 而且可以在如何将现代技术改造传统实验、理论联系实际等方面得到很多启示。另外,本文引入计算机技术分析法, 对单摆实验进行了改造, 既实现了基础物理实验的现代化, 又为MATLAB课程实验提供了很好的应用落足点, 可以使学生得到多方面的实验技能训练。 二、方法概述 2.1问题描述 单摆问题是高中物理及大学普通物理实验教学中的一个基础问题。单摆在摆角比较小时,其运动规律近似为准简谐振动。但是当摆角比较大时, 即单摆在大摆角情况下运动时,这种近似已不再成立,其运动方程满足非线性微分方程。因此,对摆角大小的限制成为该实验中必须满足的条件。不同的实验条件下,最大摆角的取值不同,其中包括, ,,,甚至等。这就为在实验过程中对摆角的统一取值造成困难,给实验带来较大的误差。同时,学生对单摆在大摆角情况下运动时其运动周期及运动规律的理解也存在困难。利用先进的计算机仿真

matlab在计算物理中的应用

Matlab画图 单摆的动画化 clear clf plot([-0.2;0.2],[0;0],'y-', 'linewidth',10); hold on g=0.98; l=1; a0=pi/8 axis([-0.75,0.75,-1.25,0]); t=0; dt=0.1; m=moviein(1000); for i=1:1000 t=t+dt; a=a0*cos(sqrt(g/l)*t); x=sin(a); y=(-1)*cos(a); h(1)=plot(x,y,'r.','markersize',30); h(2)=plot([0;x],[0;y],'b-'); m(i)=getframe; delete(h);

end movie(m,2) 多边形 clear clf for n=3:11; t=linspace(0,2*pi,n+1); x=sin(t+pi/n+pi); y=cos(t+pi/n+pi); subplot(3,3,n-2); fill(x,y,'g') title(['正',num2str(n),'边形']); axis square; hold on; end 利萨如图形 >> t=0:pi/1000:2*pi; a=[0 4/pi 2/pi pi 0 4/pi 2/pi pi]; y=sin(t);

subplot(2,4,i) if i<5 n=1; x=cos(n*t+a(i)); plot(x,y) title(['n=1,a=',num2str(a(i))]) else n=2; x=cos(n*t+a(i)); plot(x,y) title(['n=2,a=',num2str(a(i))]) end end 线性方程组求解 clear a=input('please input a') b=input('please input b') [m,n]=size(a) B=[a b'] R1=rank(a)

(整理)matlab16常用计算方法.

常用计算方法 1.超越方程的求解 一超越方程为 x (2ln x – 3) -100 = 0 求超越方程的解。 [算法]方法一:用迭代算法。将方程改为 01002ln()3 x x =- 其中x 0是一个初始值,由此计算终值x 。取最大误差为e = 10-4,当| x - x 0| > e 时,就用x 的值换成x 0的值,重新进行计算;否则| x - x 0| < e 为止。 [程序]P1_1abs.m 如下。 %超越方程的迭代算法 clear %清除变量 x0=30; %初始值 xx=[]; %空向量 while 1 %无限循环 x=100/(2*log(x0)-3); %迭代运算 xx=[xx,x]; %连接结果 if length(xx)>1000,break ,end %如果项数太多则退出循环(暗示发散) if abs(x0-x)<1e-4,break ,end %当精度足够高时退出循环 x0=x; %替换初值 end %结束循环 figure %创建图形窗口 plot(xx,'.-','LineWidth',2,'MarkerSize',12)%画迭代线'.-'表示每个点用.来表示,再用线连接 grid on %加网格 fs=16; %字体大小 title('超越方程的迭代折线','fontsize',fs)%标题 xlabel('\itn','fontsize',fs) %x 标签 ylabel('\itx','fontsize',fs) %y 标签 text(length(xx),xx(end),num2str(xx(end)),'fontsize',fs)%显示结果 [图示]用下标作为自变量画迭代的折线。如P0_20_1图所示,当最大误差为10-4时,需要迭代19次才能达到精度,超越方程的解为27.539。 [算法]方法二:用求零函数和求解函数。将方程改为函数 100()2ln()3f x x x =-- MATLAB 求零函数为fzero ,fzero 函数的格式之一是 x = fzero(f,x0) 其中,f 表示求解的函数文件,x0是估计值。fzero 函数的格式之二是 x = fzero(f,[x1,x2])

matlab上机实践二(计算物理班)

实验二MATLAB程序设计 实验要求: 为达到理想的实验效果,同学们务必做到: (1)实验前认真准备,要根据实验目的和实验内容,复习好实验中可能要用 到的命令,想好编程的思路,做到胸有成竹,提高上机效率。 (2)实验过程中积极思考,要深入分析命令、程序的执行结果以及各种屏幕 信息的含义、出现的原因并提出解决办法。 (3)实验后认真总结,要总结本次实验有哪些收获,还存在哪些问题,并写 出实验报告。实验报告应包括实验目的、实验内容、流程图(较大程序)、程序(命令)清单、运行结果以及实验的收获与体会等内容。 同学们在上机过程中会碰到各种各样的问题,分析问题和解决问题的过程就是积累经验的过程。只要同学们按照上面3点要求去做,在学完本课程后就一定会有很大的收获。 实验仪器:计算机 实验时间:2018.4 实验原理: 1.M文件 命令文件;函数文件 命令文件直接运行,函数文件必须调用(不能直接运行)。2.matlab程序控制结构 (1)顺序结构 (2)选择结构:if语句;switch语句;try语句 (3)循环结构:for语句;while语句;循环嵌套 3.函数文件:function语句 4.函数调用:输出参数=函数名(输入参数)or函数名(输入参数)实验目的: 1.掌握建立和执行M文件的方法 2.掌握matlab的程序控制结构及其应用

3. 掌握matlab 函数文件和程序调试 实验内容: 1.建立M 文件,文件名自己选取,编写程序,建立向量G=[1,2,3,4,5];H=[5,4,3,2,1];利用向量G 、H 以及运算符产生下列向量。(要求只写出M 文件程序) a= 1 8 27 64 125 b= 0 0 1 0 0 c= 0 0 0 1 1 d= 1 1 1 0 0 2. 求分段函数的值。 32,13x 70,6980,652363≠?? ???--+≠<≤+--≠<-+=x x x x x x x x x x x y 及其它且且 建立M 文件(函数文件),用if 语句实现。调用函数,求出x=-5;-8;1;0时的 y 值。 3.已知f ()12233 4...(1)n n n =?+?+?++?+;1111g()...2222222n n = ++++???; 求(8)/(4)(4)(8) f g y f g =?。要求:建立两个函数文件(M 文件),函数名取为fff ,ggg ,编写程序分别用于求f (n ),g(n)(其中用for 循环求f (n ),g(n));调用这两个函数,计算y 。 4. 已知123d()...233445(1)(2)n n n n =++++???+?+,111y()3521 n n =++++; 建立两个M 文件(函数文件,分别用来求d(n)和y(n),用for 循环求和,文件名自由选取,可取fff3,ggg3),再建立一个函数文件(文件名选取kkk ),完成下列功能:当d(n)大于y(n)时,z=d(n)+y(n),当d(n)小于或等于y(n)时,z=d(n)/y(n),最后调用kkk 函数求出当n=3和10时的z 值。

matlab用于计算方法的源程序

1、Newdon迭代法求解非线性方程 function [x k t]=NewdonToEquation(f,df,x0,eps) %牛顿迭代法解线性方程 %[x k t]=NewdonToEquation(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:原函数,定义为内联函数 ?:函数的倒数,定义为内联函数 %x0:初始值 %eps:误差限 % %应用举例: %f=inline('x^3+4*x^2-10'); ?=inline('3*x^2+8*x'); %x=NewdonToEquation(f,df,1,0.5e-6) %[x k]=NewdonToEquation(f,df,1,0.5e-6) %[x k t]=NewdonToEquation(f,df,1,0.5e-6) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquation(f,df,1) if nargin==3 eps="0".5e-6; end tic; k=0; while 1 x="x0-f"(x0)./df(x0); k="k"+1; if abs(x-x0) < eps || k >30 break; end x0=x; end t=toc; if k >= 30 disp('迭代次数太多。'); x="0"; t="0"; end

2、Newdon迭代法求解非线性方程组 function y="NewdonF"(x) %牛顿迭代法解非线性方程组的测试函数 %定义是必须定义为列向量 y(1,1)=x(1).^2-10*x(1)+x(2).^2+8; y(2,1)=x(1).*x(2).^2+x(1)-10*x(2)+8; return; function y="NewdonDF"(x) %牛顿迭代法解非线性方程组的测试函数的导数 y(1,1)=2*x(1)-10; y(1,2)=2*x(2); y(2,1)=x(2).^+1; y(2,2)=2*x(1).*x(2)-10; return; 以上两个函数仅供下面程序的测试 function [x k t]=NewdonToEquations(f,df,x0,eps) %牛顿迭代法解非线性方程组 %[x k t]=NewdonToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组(事先定义) ?:方程组的导数(事先定义) %x0:初始值 %eps:误差限 % %说明:由于虚参f和df的类型都是函数,使用前需要事先在当前目录下采用函数M文件定义% 另外在使用此函数求解非线性方程组时,需要在函数名前加符号“@”,如下所示 % %应用举例: %x0=[0,0];eps=0.5e-6; %x=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)

matlab 迭代法[精品]

matlab 迭代法[精品] 1. 矩阵 122,211,,,,,,,,,A,111A,222, 11,,,,,,,,221,,112,,,, 证明:求解以为系数矩阵线性方程组的Jacobi迭代式收敛的,而A1 Gauss-Seidel方法是发散的;求解以为系数矩阵线性方程组的A2实验名称Gauss-Seidel是收敛的,而Jacobi方法是发散的. 2. 矩阵 1aa,,,,Aaa,1 ,,,,aa1,, (a) 参数取什么值时,矩阵是正定的. a (b) 取什么值时,求以为系数矩阵线性方程组的Jacobi迭代式收aa 敛的. 1、根据迭代收敛性的充分必要条件来判断Jacobi迭代式与Gauss-Seide 迭代式的收敛性,迭代收敛性仅与方程组系数矩阵有关,与右端无关;而且不依赖于初值的选取。实验目的 2、根据矩阵的判断定理求得矩阵元素a的取值,同时根据矩阵线性方程组的Jacobi迭代式收敛的充分条件(严格对角占优)来求a得取值。 1、(1)检验线性方程组的Jacobi迭代式的收敛性: function jacobi(A) D=zeros(3); for i=1:3 D(i,i)=A(i,i); 实验内容end (算法、程B=D^(-1)*(D-A); 序、步骤和k=max(abs(eig(B))) 方法) if k<1

'该线性方程组的Jacobi迭代式是收敛的' else k>=1 '该线性方程组的Jacobi迭代式是发散的' end (2)检验线性方程组的Gauss-Seide迭代式的收敛性: function Gauss(A) D=zeros(3); L=zeros(3); U=zeros(3); for i=1:3 D(i,i)=A(i,i); end L(2:3,1)=A(2:3,1); L(3,2)=A(3,2); U(1,2:3)=A(1,2:3); U(2,3)=A(2,3); B=-(D+L)^(-1)*U; k=max(abs(eig(B))) if k<1 '该线性方程组的Gauss-Seidel迭代式是收敛的' else k>=1 '该线性方程组的Gauss-Seidel迭代式是发散的' end 2、(1)参数取什么值时,矩阵是正定的.(矩阵的特征值全为正) a >> syms a >> A=[1 a a;a 1 a;a a 1]; >> eig(A) ans = 2*a+1 1-a

数学物理方法matlab建模

数学物理建模与计算机仿真考试试题 (2011——2012第二学期) 1、 计算机仿真计算积分: (n 为自然数) ;积分方向为正方向(10分)。 解:利用留数定理计算闭合路径积分, 设g=1+z^n ,f=z^(2*n)/(1+z^n) 求出所有n 个奇点并放在矩阵A 中,A=solve(g) 再求出每个奇点k ∈A 对应的留数,Res(k)=limit(f*(z-A(k)),z,A(k)) 故所求的积分结果为:INT=2πi ∑Res(k) 对应程序为: n=input('n='); syms z g=1+z^n; f=z^(2*n)/(1+z^n); A=solve(g); sum=0; for k=1:n Res=limit(f*(z-A(k)),z,A(k)); sum=sum+Res; end int=2*pi*i*sum INT=simplify(int) 2、 在同一幅图中绘制函数 和平面 的图像 (10分)。 解:参照教材第二页,用cplxgrid 指令绘图,去掉投影,程序如下: function cplxmap2(z,w,B) blue = 0.2; x = real(z); 22 1n n z z dz z =+? 0x =253()f z z =-()()1d 2i Res ,n k C k f z z f z z π==????∑?

y = imag(z); u = real(w); v = imag(w); if nargin > 2 k = find((abs(w) > B) | isnan(abs(w))); if length(k) > 0 u(k) = B*sign(u(k)); v(k) = zeros(size(k)); v = v/max(max(abs(v))); v(k) = NaN*ones(size(k)); end end M = max(max(u)); m = min(min(u)); axis([-1 1 -1 1 m M]); caxis([-1 1]); s = ones(size(z)); surf(x,y,u,v); colormap(hsv(64)) 再参照第8页绘出2/(5-3z)的图像及x=0的图像,程序如下: z=cplxgrid(30); cplxmap2(z, 2./((5-3.*z)+eps*(z==5/3))); colorbar('vert') title('2/(5-3z)') hold on [y,z]=meshgrid(-1:0.01:1,-1:0.01:1); a=0; x2=a*ones(size(y)); mesh(x2,y,z); hold off 输出图像为:

matlab上机实践三(计算物理班)

实验三MATLAB绘图 实验要求: 为达到理想的实验效果,同学们务必做到: (1)实验前认真准备,要根据实验目的和实验内容,复习好实验中可能要用 到的命令,想好编程的思路,做到胸有成竹,提高上机效率。 (2)实验过程中积极思考,要深入分析命令、程序的执行结果以及各种屏幕 信息的含义、出现的原因并提出解决办法。 (3)实验后认真总结,要总结本次实验有哪些收获,还存在哪些问题,并写 出实验报告。实验报告应包括实验目的、实验内容、流程图(较大程序)、程序(命令)清单、运行结果以及实验的收获与体会等内容。 同学们在上机过程中会碰到各种各样的问题,分析问题和解决问题的过程就是积累经验的过程。只要同学们按照上面3点要求去做,在学完本课程后就一定会有很大的收获。 实验仪器:计算机 实验时间:2018.5. 实验原理: 1.绘制单根二维曲线: plot(x,y) x,y长度相同的向量;plot(x)x为实向量和复数向量;2.绘制多跟二维曲线: plot(x,y),(1)x为向量,y是有一维与x长度同的矩阵,(2)x,y 为同维矩阵; plot(x),x为实数矩阵,x为复数矩阵; 含多个输入参数的plot函数:plot(x1,y1,x2,y2,…xn,yn) 3.设置图形样式:线型,颜色,标记符号 4. 图形标注:插入标题,坐标说明,图形说明等 5.三维图形绘制:三维曲线和三维曲面 plot3(x,y,z);mesh(x,y,z);surf(x,y,z) 实验目的:

1.掌握绘制二维图形的方法 2.掌握绘制三维图形的方法 3.熟悉图像处理和动画制作 实验内容: 1. 绘图:2228x y x =- 程序: ezplot('x^2+8*x-2*y^2',[-8,8,-8,8]) 结果: 2. 已知 22sin()01ln(02 x x e y x x ?>??=??≤?? 在55≤≤-x 范围绘制函数曲线,加上横坐标说明x ,纵坐标说明y 。 程序:

物理实验数据的MATLAB图示处理法

26  2008年第6期(总第64期) E-mail:cmee@263.net 收稿日期:2008-02-29 作者简介:李小平,理学学士,副教授,程序员。*2007年株洲职业技术学院院级立项课题:编号ZZYKY0708名称《应用MATLAB辅助理工专业课程教学的研究》。 物理实验数据的MATLAB图示处理法* 李小平 株洲职业技术学院 湖南株洲 412001 摘 要:MATLAB语言是做数学实验的计算机语言[1-2],利用MATLAB函数绘图来处理大量的物理实验数据(本文叫做“MATLAB图示处理法”)是最理想的方法,全文用几个典型的实例来说明了它的实用价值。关键词:大学物理 实验数据 MATLAB 作图 大学物理实验课中有许多实验数据,处理实验数据的方法一般有作图法、平均法、线性回归法、逐差法等多种方法[3],我们平时都是用手工方法根据实验数据描点画图,但对于大量的实验数据,用手工描点画图就不理想了,尤其是画实验数据的三维空间图像,更是难上加难。 MATLAB软件主要用于数值计算和图形处理,它集数值分析、矩阵计算、信号处理和图形显示于一体[4],是处理实验数据的最理想的软件之一。 本文介绍用MATLAB作图函数绘图来处理大量的物理实验数据的方法,在实验课中可通过MATLAB图示法来探讨实验公式。 一、图示二维空间函数实例 当实验数据只两个变量时,其对应的图形是二维图形,我们通常用plot函数绘制实验图。 例1 用伏安法测电阻,以电阻的端电压V作为自变量测得一组对应的流经电阻的电流I,数据如表1[3]。表1 电压V和电流I的实验数据 MATLAB命令如下: >>V=[0,2.00,4.00,6.00,8.00,10.00];I=[0,3.85,8.15,12.05,15.80,19.90]; >>plot(V,I);xlabel('电压V'); ylabel('电流 I'); 结果见图1: 图1 观察图1,可知图形是“一条直线”,故实验结果与理论公式 不矛盾,电阻R是个常数,是定值。 例2 梁的弯曲实验,在矩形梁的中点加一定负载F=450g,根据梁的有效长度L的变化,测出对应的下垂量l,数据如表2[3]。 表2 梁的长度L和下垂量l的实验数据 MATLAB命令如下: >>L=[30.00,33.00,36.00,39.00,42.00,45.00,48.00,51.00]; >>namta=[0.5062,0.6737,0.8749,1.1122,1.3887,1.7085,2.0738,2.4878]; >>plot(L,namta);xlabel('梁的长度L');ylabel('下垂量namta '); 结果见图2:

计算方法上机实验报告-MATLAB

《计算方法》实验报告 指导教师: 学院: 班级: 团队成员:

一、题目 例2.7应用Newton 迭代法求方程210x x --=在1x =附近的数值解 k x ,并使其满足8110k k x x ---< 原理: 在方程()0f x =解的隔离区间[],a b 上选取合适的迭代初值0x ,过曲线()y f x =的点()() 00x f x ,引切线 ()()()1000:'l y f x f x x x =+- 其与x 轴相交于点:()() 0100 'f x x x f x =-,进一步,过曲线()y f x =的 点()()11x f x , 引切线 ()()()2111: 'l y f x f x x x =+- 其与x 轴相交于点:() () 1211 'f x x x f x =- 如此循环往复,可得一列逼近方程()0f x =精确解*x 的点 01k x x x ,,,,,其一般表达式为: ()() 111 'k k k k f x x x f x ---=- 该公式所表述的求解方法称为Newton 迭代法或切线法。

程序: function y=f(x)%定义原函数 y=x^3-x-1; end function y1=f1(x0)%求导函数在x0点的值 syms x; t=diff(f(x),x); y1=subs(t,x,x0); end function newton_iteration(x0,tol)%输入初始迭代点x0及精度tol x1=x0-f(x0)/f1(x0);k=1;%调用f函数和f1函数 while abs(x1-x0)>=tol x0=x1;x1=x0-f(x0)/f1(x0);k=k+1; end fprintf('满足精度要求的数值为x(%d)=%1.16g\n',k,x1); fprintf('迭代次数为k=%d\n',k); end 结果:

相关文档
最新文档