天天看點

matlab擷取等高線的坐标,[matlab資料拟合曲線]matlab擷取等高線的資料

篇一 : matlab擷取等高線的資料

contour(X,Y,Z,v)畫出Z在向量v所有值處的等高線,如隻想畫出Z在i處的等高線,則調用contour(X,Y,Z,[i,i])。如果沒有圖形,可以将contour3試試看。

另外,若想獲得某一等高線處的具體資料,則用[c,h]=contour(X,Y,Z,[i,i]).其中c中即包含等高線的資訊,即對應Z=i處的xdata向量和ydata向量。直接調用c就可以了,一般情況下xdata向量和ydata向量過長,顯示的時候是分段顯示的dim1,dim2...表示接下來一段顯示的[xdata,ydata]的長度,如下:

C = [value1 xdata(1) xdata(2)... value2 xdata(1)xdata(2)...;

dim1 ydata(1)ydata(2)...dim2 ydata(1)ydata(2)...]

為友善檢視,調用C'更清晰。

另外,讀取任一matlab的fig圖的資料的方法如下:

open('D:\design_soft\work\w=60.fig'); %打開圖

Ih=findall(gca,'type','line');%獲得曲線的句柄

xc=get(Ih,'xdata');

yc=get(Ih,'ydata');

另外注意:contour(Z) draws acontour plot of matrix Z, where Z is interpreted as heights withrespect to the x-y plane. Z must be at least a 2-by-2 matrix. Thenumber of contour levels and the values of the contour levels arechosen automatically based on the minimum and maximum values of Z.The ranges of the x- and y-axis are[1:n] and [1:m], where [m,n] = size(Z).不要颠倒了!故調用時:

i=1;

for a4=-a:delta:a

k=1;

for a5=-b:delta:b

f(i,k)=int0(a4,a5);%給二維矩陣f指派,調用int0函數

k=k+1;

end

i=i+1;

end

a4=-a:delta:a;

a5=-b:delta:b;

meshgrid(a4,a5);%meshgrid産生(a4,a5)網格

