文档视界 最新最全的文档下载
当前位置:文档视界 › 东南大学计算方法实验报告matlab版

东南大学计算方法实验报告matlab版

东南大学计算方法实验报告matlab版
东南大学计算方法实验报告matlab版

Southeast University

计算方法实验报告

学生院系:

学生姓名:

学生学号:

实验一

一、实验题目:插值法p245

二、程序设计

P245_main.m

x=[0.3 0.42 0.5 0.58 0.66 0.72];

y=[1.04403 1.08462 1.11803 1.15603 1.19817 1.23223]; P245(x,y,0.46);

P245(x,y,0.55);

P245(x,y,0.6);

P245.m

function newtint( x,y,xhat )

n=length(y);

c=y(:);

for j=2:n

for i=n:-1:j

c(i)=(c(i)-c(i-1))/(x(i)-x(i-j+1));

end

end

yhat=c(n);

for i=n-1:-1:1

yhat=yhat*(xhat-x(i))+c(i);

end

fprintf('N(%f)= %f' ,xhat,yhat)

disp('/n' )

end

三、程序运行结果

N(0.460000)= 1.100724/n

N(0.550000)= 1.141271/n

N(0.600000)= 1.166194/n

2

实验二

一、实验题目:舍入误差与数值稳定性p217_4

二、程序设计

n=input('输入N=\n');

y1=0;

y2=0;

digits(40);

format long;

y=0.5*(1.5-1/n-1/(n+1));

for j=2:n

y1=y1+1/(j*j-1);

end

fprintf('%s y1=%g\n','从小到大计算结果',y1);

if floor(log10(abs(y1-y)))-log10(abs(y1-y))

m=-floor(log10(abs(y1-y)))+ ceil (log10(y1));

else m=-floor(log10(abs(y1-y)))+ceil(log10(y1))-1;

end

fprintf('%s%d','有效位数',m);

for j=n:-1:2

y2=y2+1/(j*j-1);

end

disp('\n')

fprintf('%s y2=%g\n','从大到小计算结果',y2);

if floor(log10(abs(y2-y)))-log10(abs(y2-y))

m=-floor(log10(abs(y2-y)))+ ceil (log10(y2));

else m=-floor(log10(abs(y2-y)))+ ceil (log10(y2))-1;

end

fprintf('%s%d','有效位数',m);

四、程序运行结果

3

实验三

一、实验目的和意义:p225

二、程序设计

P225.m

eps=5e-6;

delta=1e-6;

N=1000;

k=0;

x0=0.5;

while(1);

x1=x0-fp225_1(x0)/fp225_1_1(x0);

k=k+1;

