数据分析MATLAB相关算法_第1页
数据分析MATLAB相关算法_第2页
数据分析MATLAB相关算法_第3页
数据分析MATLAB相关算法_第4页
数据分析MATLAB相关算法_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据分析-MATLAB相关算法

一.非线性方程求解1.二分法m文件:function[c,err,yc]=bisect(f,a,b,delta)%f是所要求解的函数%a,b是区间的左右限%delta是误差界%c是近似解%yc是函数f在c上的值,err为误差ifnargin<4

delta=1e-5;endya=feval('f',a);yb=feval('f',b);ifyb==0

c=b,return,endifya*yb>0,

disp('(a,b)不是有根区间');

return,endmax1=1+round((log(b-a)-log(delta))/log(2));fork=1:max1

c=(a+b)/2;

yc=feval('f',c);

ifyc==0

a=c;

b=c;

break,

elseifyb*yc>0

b=c;

yb=yc;

else

a=c;

ya=c;

end

if(b-a)<delta

break,

end

k,c=(a+b)/2,err=abs(b-a),yc=feval('f',c);end2.不动点迭代m文件function[p0,k,err,p]=fixpt(g,p0,tol.max1)%g是给定的迭代函数%p0是初值%p是不动点的近似值P(1)=p0;fork=2:max1

P(k)=feval('g',P(k-1));

k,err=abs(P(k)-P(k-1))

p=P(k);

if(err<tol)

break;end

ifk==max1