[c,h]=contour3(a4,a5,f',[0,0]);%将f轉置一下才能和meshgrid(a4,a5)相比對!

篇二 : 資料曲線拟合及MATLAB實作

劉連香

摘 要:本文介紹了數學模組化和資料曲線拟合的原理方法,并給出了非線性曲線拟合的最小二乘法的MATLAB實作過程,解決了一個醫學上的實際問題――給藥方案制定問題。

關鍵詞:曲線拟合; 最小二乘;給藥方案

Abstract:This paper introduces the mathematical model and data fitting principle method, and gives the nonlinear curve fitting by least square method in the process of MATLAB implementation, solves a practical medical problems - delivery plan problem.

Key words:curve fitting; least squares; dosing regimens

在很多科學實驗、工程數學中,常常需要确定一個變量依存于另一個或更多的變量的關系,即函數。但實際上确定函數的形式(線性形式、乘法形式、幂指形式或其它形式)時往往沒有先驗的依據。隻能在收集的實際資料的基礎上對若幹合乎理論的形式進行試驗,從中選擇一個最能拟合有關資料(即最有可能反映實際問題)的函數形式。下面介紹用MATLAB求解曲線拟合的實際問題。

一、曲線拟合的最小二乘法

基本思路:對科學實驗有一組實驗資料(xi,yi),i=1,2,…,m ,要求一個函數f(x)=a1f1(x)+a2f2(x)+…+amfm(x)與所給資料(xi,yi),i=1,2,…,m 拟合,使函數與所有資料點最為接近,其中fk(x)是事先標明的一組函數,ak是待定系數(k=1,2…,m,m 用最小二乘法求拟合曲線時,首先要确定f(x)的形式,這不單純是數學問題,還與所研究問題的運動規律及所得觀測資料有關。通常要從問題的運動規律及給定資料描圖,确定f(x)的形式,并通過實際計算選出較好的結果。

二、MATLAB求解過程

在最小二乘法拟合中,若要尋求的函數f(x)是任意的非線性函數,則稱為非線性最小二乘拟合。MATLAB6?3的優化工具箱中提供了求非線性最小二乘拟合函數:lsqcurvefit。使用這個指令時,要先建立M-檔案fun?m,在其中定義函數F(x)。

設已經xdata=(xdata1,xdata2,…,xdatan),ydata=(ydata1,ydata2,…,ydatan),lsqcurvefit用以求參量x(向量)的向量值函數:

F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T中的參變量x(向量),使得

∑ni=1(F(x,xdatai)-ydata)2最小

輸入格式為:x=lsqcurvefit(‘fun’,x0,xdata,ydata)

輸出目标函數值格式:f=fun(x,xdata),其中x0為疊代的初值。

實 例 給藥方案制定問題:一種新藥用于臨床之前,必須設計給藥方案。在快速靜脈注射的給藥方式下,所謂給藥方案是指:每次注射計量多大,間隔時間多長。藥物進入機體後血液輸送到全身,在這個全過程中不斷地被吸收、分布、代謝,最終排出體外,藥物在血液中的濃度,即機關體積血液中的藥物含量,稱為血藥濃度。在最簡單的一室模型中,将整個機體看作一個房室,稱中心室,室内血藥濃度是均勻的。快速靜脈注射後,濃度立即上升;然後迅速下降;當濃度太低時,達不到預期的治療效果;當濃度太高,又可能導緻藥物中毒或副作用太大。臨床上,每種藥物有一個最小有效濃度c1和一個最大有效濃度c2.設計給藥方案時,要使血液濃度保持在c1-c2之間。本題c1=10,c2=25(ug/ml)。

通過實驗,對某人用快速靜脈注射方式一次注入該藥物300mg後,在一定時刻t(h)采集血藥,測得血藥濃度c(ug/ml)如下表:

解: 問題分析:要設計給藥方案,必須知道給藥後血藥濃度随時間變化的規律。

在半對數坐标中做出t與c的關系圖(如右下圖),此圖說明血藥濃度資料符合負指數變化規律。

1.求血藥濃度變化規律

假設:(1)機體看作一個房室,室内血藥濃度均勻――一室模型。

([]2)藥物排除速率與血藥濃度成正比,比例系數k(>0)。

(3)血液容積為v,t=0時注射劑量為d,則t=0血藥濃度為d/v。

由假設(2)得: dcdt=-kc

由假設(3)得:c(0)=d/v

解微分方程:dcdt=-kc

c(0)=d/v

得:c(t)=dve-kt

在此,d=300mg,t及c(t)在某些點處的值見前表,下面通過拟合求出參數k,v用非線性最小二乘拟合c(t)--用lsqcurvefit函數。

(1)先用M-檔案curvefun3?m定義函數

Function f=curvefun3(x,tdata)

d=300

f=(x(1)\\d)*exp(-x(2)*tdata) %x(1)=v;x(2)=k

(2)再編寫主程式lihe2?m

Clear

tdata=[0?25 0?5 1 1?5 2 3 4 6 8];

cdata=[19?21 18?15 15?36 14?10 12?89 9?32 7?45 5?24 3?01];

x0=[10,0?5];

x=lsqcurvefit(‘curvefun3’,x0,tdata,cdata);

f=curvefun3(x,tdata)

x

計算結果:k=0?2420(1/h),v=14?8212(L).

2.制定給藥方案

假設:(1)設每次注射劑量D,間隔時間。(2)血藥濃度c(t)應c1≤c(t)≤c2。(3)初次劑量D0應加大。給藥方案記為:D0,D,τ,則:

(1) D0=vc2,D=v(c2-c1)

(2) c1=c2e-kτ?τ=1klnc2c1

将c1=10, c2=25, k=0?2347, v=15?02代人(1)(2)計算得:

D0=375?5,D=225?3,τ=3?9

故可制定給藥方案:D0=375(mg),D=225(mg),τ=4(h)即首次注射375mg,其餘每次注射225mg,注射的間隔時間 為4h.(作者機關:江西城市職業學院)

參考文獻

[1] 張韻華,奚梅成,陳效群.數值計算方法和算法[M].北京:科學出版社,2002。

[2] 于潤偉. MATLAB基礎及應用[M].北京:機械工業出版社, 2003。

[3] 李慶揚 王能超 易大義 數值分析(第4版) 清華大學出版社,2005。

[4] 蕭樹鐵 ,數學實驗,高等教育出版社,1999。