數據分析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

提交評論