1.用Newton迭代法求方程   的第一个正根.

作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/

newton.m:
function x1=newton(x0,eps)
format long
format compact
x1=x0-dao(x0);
while abs(x1-x0)>eps
x0=x1;
x1=x0-dao(x0);
end dao.m:
function y=dao(x)
y=tan(x)-exp(x);
y1=tan(x)^2 - exp(x) + 1;
y=y/y1;

结果:

>> x1=newton(1,1e-6)

x1 =

1.306326940423080

2.作矩阵  的LU分解.

lu12.m:
function [l,u]=lu12(a,n)
for k=1:n-1
for i=k+1:n
a(i,k)=a(i,k)/a(k,k);
for j=k+1:n
a(i,j)=a(i,j)-a(i,k)*a(k,j);
end
end
end
l=eye(n);
u=zeros(n,n);
for k=1:n
for i=k:n
u(k,i)=a(k,i);
end
end
for k=1:n
for j=1:k-1
l(k,j)=a(k,j);
end
end 结果:
>> a=[4 1 1 1;8 5 1 3;12 -3 7 2;4 10 2 7];
>> [l,u]=lu12(a,4)
l =
1 0 0 0
2 1 0 0
3 -2 1 0
1 3 2 1
u =
4 1 1 1
0 3 -1 1
0 0 2 1
0 0 0 1

3.用Jacobi迭代法求解方程组, 其中.

jacobi.m:
function x=jacobi(a,b,x0,n,tol,m)
x=zeros(n,1);
for k=0:m
for i=1:n
s=0;
for j=1:n
if j~=i
s=s+a(i,j)*x0(j,1);
end
end
x(i,1)=(b(i,1)-s)/a(i,i);
if norm(x-x0,inf)<tol
break;
end
x0(i,1)=x(i,1);
end
end 结果:
>> a=[4 1 -1 1;-1 4 -1 1;1 2 5 -1;3 2 -1 7];
>> b=[2 8 8 10]';
>> x0=[0 0 0 0]';
>> x=jacobi(a,b,x0,4,1e-6,50)
x =
-0.000000983453000
2.000001278748222
0.999997309599650
0.999999964663427

  4.用复化的辛甫生方法计算.

simpson.m:
function [SI,Y,esp]=simpson(a,b,m)
%a,b为区间左右端点,xps(x)为求积公式,m*2等分区间长度
h=(b-a)/(2*m);
SI0=xps(a)+xps(b);
SI1=0;
SI2=0;
for i=1:((2*m)-1)
x=a+i*h;
if mod(i,2)==0
SI2=SI2+xps(x);
else
SI1=SI1+xps(x);
end
end
SI=vpa(h*(SI0+4*SI1+2*SI2)/3,10);
syms x
Y=vpa(int(xps(x),x,a,b),10);
esp=abs(Y-SI); xps.m:
function y=xps(x)
y=exp(x^2)-sin(x)/x; 结果:
>> [SI,Y,esp]=simpson(1,3,10)
SI =
1443.251264
Y =
1442.179902
esp =
1.0713621257845176160117262043059

  5.用改进的尤拉法解方程 

euler22.m:
function [B1,B2]=euler22(a,b,n,y0)
%欧拉法解一阶常微分方程
%初始条件y0
h = (b-a)/n; %步长h
%区域的左边界a
%区域的右边界b
x = a:h:b;
m=length(x); %改进欧拉法
y = y0;
for i=2:m
y(i)=y(i-1)+h/2*( oula2(x(i-1),y(i-1))+oula2(x(i),y(i-1))+h*(oula2(x(i-1),x(i-1))));
B1(i)=x(i);
B2(i)=y(i);
end
plot(x,y,'m-');
hold on; %精确解用作图
xx = x;
f = dsolve('Dy=exp(x-y)+(x^2)*exp(-y)','y(0)=0','x');%求出解析解
y = subs(f,xx); %将xx代入解析解,得到解析解对应的数值 plot(xx,y,'k--');
legend('改进欧拉法','解析解'); oula2.m:
function f=oula2(x,y)
f=exp(x-y)+(x^2)*exp(-y); 结果:
>> [B1,B2]=euler22(0,1,10,0)
B1 =
Columns 1 through 7
0 0.100000000000000 0.200000000000000 0.300000000000000 0.400000000000000 0.500000000000000 0.600000000000000
Columns 8 through 11
0.700000000000000 0.800000000000000 0.900000000000000 1.000000000000000
B2 =
Columns 1 through 7
0 0.110758545903782 0.222173861791736 0.335492896789537 0.451351722029268 0.569931474513367 0.691088488902808
Columns 8 through 11
0.814464555075657 0.939577860819895 1.065894210026593 1.192879090561291

  