disp('超过了迭代最大次数;

endendP选定的迭代函数:functiony=g(x)y=sin(x)/x;二.方阵的特征值与特征向量1幂法function[mxbiaozhi]=mifa(A,jingdu,cishu)%幂法求矩阵最大特征值,其中%m为绝对值最大的特征值,x为对应最大特征值的特征向量%biaozhi表明迭代是否成功ifnargin<3

cishu=100;endifnargin<2

jingdu=1e-5;endn=length(A);x=ones(n,1);biaozhi='迭代失败!';k=0;m1=0;whilek<=cishu

v=A*x;

[vmax,k]=max(abs(v));

m=v(k);

x=v/m;

ifabs(m-m1)<jingdu

biaozhi='迭代成功!';break;

end

m1=m;

k=k+1;end三.常微分方程求解1.改进欧拉法解微分方程functionyout=gaijinoula(f,x0,y0,xn,n)%定义输入输出x=zeros(1,n+1);y=zeros(1,n+1);x(1)=x0;y(1)=y0;h=(xn-x0)/n;fori=1:n

x(i+1)=x(i)+h;

z0=y(i)+h*feval(f,x(i),y(i));

y(i+1)=y(i)+(feval(f,x(i),y(i))+feval(f,x(i+1),z0))*h/2;

end

shuchu=[x',y']fprintf('x(i)

y(i)')

举例:所要求解的函数:functionDy=f(x,y)Dy=x+y;2.四阶龙格库塔法解微分方程functionyout=xin(bianliang)%定义输入输出clearallx0=0;xn=1;y0=1;h=0.1;%设置初始值、区间和步长[y,x]=lgkt4j(x0,xn,y0,h);%四阶龙格库塔法n=length(x);fprintf('i

x(i)

y(i)\n');%输出格式fori=1:n

fprintf('%2d%3.3f%4.4f\n',i,x(i),y(i));end

function[y,x]=lgkt4j(x0,xn,y0,h)x=x0:h:xn;%设置区间n=length(x);y1=x;y1(1)=y0;fori=1:n

K1=f(x(i),y1(i));

K2=f(x(i)+h/2,y1(i)+h/2*K1);

K3=f(x(i)+h/2,y1(i)+h/2*K2);

K4=f(x(i)+h,y1(i)+h*K3);

y1(i+1)=y1(i)+h/6*(K1+2*K2+2*K3+K4);

endy=y1;

举例:functionDy=f(x,y)

Dy=y-2*x/y;

执行结果为:

i

x(i)

y(i)

10.0001.0000

20.1001.0954

30.2001.1832

40.3001.2649

50.4001.3416

60.5001.4142

70.6001.4832

80.7001.5492

90.8001.6125100.9001.6733111.0001.7321四.插值法1拉格朗日插值function[c,l]=lglr(x,y)%x为n个节点的横坐标组成的向量,y为纵坐标组成的向量%c为插值函数的系数组成的向量%输出为差值多项式的系数w=length(x);n=w-1;l=zeros(w,w);fork=1:n+1

v=1;

forj=1:n+1

ifk~=j

v=conv(v,poly(x(j)))/(x(k)-x(j));

end

end

l(k,:)=v;endc=y*l;

五.数据拟合

1.最小二乘拟合functionc=zxrc(x,y,m)%x是数据点横坐标,y数据点纵坐标%m要构造的多项式的系数,c是多项式由高到低的系数所组成的向量n=length(x);b=zeros(1:m+1);f=zeros(n,m+1);fork=1:m+1

f(:,k)=x'.^(k-1);enda=f'*f;b=f'*y';c=a\b;c=flipud(c);六.矩阵相关程序1.求矩阵的行列式functiond=hanglieshi(a)%求任意输入矩阵的行列式

clearall;

a=input('输入矩阵a=');

d=1;

n=size(a);%方阵的行(或者列)数

fork=1:n-1

e=a(k,k);%设矩阵的主元

fori=k:n

%求出矩阵的全主元

forj=k:n

ifabs(a(i,j))>e

e=a(i,j);

p=i;

q=j;

elsec=0;

end

end

end

forj=k:n%行交换

t=a(k,j);

a(k,j)=a(p,j);

a(p,j)=t;

end

ifp~=k%判断行列式是否换号

d=d*(-1);

elsed=d;

end

fori=k:n%列交换

t=a(i,k);

a(i,k)=a(i,q);

a(i,q)=t;

end

ifq~=k%判断行列式是否换号

d=d*(-1);

elsed=d;

end

ifa(k,k)~=0

fori=k+1:n

%消元

r=a(i,k)/a(k,k);

forj=k+1:n

a(i,j)=a(i,j)-r*a(k,j);

end

end

elsed=d;

endend

fori=1:n%求行列式

d=d*a(i,i);

enddisp('矩阵a的行列式为:')d

2.矩阵的换行functionc=huanhang(a)%实现矩阵换行clearall;a=input('输入矩阵a=');[m,n]=size(a);

forj=1:n

t=a(1,j);

a(1,j)=a(2,j);

a(2,j)=t;

end

c=a;

disp('换行后矩阵a变为:')

c

3.列主元消元法解方程functiond=jiefang(a)%列主元消元法解方程clearall;a=input('输入矩阵a=');[row,column]=size(a);

fori=1:column%每一列的列标

m(i)=i;

s(i)=0;

x(i)=0;

end

fork=1:row-1%最后一行不用比较

e=a(k,k);

p=k;

q=k;

fori=k:row

forj=k:column-1

ifabs(a(i,j))>abs(e)

e=a(i,j);

p=i;

q=j;

elsec=0;

end

end

end

t=m(k);%换列标记

m(k)=m(q);

m(q)=t;

fori=1:row

%列交换

t=a(i,k);

a(i,k)=a(i,q);

a(i,q)=t;

end

forj=k:column

%行变换

t=a(k,j);

a(k,j)=a(p,j);

a(p,j)=t;

end

ifa(k,k)==0

%消元

disp('非唯一解')

else

fori=k+1:row

r=a(i,k)/a(k,k);

forj=k:column

a(i,j)=a(i,j)-r*a(k,j);

end

end

end

end

ifa(row,row)==0

disp('非唯一解')

else

s(row)=a(row,column)/a(row,row);

s(row)

q=m(row);

x(q)=s(row);

fori=row-1:1

forj=i+1:row

s(i)=s(i)+a(i,j)*x(i);

end

s(i)=[a(i,column)-s(i)]/a(i,i);

q=m(i);

x(q)=s(i);

end

end

fori=1:row

x(i)

end

end

4.两矩阵相乘functiond=chengfa(A,B)%

实现两个矩阵相乘clearall;A=input('输入矩阵A=');B=input('输入矩阵B=')[mn]=size(A);[nbp]=size(B);C=zeros(m,p);ifn~=nb

disp('不满足矩阵相乘条件')elsefori=1:m

forj=1:p

d=0;

fork=1:n

d=d+A(i,k)*B(k,j);

end

C(i,j)=d;

endend

disp('矩阵AB结果为:')

C

End

5.矩阵元素最大值及下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论