1、xlsread和xlswrit函數(shù)
在MATLAB中經(jīng)常會用到數(shù)據(jù)的讀取,首先是從Excel中讀取數(shù)據(jù)到MATLAB中去。下面給出原始Excel數(shù)據(jù)內(nèi)容:

在MATLAB讀取結(jié)果如下:
m=xlsread('fanjufei.xls',1,'A1:C3')
m =
1 2 3
4 5 6
7 8 9
其中xlsread可以直接從Excel中讀取文件,'fanjufei.xls'表示讀取文件的名稱,1表示位于sheet1;'A1:C3'表示讀取數(shù)據(jù)的范圍。
xlswrite函數(shù):
可以從MATLAB中寫入數(shù)據(jù)到Excel中去,下面給出要寫入數(shù)據(jù):
clear
clc
n=[1 2 3 4;5 6 7 8;9 10 11 12];
xlswrite('fanjufei.xls',n,3,'B2:E4')

2、數(shù)據(jù)擬合
2.1 多項式擬合
例如:有兩組數(shù)據(jù)為x=[1 2 3 4 5 6 7 8 9];y=[9 7 6 3 -1 2 5 7 20];寫出x與y的表達式;
clear clc x=[1 2 3 4 5 6 7 8 9]; y=[9 7 6 3 -1 2 5 7 20]; P=polyfit(x,y,3); xi=010; yi=polyval(P,xi); plot(xi,yi,x,y,'r*');
注釋:polyfit(x,y,N),x、y為原始數(shù)據(jù),N為擬合最高次冪,

polyval(P,xi),P為各項的系數(shù),結(jié)果展示為:
P 0.148-1.403 1.85368.2698
故多項式的結(jié)果為:

2.2工具箱擬合
打開工具→基本擬合,選定擬合的方式。
x=[1 2 3 4 5 6 7 8 9]; y=[9 7 6 3 -1 2 5 7 20]; plot(x,y,'r*');
得出結(jié)果如下:

2.3自定義擬合函數(shù)
例如:要擬合數(shù)據(jù):