if(k>N||abs(x1)

disp('Newton methon failed');

break;

end

if abs(x1)<1;

d=x1-x0;

else

d=(x1-x0)/x1;

end

x0=x1;

if(abs(d)

end

end

fprintf('%f',x0);

fp225_1.m

function y= fp225_1( x )

y=x*exp(x)-1;

end

fp225_1_1.m

4

function y =fp225_1_1( x )

y=exp(x)*(1+x);

end

三、程序运行结果

>> p225

0.567143

实验四

一、实验题目:曲线拟合p250.2

二、程序设计

qxnh.m

x=[1 2.5 3.5 4];y=[3.8 1.5 26.0 33];

fun1=inline('c(1)+c(2)*x.^2','c','x'); %拟合函数

c=lsqcurvefit(fun1,[0,0],x,y) %求拟合系数

['y=',num2str(c(1)),'+',num2str(c(2)),'x^2']%拟合函数表达式

y1=c(1)+c(2)*x.^2; %拟合函数表达式值

三、程序运行结果

>>qxnh

-3.4957 2.2052

ans =

y=-3.4957+2.2052x^2

实验五

一、实验题目:常微分方程数值解法p269.1.1

二、程序设计

qxnh.m

x=[1 2.5 3.5 4];y=[3.8 1.5 26.0 33];

fun1=inline('c(1)+c(2)*x.^2','c','x'); %拟合函数

c=lsqcurvefit(fun1,[0,0],x,y) %求拟合系数

['y=',num2str(c(1)),'+',num2str(c(2)),'x^2']%拟合函数表达式

5

y1=c(1)+c(2)*x.^2; %拟合函数表达式值

三、程序运行结果

(1)

>>szjf

输入被积函数f=1/(1+x^3)^0.5

f =

1/(x^3 + 1)^(1/2)

输入积分区间[a b]=[0 1]

a =

0 1

输入等分份数n=10

n =

10

I =

0.909604242639613

(2)

>>szjf

输入被积函数f=sin(x)/x;

f =

sin(x)/x

输入积分区间[a b]=[0.001 5]

a =

6

0.001000000000000 5.000000000000000 输入等分份数n=10

n =

10

I =

1.548931246051467

7

《计算方法》课内实验报告

《计算方法》实验报告 姓名: 班级: 学号: 实验日期: 2011年10月26日

一、实验题目: 数值积分 二、实验目的: 1.熟悉matlab 编写及运行数值计算程序的方法。 2.进一步理解数值积分的基础理论。 3.进一步掌握应用不同的数值积分方法求解给定的积分并给出数据结果及误差分析。 三、实验内容: 1.分别用复合梯形求积公式及复合辛普森求积公式计算积分xdx x ln 10 ? , 要求计算精度达到410-,给出计算结果并比较两种方法的计算节点数. 2.用龙贝格求积方法计算积分dx x x ?+3 021,使误差不超过510-. 3.用3=n 的高斯-勒让德公式计算积分?3 1 sin x e x ,给出计算结果. 4.用辛普森公式(取2==M N ) 计算二重积分.5 .00 5 .00 dydx e x y ? ? - 四、实验结果: 1.(1)复合梯形法: 将区间[a,b]划分为n 等份,分点n k n a b h kh a x k ,2,1,0,,=-=+=在每个区间[1,+k k x x ](k=0,1,2,···n-1)上采用梯形公式,则得 )()]()([2)()(1 11 1 f R x f x f h dx x f dx x f I n n k k k b a n k x x k k ++===∑?∑? -=+-=+ 故)]()(2)([21 1 b f x f a f h T n k k n ++=∑-=称为复合梯形公式 计算步长和划分的区间 Eps=1E-4 h1=sqrt(Eps/abs(-(1-0)/12*1/(2+1))) h1 =0.0600 N1=ceil(1/h1) N1 =17 用复合梯形需要计算17个结点。 复合梯形: function T=trap(f,a,b,n) h=(b-a)/n;

东南大学高等数学数学实验报告上

Image Image 高等数学数学实验报告 实验人员:院(系) ___________学号_________姓名____________实验地点:计算机中心机房 实验一 1、 实验题目: 根据上面的题目,通过作图,观察重要极限:lim(1+1/n)n =e 2、 实验目的和意义 方法的理论意义和实用价值。 利用数形结合的方法观察数列的极限,可以从点图上看出数列的收敛性,以及近似地观察出数列的收敛值;通过编程可以输出数列的任意多项值,以此来得到数列的收敛性。通过此实验对数列极限概念的理解形象化、具体化。 三、计算公式 (1+1/n)n 四、程序设计 五、程序运行结果 六、结果的讨论和分析 当n足够

Image Image 大时,所画出的点逐渐接近于直线,即点数越大,精确度越高。对于不同解题方法最后均能获得相同结果,因此需要择优,从众多方法中尽可能选择简单的一种。程序编写需要有扎实的理论基础,因此在上机调试前要仔细审查细节,对程序进行尽可能的简化、改进与完善。 实验二一、实验题目 制作函数y=sin cx的图形动画,并观察参数c对函数图形的影响。 二、实验目的和意义 本实验的目的是让同学熟悉数学软件Mathematica所具有的良好的作图功能,并通过函数图形来认识函数,运用函数的图形来观察和分析函数的有关性态,建立数形结合的思想。三、计算公式:y=sin cx 四、程序设计五、程序运行结果 六、结果的讨论和分析 c的不同导致函数的区间大小不同。 实验三 一、实验题目 观察函数f(x)=cos x的各阶泰勒展开式的图形。 二、实验目的和意义 利用Mathematica计算函数的各阶泰勒多项式,并通过绘制曲线图形,来进一步掌握泰勒展开与函数逼近的思想。 三、计算公式

数值分析实验报告1

实验一误差分析 实验1.1(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 其中ε(1.1)和(1.221,,,a a 的输出b ”和“poly ε。 (1(2 (3)写成展 关于α solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。 实验过程: 程序: a=poly(1:20); rr=roots(a); forn=2:21 n form=1:9 ess=10^(-6-m);

ve=zeros(1,21); ve(n)=ess; r=roots(a+ve); -6-m s=max(abs(r-rr)) end end 利用符号函数:(思考题一)a=poly(1:20); y=poly2sym(a); rr=solve(y) n

很容易的得出对一个多次的代数多项式的其中某一项进行很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问题可以借助于MATLAB来进行问题的分析。 学号:06450210 姓名:万轩 实验二插值法

太原理工大学数值计算方法实验报告

本科实验报告 课程名称:计算机数值方法 实验项目:方程求根、线性方程组的直接解 法、线性方程组的迭代解法、代数插值和最 小二乘拟合多项式 实验地点:行勉楼 专业班级: ******** 学号: ********* 学生姓名: ******** 指导教师:李誌,崔冬华 2016年 4 月 8 日

y = x*x*x + 4 * x*x - 10; return y; } float Calculate(float a,float b) { c = (a + b) / 2; n++; if (GetY(c) == 0 || ((b - a) / 2) < 0.000005) { cout << c <<"为方程的解"<< endl; return 0; } if (GetY(a)*GetY(c) < 0) { return Calculate(a,c); } if (GetY(c)*GetY(b)< 0) { return Calculate(c,b); } } }; int main() { cout << "方程组为:f(x)=x^3+4x^2-10=0" << endl; float a, b; Text text; text.Getab(); a = text.a; b = text.b; text.Calculate(a, b); return 0; } 2.割线法: // 方程求根(割线法).cpp : 定义控制台应用程序的入口点。// #include "stdafx.h" #include"iostream"

心得体会 使用不同的方法,可以不同程度的求得方程的解,通过二分法计算的程序实现更加了解二分法的特点,二分法过程简单,程序容易实现,但该方法收敛比较慢一般用于求根的初始近似值,不同的方法速度不同。面对一个复杂的问题,要学会简化处理步骤,分步骤一点一点的循序处理,只有这样,才能高效的解决一个复杂问题。

计算方法_全主元消去法_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

c 计算器实验报告

简单计算器 姓名: 周吉祥 实验目的:模仿日常生活中所用的计算器,自行设计一个简单的计算器程序,实现简单的计算功能。 实验内容: (1)体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算,运算结果能正确显示,可以清楚数据等。 (2)设计思路: 1)先在Visual C++ 6.0中建立一个MFC工程文件,名为 calculator. 2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单 选框 3)设计按钮,并修改其相应的ID与Caption. 4)选择和设置各控件的单击鼠标事件。 5)为编辑框添加double类型的关联变量m_edit1. 6)在calculatorDlg.h中添加math.h头文件,然后添加public成 员。 7)打开calculatorDlg.cpp文件,在构造函数中,进行成员初始 化和完善各控件的响应函数代码。 (3)程序清单:

●添加的public成员: double tempvalue; //存储中间变量 double result; //存储显示结果的值 int sort; //判断后面是何种运算:1.加法2.减法3. 乘法 4.除法 int append; //判断后面是否添加数字 ●成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = 0.0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); tempvalue=0; result=0; sort=0; append=0; }

数值计算实验报告

(此文档为word格式,下载后您可任意编辑修改!) 2012级6班###(学号)计算机数值方法 实验报告成绩册 姓名:宋元台 学号: 成绩:

数值计算方法与算法实验报告 学期: 2014 至 2015 第 1 学期 2014年 12月1日课程名称: 数值计算方法与算法专业:信息与计算科学班级 12级5班 实验编号: 1实验项目Neton插值多项式指导教师:孙峪怀 姓名:宋元台学号:实验成绩: 一、实验目的及要求 实验目的: 掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。 实验要求: 1. 给出Newton插值算法 2. 用C语言实现算法 二、实验内容 三、实验步骤(该部分不够填写.请填写附页)

1.算法分析: 下面用伪码描述Newton插值多项式的算法: Step1 输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x. Step2 形成差商表 for i=0 to n for j=n to i f(j)=((f(j)-f(j-1)(x(j)-x(j-1-i)); Step3 置初始值temp=1,newton=f(0) Step4 for i=1 to n temp=(x-x(i-1))*temp*由temp(k)=(x-x(k-1))*temp(k-1)形成 (x-x(0).....(x-x(i-1)* Newton=newton+temp*f(i); Step5 输出f(x)的近似数值newton(x)=newton. 2.用C语言实现算法的程序代码 #includeMAX_N) { printf("the input n is larger than MAX_N,please redefine the MAX_N.\n"); return 1; } if(n<=0) { printf("please input a number between 1 and %d.\n",MAX_N); return 1; } printf("now input the (x_i,y_i)i=0,...%d\n",n); for(i=0;i<=n;i++) { printf("please input x(%d) y(%d)\n",i,i);

计算方法实验报告格式

计算方法实验报告格式 小组名称: 组长姓名(班号): 小组成员姓名(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一个完整的实验,应包括数据准备、理论基础、实验内容及方法,最终对实验结果进行分析,以达到对理论知识的感性认识,进一步加深对相关算法的理解,数值实验以实验报告形式完成,实验报告格式如下: 一、实验名称 实验者可根据报告形式需要适当写出. 二、实验目的及要求 首先要求做实验者明确,为什么要做某个实验,实验目的是什么,做完该实验应达到什么结果,在实验过程中的注意事项,实验方法对结果的影响也可以以实验目的的形式列出. 三、算法描述(实验原理与基础理论) 数值实验本身就是为了加深对基础理论及方法的理解而设置的,所以要求将实验涉及到的理论基础,算法原理详尽列出. 四、实验内容 实验内容主要包括实验的实施方案、步骤、实验数据准备、实验的算法以及可能用到的仪器设备. 五、程序流程图 画出程序实现过程的流程图,以便更好的对程序执行的过程有清楚的认识,在程序调试过程中更容易发现问题. 六、实验结果 实验结果应包括实验的原始数据、中间结果及实验的最终结果,复杂的结果可以用表格

形式列出,较为简单的结果可以与实验结果分析合并出现. 七、实验结果分析 实验结果分析包括对对算法的理解与分析、改进与建议. 数值实验报告范例 为了更好地做好数值实验并写出规范的数值实验报告,下面给出一简单范例供读者参考. 数值实验报告 小组名称: 小组成员(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一、实验名称 误差传播与算法稳定性. 二、实验目的 1.理解数值计算稳定性的概念. 2.了解数值计算方法的必要性. 3.体会数值计算的收敛性与收敛速度. 三、实验内容 计算dx x x I n n ? += 1 10 ,1,2,,10n = . 四、算法描述 由 dx x x I n n ? += 1 10 ,知 dx x x I n n ?+=--101110,则

高等数学下实验报告

高等数学实验报告 实验人员:院(系)化学化工学院 学号19013302 姓名 黄天宇 实验地点:计算机中心机房 实验七:空间曲线与曲面的绘制 一、 实验目的 1、利用数学软件Mathematica 绘制三维图形来观察空间曲线和空 间曲面图形的特点,以加强几何的直观性。 2、学会用Mathematica 绘制空间立体图形。 二、实验题目 利用参数方程作图,做出由下列曲面所围成的立体图形: (1) x y x y x z =+--=2 222,1及xOy 平面; (2) 01,=-+=y x xy z 及.0=z 三、实验原理 空间曲面的绘制 作参数方程],[],,[,),(),() ,(max min max min v v v u u v u z z v u y y v u x x ∈∈? ?? ??===所确定的曲面图形的 Mathematica 命令为: ParametricPlot3D[{x[u,v],y[u,v],z[u,v]},{u,umin,umax}, {v,vmin,vmax},选项] 四、程序设计及运行 (1)

(2)

六、结果的讨论和分析 1、通过参数方程的方法做出的图形,可以比较完整的显示出空 间中的曲面和立体图形。 2、可以通过mathematica 软件作出多重积分的积分区域,使积分能够较直观的被观察。 3、从(1)中的实验结果可以看出,所围成的立体图形是球面和圆柱面所围成的立体空间。 4、从(2)中的实验结果可以看出围成的立体图形的上面曲面的方程是xy z =,下底面的方程是z=0,右边的平面是01=-+y x 。 实验八 无穷级数与函数逼近 一、 实验目的 (1) 用Mathematica 显示级数部分和的变化趋势; (2) 展示Fourier 级数对周期函数的逼近情况; (3) 学会如何利用幂级数的部分和对函数进行逼近以及函数值的近似计算。 二、实验题目 (1)、观察级数 ∑ ∞ =1 ! n n n n 的部分和序列的变化趋势,并求和。 (2)、改变例2中m 及x 0的数值来求函数的幂级数及观察其幂级数逼近函数的情况 (3)、观察函数? ? ?<≤<≤--=ππx x x x f 0,10 ,)(展成的Fourier 级数

数值分析实验报告1

实验一 误差分析 实验(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 )1.1() ()20()2)(1()(20 1∏=-=---=k k x x x x x p 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 )2.1(0 )(19=+x x p ε 其中ε是一个非常小的数。这相当于是对()中19x 的系数作一个小的扰动。我们希望比较()和()根的差别,从而分析方程()的解对扰动的敏感性。 实验内容:为了实现方便,我们先介绍两个Matlab 函数:“roots ”和“poly ”。 roots(a)u = 其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程 01121=+++++-n n n n a x a x a x a 的全部根;而函数 poly(v)b =

的输出b 是一个n+1维变量,它是以n 维变量v 的各分量为根的多项式的系数。可见“roots ”和“poly ”是两个互逆的运算函数。 ;000000001.0=ess );21,1(zeros ve = ;)2(ess ve = ))20:1((ve poly roots + 上述简单的Matlab 程序便得到()的全部根,程序中的“ess ”即是()中的ε。 实验要求: (1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。 如果扰动项的系数ε很小,我们自然感觉()和()的解应当相差很小。计算中你有什么出乎意料的发现表明有些解关于如此的扰动敏感性如何 (2)将方程()中的扰动项改成18x ε或其它形式,实验中又有怎样的现象 出现 (3)(选作部分)请从理论上分析产生这一问题的根源。注意我们可以将 方程()写成展开的形式, ) 3.1(0 ),(1920=+-= x x x p αα 同时将方程的解x 看成是系数α的函数,考察方程的某个解关于α的扰动是否敏感,与研究它关于α的导数的大小有何关系为什么你发现了什么现象,哪些根关于α的变化更敏感 思考题一:(上述实验的改进) 在上述实验中我们会发现用roots 函数求解多项式方程的精度不高,为此你可以考虑用符号函数solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。

计算方法实验报告 拟合

南京信息工程大学实验(实习)报告 一、实验目的: 用最小二乘法将给定的十个点拟合成三次多项式。 二、实验步骤: 用matlab编制以函数为基的多项式最小二乘拟合程序,并用于对下列数据作三次多项式最小二乘拟合(取权函数wi=1) x -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 y -2.30 -1 -0.14 -0.25 0.61 1.03 1.75 2.75 4.42 6.94 给定直线方程为:y=1/4*x3+1/2*x2+x+1 三、实验结论: 最小二乘法:通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。 一般地。当测量数据的散布图无明显的规律时,习惯上取n次代数多项式。 程序运行结果为: a = 0.9731 1.1023 0.4862 0.2238 即拟合的三次方程为:y=0.9731+1.1023x+0.4862*x2+0.2238*x3

-2.5 -2-1.5-1-0.5 00.51 1.52 2.5 -4-20246 81012 x 轴 y 轴 拟合图 离散点 y=a(1)+a(2)*x+a(3)*x.2+a(4)*x.3 结论: 一般情况下,拟合函数使得所有的残差为零是不可能的。由图形可以看出最小二乘解决了残差的正负相互抵消的问题,使得拟合函数更加密合实验数据。 优点:曲线拟合是使拟合函数和一系列的离散点与观测值的偏差平方和达到最小。 缺点:由于计算方法简单,若要保证数据的精确度,需要大量的数据代入计算。

(整理)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])

高等数学(下册)数学实验报告

高等数学A(下册)实验报告 院(系): 学号:姓名: 实验一 利用参数方程作图,作出由下列曲面所围成的立体: (1) 2 2 1Y X Z- - = , X Y X= +2 2 及 xOy 面 ·程序设计: -1, 1},Axe s2=ParametricPlot3D[{1/2*Cos[u]+1/2,1/2*Sin[u],v},{u,- s3=ParametricPlot3D[{u,v,0},{u,-1,1},{v,- DisplayFunction 程序运行结果: 实验二 实验名称:无穷级数与函数逼近 实验目的:观察的部分和序列的变化趋势,并求和

实验内容: (1)利用级数观察图形的敛散性 当n 从1~400时,输入语句如下: 运行后见下图,可以看出级数收敛,级数和大约为1.87985 (2先输入: 输出: 输出和输入相同,此时应该用近似值法。输入: 输出: 1.87985 结论:级数大约收敛于1.87985 实验三: 1. 改变例2中m 的值及的数值来求函数的幂级数及观察其幂级数逼近函数的情况

·程序设计: m 5; f x_:1 x^m;x0 1; g n_,x0_ :D f x, x, n .x x0; s n_,x_: Sum g k,x0/k x x0 ^k, k, 0, t Table s n, x, n, 20; p1 Plot Evaluate t ,x,1,2,3 2; p2 Plot 1 x ^m , x,1 2,3 2, PlotStyle RGBColor 0,0,1; Show p1,p2 ·程序运行结果 实验四 实验名称:最小二乘法 实验目的:测定某种刀具的磨损速度与时间的关系实验内容:

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)

(完整版)哈工大-数值分析上机实验报告

实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。重复运行计算,直至满足精度为止。这就是二分法的计算思想。

Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式 产生逼近解x*的迭代数列{x k},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x); y=-x*x-sin(x); 写成如上形式即可,下面给出主程序。 二分法源程序: clear %%%给定求解区间 b=1.5; a=0;

%%%误差 R=1; k=0;%迭代次数初值 while (R>5e-6) ; c=(a+b)/2; if f12(a)*f12(c)>0; a=c; else b=c; end R=b-a;%求出误差 k=k+1; end x=c%给出解 Newton法及改进的Newton法源程序:clear %%%% 输入函数 f=input('请输入需要求解函数>>','s') %%%求解f(x)的导数 df=diff(f);

高等数学实验报告

课程实验报告 专业年级2016级计算机类2班课程名称高等数学 指导教师张文红 学生姓名李发元 学号20160107000215 实验日期2016.12 .21 实验地点勤学楼4-24 实验成绩 教务处制 2016 年9月21 日

实验项 目名称 Matlab软件入门与求连续函数的极限 实验目的 及要求 实验目的: 1.了解Matlab软件的入门知识; 2.掌握Matlab软件计算函数极限的方法; 3.掌握Matlab软件计算函数导数的方法。 实验要求: 1.按照实验要求,在相应位置填写答案; 2.将完成的实验报告,以电子版的形式交给班长, 转交给任课教师,文件名“姓名+ 学号”。 实验内容利用Matlab完成下列内容: 1、(1) 2 2 1 lim 471 x x x x →∞ - -+ ;(2) 3 tan sin lim x x x x → - ;(3) 1 lim 1 x x x x →∞ - ?? ? + ??2、(1)x x y ln 2 =,求y';(2)ln(1) y x =+,求()n y 实验步骤1.开启MATLAB编辑窗口,键入编写的命令,运行; 2.若出现错误,修改、运行直到输出正确结果; 3.将Matlab输入输出结果,粘贴到该实验报告相应的位置。第一题 2 2 1 lim 471 x x x x →∞ - -+ 运行编码是 >> syms x >> limit((x^2-1)/(4x^2x+1),x,inf) ans =

1/4 第二题3 0tan sin lim x x x x →- >> syms x >> limit((tanx-sinx)/(x^3),x,0) ans = 1 第三题1lim 1x x x x →∞-?? ?+?? >> syms x >> limit(((x-1)^x)/(x+1),x,inf) ans = 2 第四题(1)x x y ln 2=,求y '; >> syms x >>f(x)=x^2in(x) f(x)=x^2in(x) >>diff(f(x)), ans = 2xinx+x 第五题ln(1)y x =+,求()n y >> syms x >>f(x)In(1+x) f(x)In(1+x) >>diff(f(x),n), ans =

数值分析实验报告1

实验一 误差分析 实验1.1(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 )1.1() ()20()2)(1()(20 1∏=-=---=k k x x x x x p 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 )2.1(0 )(19=+x x p ε 其中ε是一个非常小的数。这相当于是对(1.1)中19x 的系数作一个小的扰动。我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。 实验内容:为了实现方便,我们先介绍两个Matlab 函数:“roots ”和“poly ”。 roots(a)u = 其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程 01121=+++++-n n n n a x a x a x a 的全部根;而函数 poly(v)b = 的输出b 是一个n+1维变量,它是以n 维变量v 的各分量为根的多项式的系数。可见“roots ”和“poly ”是两个互逆的运算函数。 ;000000001.0=ess );21,1(zeros ve = ;)2(ess ve =

高等数学的实验报告册答案

《数学实验——高等数学分册》(郭科主编) ---《实验报告册》参考答案 ------轩轩 第5章 1.(1) syms x y; f=(1-cos(x^2+y^2))/((x^2+y^2)*exp(x^2*y^2)); limit(limit(f,x,0),y,0) ans = (2) syms x y; f=(log(x*exp(x)+exp(y)))/sqrt(x^2+y^2); limit(limit(f,x,0),y,0) ans = NaN 另解 syms x y; f=log(x*exp(x)+exp(y)); g=sqrt(x^2+y^2); limit(limit(f/g,x,0),y,0) ans = NaN 注:“()”多了以后,系统无法识别,但在matlab的语法上是合理的。在有的一些matlab 版本上可以识别。在以下的题目答案中同理。 (3) syms x y; f=(2*x*sin(y))/(sqrt(x*y+1)-1); limit(limit(f,x,0),y,0) ans = 4 另解

syms x y; f=2*x*sin(y); g=sqrt(x*y+1)-1; limit(limit(f/g,x,0),y,0) ans = 4 2.(1) syms x y; z=((x^2+y^2)/(x^2-y^2))*exp(x*y); zx=diff(z,x) zx = (2*x*exp(x*y))/(x^2 - y^2) - (2*x*exp(x*y)*(x^2 + y^2))/(x^2 - y^2)^2 + (y*exp(x*y)*(x^2 + y^2))/(x^2 - y^2) zy=diff(z,y) zy = (2*y*exp(x*y))/(x^2 - y^2) + (x*exp(x*y)*(x^2 + y^2))/(x^2 - y^2) + (2*y*exp(x*y)*(x^2 + y^2))/(x^2 - y^2)^2 注:所有的x在高的版本中都可以替换为x。(即,不用单引号,结果任然正确。前提为:不与前面的函数冲突。) (2)syms x y z; u=log(3*x-2*y+z); ux=diff(u,x) ux = 3/(3*x - 2*y + z) uy=diff(u,y) uy = -2/(3*x - 2*y + z) uz=diff(u,'z') uz = 1/(3*x - 2*y + z) (3)syms x y; z=sqrt(x)*sin(y/x);

数值分析实验报告

实验五 解线性方程组的直接方法 实验5.1 (主元的选取与算法的稳定性) 问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。 实验内容:考虑线性方程组 编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss 消去过程。 实验要求: (1)取矩阵?? ? ?? ?? ?????????=????????????????=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。取n=10计算矩阵的 条件数。让程序自动选取主元,结果如何? (2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。 (3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。 (4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。重复上述实验,观察记录并分析实验结果。 思考题一:(Vadermonde 矩阵)设 ?? ??????????????????????=? ? ? ?????????????=∑∑∑∑====n i i n n i i n i i n i i n n n n n n n x x x x b x x x x x x x x x x x x A 0020 10022222121102001111 ,, 其中,n k k x k ,,1,0,1.01 =+=, (1)对n=2,5,8,计算A 的条件数;随n 增大,矩阵性态如何变化? (2)对n=5,解方程组Ax=b ;设A 的最后一个元素有扰动10-4,再求解Ax=b (3)计算(2)扰动相对误差与解的相对偏差,分析它们与条件数的关系。 (4)你能由此解释为什么不用插值函数存在定理直接求插值函数而要用拉格朗日或牛顿插值法的原因吗? 相关MATLAB 函数提示: zeros(m,n) 生成m 行,n 列的零矩阵 ones(m,n) 生成m 行,n 列的元素全为1的矩阵 eye(n) 生成n 阶单位矩阵 rand(m,n) 生成m 行,n 列(0,1)上均匀分布的随机矩阵 diag(x) 返回由向量x 的元素构成的对角矩阵 tril(A) 提取矩阵A 的下三角部分生成下三角矩阵

计算方法上机实验报告——拉格朗日插值问题

计算方法上机实验报告——拉格朗日插值问题 一、方法原理 n次拉格朗日插值多项式为:Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x) n=1时,称为线性插值,L1(x)=y0(x-x1)/(x0-x1)+y1(x-x0)/(x1-x0)=y0+(y1-x0)(x-x0)/(x1-x0) n=2时,称为二次插值或抛物线插值,精度相对高些 L2(x)=y0(x-x1)(x-x2)/(x0-x1)/(x0-x2)+y1(x-x0)(x-x2)/(x1-x0)/(x1-x 2)+y2(x-x0)(x-x1)/(x2-x0)/(x2-x1) 二、主要思路 使用线性方程组求系数构造插值公式相对复杂,可改用构造方法来插值。 对节点xi(i=0,1,…,n)中任一点xk(0<=k<=n)作一n次多项式lk(xk),使它在该点上取值为1,而在其余点xi(i=0,1,…,k-1,k+1,…,n)上为0,则插值多项式为Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x) 上式表明:n个点xi(i=0,1,…,k-1,k+1,…,n)都是lk(x)的零点。可求得lk 三.计算方法及过程:1.输入节点的个数n 2.输入各个节点的横纵坐标 3.输入插值点 4.调用函数,返回z 函数语句与形参说明 程序源代码如下: 形参与函数类型 参数意义 intn 节点的个数 doublex[n](double*x) 存放n个节点的值 doubley[n](double*y) 存放n个节点相对应的函数值 doublep 指定插值点的值 doublefun() 函数返回一个双精度实型函数值,即插值点p处的近似函数值 #include #include usingnamespacestd; #defineN100 doublefun(double*x,double*y,intn,doublep); voidmain() {inti,n; cout<<"输入节点的个数n:"; cin>>n;

相关文档
相关文档 最新文档