6.(1) 用拟合下列数据:

 x

2.36

3.73

5.951

8.283

 f(x)

14.1

16.2

18.3

21.4

LSM1.m:
function [a,b,c]=LSM1(x,y,m) %x,y为序列长度相等的数据向量,m为拟合多项式次数
format short;
A=zeros(m+1,m+1);
for i=0:m
for j=0:m
A(i+1,j+1)=sum(x.^(i+j));
end
b(i+1)=sum(x.^i.*y);
end
a=A\b';
p=fliplr(a');
%y=p[0]*x^m+p[1]*x^(m-1)+...+p[m-1]*x+p[m];
a=p(3);
b=p(2);
c=p(1); 结果:
>> x=[2.36 3.73 5.951 8.283];
>> y=[14.1 16.2 18.3 21.4];
>> [a,b,c]=LSM1(x,y,2)
a =
11.4457
b =
1.1866
c =
8.1204e-04

(2) 按如下插值原则,求Newton插值多项式:

 x

2.36

3.73

5.951

8.283

 f(x)

14.1

16.2

18.3

21.4

说明:最后,一定给清楚各多项式的系数!

newploy.m:
function [A,C,L,wcgs,Cw]= newploy(X,Y)
n=length(X); A=zeros(n,n); A(:,1)=Y';
q=1.0; c1=1.0;
for j=2:n
for i=j:n
A(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1));
end
b=poly(X(j-1));q1=conv(q,b); c1=c1*j; q=q1;
end
C=A(n,n); b=poly(X(n)); q1=conv(q1,b);
for k=(n-1):-1:1
C=conv(C,poly(X(k))); d=length(C); C(d)=C(d)+A(k,k);
end
L(k,:)=poly2sym(C); Q=poly2sym(q1);
syms M
wcgs=M*Q/c1; Cw=q1/c1; 结果:
>> x=[2.36 3.73 5.951 8.283];
>> y=[14.1 16.2 18.3 21.4];
>> [A,C,L,wcgs,Cw]= newploy(x,y)
A =
14.1000 0 0 0
16.2000 1.5328 0 0
18.3000 0.9455 -0.1636 0
21.4000 1.3293 0.0843 0.0418
C =
0.0418 -0.6674 4.4138 6.8506
L =
(3015319848353441*x^3)/72057594037927936 - (3005803726105311*x^2)/4503599627370496 + (4969523982821561*x)/1125899906842624 + 7713109820116169/1125899906842624
wcgs =
(M*(x^4 - (5081*x^3)/250 + (1273498286182623*x^2)/8796093022208 - (7485266609524121*x)/17592186044416 + 7633404131354389/17592186044416))/24
Cw =
0.0417 -0.8468 6.0325 -17.7287 18.0795 newpoly2.m:
function y= newpoly2(X,Y,x)
n=length(X); m=length(x);
for t=1:m
z=x(t); A=zeros(n,n);A(:,1)=Y';
q1=1.0; c1=1.0;
for j=2:n
for i=j:n
A(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1));
end
q1=abs(q1*(z-X(j-1)));c1=c1*j;
end
C=A(n,n);q1=abs(q1*(z-X(n)));
for k=(n-1):-1:1
C=conv(C,poly(X(k)));d=length(C); C(d)=C(d)+A(k,k);
end
y(k)= polyval(C, z); end
结果:
>> y= newpoly2(x,y,15)
y =
64.1181