clear
clc
syms t
x=[0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6;14.4;15];
y=[1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;-0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
f=fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'});
cfun=fit(x,y,f)
xi=020;
yi=cfun(xi);
plot(x,y,'r*',xi,yi,'b-');
結(jié)果:
cfun =
General model:
cfun(t) = a*cos(k*t)*exp(w*t)
Coefficients (with 95% confidence bounds):
a = 0.9987 (0.9836, 1.014)
k = -1.001 (-1.006, -0.9958)
w = -0.2066 (-0.2131, -0.2002)

注釋:fittype是自定義擬合函數(shù),cfun=fit(x,y,f)擬合數(shù)據(jù)x、y,x、y必須為列向量。
故結(jié)果為:

3、數(shù)值計算
3.1多項式
(1)多項式表示方法

(2)多項式的運算
多項式乘除運算
計算代碼:
clear clc %多項式相乘conv u=[2 4 5 6];%多項式 v=[10 20 30];%多項式 p=[1 2 3];%多項式 w=conv(u,v) %conv為多項式相乘函數(shù),也可以嵌套使用; m=conv(conv(u,p),v) %多項式相除deconv [q,r]=deconv(w,v)%q為商,r為余數(shù);
結(jié)果:
w =
20 80 190 280 270 180
m =
20 120 410 900 1400 1560 1170 540
q =
2 4 5 6
r =
0 0 0 0 0 0
多項式的導函數(shù)
k=polyder(p),返回多項式p的導函數(shù);
k=polyder(a,b),返回多項式a乘以b的導函數(shù);
[q,d]=polyder(b,a),返回多項式b整除a的導函數(shù),其分子返回給q,分母為d;
clear clc x=[1 2 3 4]; y=[1 2 3 4]; z=polyder(x,y)
z =
6 20 40 60 50 24
多項式求值
y=polyval(p,x),代數(shù)多項式求值,若x為一數(shù)值,則求在該點的值;若為向量、矩陣,則求向量、矩陣中的每一個值;
y=polyvalm(p,x),矩陣多項式求值,要求x為方陣;
p=[1,2,3]; x=1:5; y=polyval(p,x)
y =
6 11 18 27 38
多項式的根
函數(shù)roots:可以求出多項式等于0的根;
函數(shù)poly:可以通過多項式等于0的根,求出多項式;
p=[1 2 1]; r=roots(p) %求p的根 v=poly(r) %求r根的多項式
r =
-1
-1
v =
1 2 1
3.2曲線擬合
曲線擬合用一個比較簡單的函數(shù)去逼近一個未知的函數(shù),曲線擬合最優(yōu)的標準采用最小二乘法原理,擬合的結(jié)果使得誤差的平方和最小。
在MATLAB上最常采用polyfit函數(shù)來求最小二乘擬合多項式的系數(shù),再用polyval函數(shù)求出多項式在所給出點的值;

x=linspace(0,2*pi,50); y=cos(x); p=polyfit(x,y,6); t=linspace(0,2*pi,50); y1=polyval(p,t); plot(x,y,t,y1,'r*')

從圖像上可以看出擬合比較好,紅色星號都在曲線上;
3.3 數(shù)據(jù)插值
(1)一維數(shù)據(jù)插值
插值函數(shù):yi=interp1(x,y,xi,method)
根據(jù)在x,y處的值,計算函數(shù)在xi處的值,其中xi的值不能大于x的值;
method插值方法:linear(線性插值)、nearest(最近點插值)、cubic(3次多項式插值)、spline(3次樣條插值);
例2:下面為1900—1990每隔10年的人口普查數(shù)據(jù):
t=19001990;
p=[75 91 105 123 131 150 179 203 226 249]
求在1985年人口數(shù)值;
t=19001990; p=[75 91 105 123 131 150 179 203 226 249]; yi=interp1(t,p,1985)
得出1985年的人口數(shù)為:
yi = 237.5000
估計1900—2000年人口數(shù)值
t=19001990; p=[75 91 105 123 131 150 179 203 226 249]; xi=1900:2000; yi=interp1(t,p,xi,'spline'); plot(t,p,':o',xi,yi,'-r')

(2)二維數(shù)據(jù)插值
插值函數(shù):Z1=interp2(X,Y,Z,XI,YI,method)
X,Y為原始采樣點,Z為對應的采樣值,XI,YI表示欲插值的點,method為插值方法與一維插值方法一樣;
例3:為函數(shù)peaks插入更多的線條;
[X,Y]=meshgrid(-44); Z=peaks(X,Y); [XI,YI]=meshgrid(-44); ZI=interp2(X,Y,Z,XI,YI); mesh(X,Y,Z) hold on mesh(XI,YI,ZI+20)

3.4 數(shù)值微積分
(1)數(shù)值微分
在MATLAB中沒有直接求數(shù)值導數(shù)的函數(shù),只有計算向前差分的函數(shù)diff,其調(diào)用格式為:
DX=diff(X):計算向量X的向前差分,DX(i)=X(i+1)-X(i),i=1......n-1;
DX=diff(X,n):計算X的n價向前差分;
DX=diff(A,n,dim):計算矩陣A的n價差分,dim=1(默認值)
x=[3 2 1]; dx=diff(x)
dx =
-1 -1
(2)數(shù)值積分
被積函數(shù)是解析式
MATLAB有兩種函數(shù)求解定積分,調(diào)用格式為:
quad(函數(shù),a,b,tol,trace)
quadl(函數(shù),a,b,tol,trace)
其中,a為下限,b為上限,tol為精度,trace是否展現(xiàn)積分過程;

f=inline('1./(x.^3-2*x-5)');
y=quad(f,0,2)
y1=quadl(f,0,2)
y = -0.4605 y1 = -0.4605
被積函數(shù)為表格定義
用trapz(x,y)來進行計算,x為向量,y為x的函數(shù);

x=01; y=exp(-x.^2); trapz(x,y)
ans =
0.7468
二重積分數(shù)值求解
MATLAB提供的函數(shù)為:
y=dblquad(f,a,b,c,d,tol,trace),

function f= fan(x,y) f=x+y; end
y=dblquad('fan',0,2,0,2)
結(jié)果:
y =
8
3.5 線性方程組求解
(1)直接解法
對于方程Ax=b來說,可以用x=A;即x=inv(A)*b;

A=[1 2 3;3 6 7;2 6 3]; b=[8 30 25]'; x=A
x =
17.0000
0.0000
-3.0000
(2)LU求解、QR求解、Cholesky求解
例8:求例7;
A=[1 2 3;3 6 7;2 6 3]; b=[8 30 25]'; [L,U]=lu(A); %LU分解 x=U(L) [Q,R]=qr(A); %QR分解 x_val=R(Q) R=chol(A); %Cholesky分解 x_val_1=R(R')
3.6 常微分方程數(shù)值求解
基于龍格—庫塔法,MATLAB提供的常微分方程求解的函數(shù)為:
[t,y]=ode23('fname',tspan,y0),二價、三價龍格—庫塔法;
[t,y]=ode45('fname',tspan,y0),四價、五價龍格—庫塔法;
fname是定義f(t,y)的函數(shù)文件名,該函數(shù)文件必須返回一個列向量;tspan形式為[t0,tf]表示求解區(qū)間,y0是初始狀態(tài)列向量;t 給出時間向量,y為狀態(tài)向量;

function f = fan(t,x) f=[-2*x(2);x(1)]; end
tf=25;
[t,y]=ode45('fan',[t0,tf],[1,0]);
subplot(121);
plot(t,y(:,2))
subplot(122);
plot(y(:,2),y(:,1))
axis equal

審核編輯:湯梓紅
-
matlab
+關注
關注
189文章
3016瀏覽量
237510 -
文件
+關注
關注
1文章
587瀏覽量
25909 -
Excel
+關注
關注
4文章
230瀏覽量
57532 -
函數(shù)
+關注
關注
3文章
4405瀏覽量
66792
原文標題:MATLAB基礎教程(xlsread和xlswrit函數(shù)+數(shù)據(jù)擬合+數(shù)值計算)
文章出處:【微信號:嵌入式職場,微信公眾號:嵌入式職場】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
MATLAB(1)--MATLAB數(shù)值數(shù)據(jù)
使用matlab對數(shù)據(jù)進行擬合
MATLAB曲線擬合
【下載】《工程與科學數(shù)值方法的MATLAB實現(xiàn)(第2版)》
labview調(diào)用matlab中的高斯擬合函數(shù)cftool
Matlab中使用S函數(shù)實現(xiàn)離散化數(shù)值計算的問題有哪些
matlab在科學計算中的應用
Matlab數(shù)據(jù)擬合基礎函數(shù)的使用
MATLAB入門教程之MATLAB數(shù)值計算與圖形繪制基礎的詳細資料概述
MATLAB中常用的數(shù)值計算和數(shù)值分析基礎知識
如何利用Matlab的lsqnonlin函數(shù)處理復雜函數(shù)的擬合問題

MATLAB基礎教程(xlsread和xlswrit函數(shù)+數(shù)據(jù)擬合+數(shù)值計算)
評論