MATLAB数值分析实验的更多相关文章

  1. 数值分析实验之曲线最小二乘拟合含有噪声扰动(python实现)

    一.实验目的 掌握最小二乘法拟合离散数据,多项式函数形式拟合曲线以及可以其他可以通过变量变换转化为多项式的拟合曲线目前待实现功能: 1. 最小二乘法的基本实现. 2. 用不同数据量,不同参数,不同的多 ...

  2. matlab神经网络实验

    第0节.引例  本文以Fisher的Iris数据集作为神经网络程序的测试数据集.Iris数据集可以在http://en.wikipedia.org/wiki/Iris_flower_data_set  ...

  3. MATLAB数学实验总结

    L1 MATLAB 基础知识 P6 表1-3 数据显示格式 format rat format long P20 表2-5 常用的矩阵函数 zeros(m,n) %零阵 eye(n) %单位阵 one ...

  4. matlab数学实验--第二章

    控制流: 分支语句: if (条件式),语句:end if (条件式1),语句1:elseif (条件式2),语句2:……:else,语句:end iwitch(分支变量) case(值1),语句1: ...

  5. matlab数学实验--第一章

    一.            数据和变量: 省略号(三个英文句点):表示换行 历史指令调用:用方向键上下 数据显示格式:                    format short          ...

  6. 一个自带简易数据集的模拟线性分类器matlab代码——实验训练

      %%%% Tutorial on the basic structure of using a planar decision boundary %%%% to divide a collecti ...

  7. 9、继续matlab数值分析

    1.matlab拉格朗日插值 function yi=Lagrange(x,y,xi) %x为向量,全部的插值节点 %y为向量,插值节点处的函数值 %xi为标量或向量,被估计函数的自变量: %yi为x ...

  8. MATLAB模拟布丰投针实验

    MATLAB模拟布丰投针实验 标签(空格分隔): 算法 Buffon's Needle 桌面上有距离为a的若干平行线,将长度为L的针随机丢在桌面上,则这根针与平行线相交的概率是多少?假定L < ...

  9. 史上最全的Matlab资源电子书教程和视频下载合集【超级推荐】

    收藏吧,网上搜集的,费了老大劲了,推荐给有需要的人,^_^.   MATLAB课件2007北京交通大学.zip 4.87 MB   A Guide to MATLAB for Beginners an ...

随机推荐

  1. MongoDB调优-查询优化-MongoDB Profiler

    MongoDB查询优化-MongoDB Profiler MongoDB Profiler 概述 官方文档:https://docs.mongodb.com/manual/tutorial/manag ...

  2. 泛型理解及应用(二):使用泛型编写通用型Dao层

    相信目前所有的IT公司网站在设计WEB项目的时候都含有持久层,同样地使用过Hibernate的程序员都应该看过或者了解过Hibernate根据数据库反向生成持久层代码的模板.对于Hibernate生成 ...

  3. [转]git操作指南

    [GIT上手篇]-1-基本操作(初始化仓库,添加.提交文件) 创建(初始化)一个GIT库 init 命令 说明:用于仓库的初始化 参数:--bare 创建一个纯仓库(不含缓存区和工作目录,服务器一般采 ...

  4. 【转载】To the Virgins, to Make Much of Time

    Gather ye rosebuds while ye may Old Time is still a-flying And this same flower that smiles today To ...

  5. [转]Angular 4|5 Material Dialog with Example

    本文转自:https://www.techiediaries.com/angular-material-dialogs/ In this tutorial, we're going to learn ...

  6. [转]完整记录在 windows7 下使用 docker 的过程

    本文转自:https://www.jianshu.com/p/d809971b1fc1 借助 docker 可以不在开发电脑中安装环境,比如 nodejs,记录下如何实现. 下载安装 根据自己的电脑系 ...

  7. Redis Eval Script

    简介 从Redis 2.6 版本开始,内嵌支持 Lua 环境.通过使用EVAL或EVALSHA命令可以使用 Lua 解释器来执行脚本. EVAL和EVALSHA的使用是差不多的(下面有讲区别). EV ...

  8. Spring中四种实例化bean的方式

    本文主要介绍四种实例化bean的方式(注入方式) 或者叫依赖对象实例化的四种方式.上面的程序,创建bean 对象,用的是什么方法 ,用的是构造函数的方式 (Spring 可以在构造函数私有化的情况下把 ...

  9. Linux常用基本命令:三剑客命令之-awk输入输出分隔符

    输入分隔符,英文原文为field separator,此处简称为FS,默认是空白字符(即空格),awk默认以空白字符为分隔符对每一行进行分割. 输出分割符,英文原文为output field sepa ...

  10. LintCode Sqrt(x)

    Implement int sqrt(int x). Compute and return the square root of x. Have you met this question in a ...