⑴ 求首次適應演算法的c語言程序!(計算機操作系統的)
最佳適應演算法C++程序:
struct list // 初始化數據的結構體
{
int num;
int adr;
int end;
int size;
}s[]={{1,1000,2999,2000},{2,500,799,300},{3,3500,3699,200},{4,4000,4499,500}}; // 初始化空閑分區
/*void print(struct list *p,int n) // print函數作用輸出結果
{
int flag1=1;
int flag2=1;
int i,j=0;
cout<<"-------------------------------------\n";
for(i=0;i {
if(p->size==0) // 控制不輸出size=0的空閑塊
{
flag2=0;
j++;
continue;
}
else
flag2=1;
if(p->size!=0&&flag2!=0)
{
flag1=0;
cout<<"序號:"<num-j/*輸出的序號仍然是從1開始*//*<<" 起始位置:"<adr<<" 終止位置:"<end<<" 空閑塊大小:"<size< }
}
if(flag1==1) // 當所有的空閑塊正好被分配完時
cout<<"\n空閑內存已被分配完,請回收!\n";
cout<<"-------------------------------------\n";
}*/
void print(struct list a[],int n) // print函數作用輸出結果
{
int i;
cout<<"-------------------------------------\n";
if(a[0].size==0)
{
for(i=0;i {
a[i].adr=a[i+1].adr;
a[i].size=a[i+1].size;
a[i].end=a[i+1].end;
}
k=k-1;
}
if(k==0)
cout<<"\n空閑塊已經分配完畢,需要再分配,請回收!\n";
for(i=0;i cout<<"序號:"< cout<<"-------------------------------------\n";
}
未完。請自己從參考資料上復制。
⑵ 最佳適應演算法
最佳適應演算法:
1、最佳適應演算法(Best Fit):它從全部空閑區中找出能滿足作業要求的、且大小最小的空閑分區,這種方法能使碎片盡量小。為適應此演算法,空閑分區表(空閑區鏈)中的空閑分區要按大小從小到大進行排序,自表頭開始查找到第一個滿足要求的自由分區分配。
該演算法保留大的空閑區,但造成許多小的空閑區。
2、首次適應演算法(First Fit):從空閑分區表的第一個表目起查找該表,把最先能夠滿足要求的空閑區分配給作業,這種方法目的在於減少查找時間。為適應這種演算法,空閑分區表(空閑區鏈)中的空閑分區要按地址由低到高進行排序。
該演算法優先使用低址部分空閑區,在低址空間造成許多小的空閑區,在高地址空間保留大的空閑區。
3、循環首次適應演算法(Next Fit):該演算法是首次適應演算法的變種。在分配內存空間時,不再每次從表頭(鏈首)開始查找,而是從上次找到空閑區的下一個空閑開始查找,直到找到第一個能滿足要求的的空閑區為止,並從中劃出一塊與請求大小相等的內存空間分配給作業。
該演算法能使內存中的空閑區分布得較均勻。
⑶ 鎿嶄綔緋葷粺鐨勪富瑕佺畻娉曢兘鏈夊摢浜
涓銆佽繘紼嬶紙浣滀笟錛夎皟搴︾畻娉
- 鍏堟潵鍏堟湇鍔¤皟搴︾畻娉曪紙FCFS錛夛細閫夋嫨鏈鍏堣繘鍏ュ氨緇闃熷垪鐨勮繘紼嬶紝鍒嗛厤澶勭悊鍣ㄧ洿鑷沖叾瀹屾垚鎴栧洜浜嬩歡闃誨炪傛ょ畻娉曞埄浜庨暱榪涚▼錛屼笉鍒╀簬鐭榪涚▼銆
- 鐭榪涚▼錛堜綔涓氾級浼樺厛璋冨害綆楁硶錛圫PF錛夛細閫夋嫨浼拌¤繍琛屾椂闂存渶鐭鐨勮繘紼嬶紝浼樺厛鍒嗛厤澶勭悊鍣ㄣ
- 鏃墮棿鐗囪疆杞璋冨害綆楁硶錛氬皢CPU鍒嗛厤緇欓槦棣栬繘紼嬶紝璁╁叾鎵ц屼竴涓鏃墮棿鐗囥傛椂闂寸墖鐢ㄥ畬鍚庯紝榪涚▼鏆傚仠鎵ц岋紝絳夊緟涓嬩竴杞璋冨害銆
- 浼樺厛鏁拌皟搴︾畻娉曪細閫夋嫨浼樺厛鏉冩渶楂樼殑榪涚▼鍒嗛厤澶勭悊鍣ㄣ
- 鍝嶅簲姣旈珮鑰呬紭鍏堣皟搴︾畻娉曪細閫夋嫨鍝嶅簲姣旀渶楂樼殑榪涚▼錛屽鉤琛′簡鐭榪涚▼鍜岄暱榪涚▼鐨勬墽琛屻
- 澶氱駭闃熷垪璋冨害綆楁硶錛氬皢榪涚▼鍒嗕負澶氫釜闃熷垪錛屾牴鎹涓嶅悓絳栫暐鍒嗛厤澶勭悊鍣ㄣ
浜屻佸瓨鍌ㄥ櫒榪炵畫鍒嗛厤鏂瑰紡涓鍒嗗尯鍒嗛厤綆楁硶
- 棣栨¢傚簲鍒嗛厤綆楁硶錛團F錛夛細浠庣┖闂插垎鍖鴻〃寮濮嬮『搴忔煡鎵撅紝鎵懼埌絎涓涓婊¤凍浣滀笟闀垮害鐨勭┖闂插尯榪涜屽垎閰嶃
- 寰鐜棣栨¢傚簲綆楁硶錛氫粠涓婃″垎閰嶄綅緗鍚庡紑濮嬫煡鎵劇┖闂插垎鍖恆
- 鏈浣抽傚簲鍒嗛厤綆楁硶錛圔F錛夛細鎸戦夎兘婊¤凍浣滀笟瑕佹眰鐨勬渶灝忕┖闂插尯錛屽噺灝戝垎鍓插ぇ鍖哄煙鐨勫彲鑳芥с
涓夈侀〉闈㈢疆鎹㈢畻娉
- 鏈浣崇疆鎹㈢畻娉曪紙OPT錛夛細閫夋嫨姘鎬笉浣跨敤鎴栧湪鏈闀挎椂闂村唴涓嶅啀琚璁塊棶鐨勯〉闈㈡窐奼般
- 鍏堣繘鍏堝嚭緗鎹㈢畻娉曪紙FIFO錛夛細閫夋嫨鏈鍏堣繘鍏ュ唴瀛樼殑欏甸潰娣樻卑銆
- 鏈榪戞渶涔呮湭浣跨敤綆楁硶錛圠RU錛夛細娣樻卑鏈榪戞渶涔呮湭浣跨敤鐨勯〉闈銆
- 鏈灝戜嬌鐢ㄧ畻娉曪紙LFU錛夛細娣樻卑璁塊棶嬈℃暟鏈灝戠殑欏甸潰銆
鍥涖佺佺洏璋冨害
- 鍏堟潵鍏堟湇鍔★紙FCFS錛夛細鎸夎鋒眰璁塊棶鑰呯殑鍏堝悗嬈″簭鍚鍔ㄧ佺洏椹卞姩鍣ㄣ
- 鏈鐭瀵婚亾鏃墮棿浼樺厛錛圫STF錛夛細閫夋嫨紱誨綋鍓嶇侀亾鏈榪戠殑璇鋒眰璁塊棶鑰咃紝鍑忓皯紓佽噦縐誨姩銆
- 鎵鎻忕畻娉曪紙SCAN錛夛細浠庡綋鍓嶄綅緗寮濮嬶紝娌跨佽噦縐誨姩鏂瑰悜閫夋嫨鏈榪戠殑璁塊棶鑰呫傛棤璇鋒眰鏃舵敼鍙樼Щ鍔ㄦ柟鍚戙
- 寰鐜鎵鎻忕畻娉曪紙CSCAN錛夛細紓佽噦鍗曢」縐誨姩錛屼粠澶栧悜閲岄夋嫨鏈榪戠殑璁塊棶鑰呫傛棤璇鋒眰鏃跺洖鍒版渶澶栬塊棶鏌遍潰鍙鋒渶灝忕殑浣滀笟璇鋒眰銆
⑷ 【高分懸賞】用C/C++語言設計一個適應演算法(最先、最佳或最壞適應演算法)
考的是內存的動態劃分區域內容,很好寫啊
1.可以用數字來模擬內存區域劃分情況,比如建一個100大小的數組(結構為struc (區號,值),值為0表示空閑,值為1表示佔用,初始化幾個已確定佔有的分區,分區一,1-5 佔有,6-12 空閑,。。。。。。。,並建立空閑區域表,很簡單,從頭到尾對數組掃描下就知道了
2.最先適應:從內存開始地址找到第一個大於請求大小的連續空閑區域,如請求5個空間,那就在剛開始6-12空閑處建立分區二 ,6-11 ,佔用
3.最佳適應:指所有空閑塊最適應請求大小的那塊,min(空閑塊大小-請求大小)
4.最壞:指適應請求大小,且最大的那塊空閑區域
⑸ 基於RLS演算法和LMS的自適應濾波器的MATLAB程序
% RLS演算法
randn('seed', 0) ;
rand('seed', 0) ;
NoOfData = 8000 ; % Set no of data points used for training
Order = 32 ; % 自適應濾波權數
Lambda = 0.98 ; % 遺忘因子
Delta = 0.001 ; % 相關矩陣R的初始化
x = randn(NoOfData, 1) ;%高斯隨機系列
h = rand(Order, 1) ; % 系統隨機抽樣
d = filter(h, 1, x) ; % 期望輸出
% RLS演算法的初始化
P = Delta * eye ( Order, Order ) ;%相關矩陣
w = zeros ( Order, 1 ) ;%濾波系數矢量的初始化
% RLS Adaptation
for n = Order : NoOfData ;
u = x(n:-1:n-Order+1) ;%延時函數
pi_ = u' * P ;%互相關戚爛函數
k = Lambda + pi_ * u ;
K = pi_'/k;%增益矢量
e(n) = d(n) - w' * u ;%誤差函數
w = w + K * e(n) ;%遞歸公式
PPrime = K * pi_ ;
P = ( P - PPrime ) / Lambda ;%誤差相關矩陣
w_err(n) = norm(h - w) ;%真實估計誤差
end ;
% 作圖表示結果
figure ;
plot(20*log10(abs(e))) ;%| e |的誤差曲線
title('學習曲線') ;
xlabel('迭代次數') ;
ylabel('輸出誤差估計') ;
figure ;
semilogy(w_err) ;%作實際估計誤差圖
title('矢量估計誤差') ;
xlabel('迭代次數') ;
ylabel('誤差權矢量') ;
%lms 演算法
clear all
close all
hold off%系統信道權數
sysorder = 5 ;%抽頭數
N=1000;%總采樣次數
inp = randn(N,1);%產生高斯隨機系列
n = randn(N,1);
[b,a] = butter(2,0.25);
Gz = tf(b,a,-1);%逆變高滾漏換函數
h= [0.0976;0.2873;0.3360;0.2210;0.0964;];%信道特性向量
y = lsim(Gz,inp);%加入雜訊
n = n * std(y)/(10*std(n));%雜訊信號
d = y + n;%期望輸出信號
totallength=size(d,1);%步長
N=60 ; %60節點作為訓練序列
%演算法的開始
w = zeros ( sysorder , 1 ) ;%初始化
for n = sysorder : N
u = inp(n:-1:n-sysorder+1) ;% u的矩陣
y(n)= w' * u;%系統輸出
e(n) = d(n) - y(n) ;%誤差
if n < 20
mu=0.32;
else
mu=0.15;
end
w = w + mu * u * e(n) ;%迭代方程
end
%檢驗結果
for n = N+1 : totallength
u = inp(n:-1:n-sysorder+1) ;
y(n) = w' * u ;
e(n) = d(n) - y(n) ;%誤差
end
hold on
plot(d)
plot(y,'r');
title('系統輸出') ;
xlabel('樣本')
ylabel('實際輸出')
figure
semilogy((abs(e))) ;% e的絕對值坐標
title('誤差曲線') ;
xlabel('樣本')
ylabel('誤差矢量')
figure%作圖
plot(h, 'k+')
hold on
plot(w, 'r*')
legend('實際權矢量','估計權矢量')
title('比較實際和估計權矢量') ;
axis([0 6 0.05 0.35])
數字濾波器在數字信號處理中的應用廣泛,是數字信號處理的重要基礎。自適應濾波器可以不必事先給定信號及雜訊的自相關函數,它可以利用前一時刻已獲得的濾波器參數自動地調節現時刻的濾波器參數使得濾波器輸出和未知的輸入之間的均方誤差最小化,從而它可以實現最優濾波。
自適應濾波器的演算法有很多,有RLS(遞歸最小二乘法)和LMS(最小均方演算法)等。自適應LMS演算法是一種很有用且很簡單的估計梯度的方法,在信號處理中得到廣泛應用。
本論文主要研究了自適應濾波器的基本結構和原理,然後介紹了最小均方誤差演算法(LMS演算法),並完成了一種基於MATLAB平台的自適應LMS自適應濾波器的設計,同時實現了對信號進行初步的降噪處理。
通過模擬,我們實現了LMS自適應濾波演算法,並從結果得知步長和濾波器的階數是濾波器中很重要的兩個參數,並通過修改它們證實了這一點,其中步長影響著收斂時間,而且階數的大小也會大大地影響自適應濾波器的性能。
自適應濾波器實際上是一種能夠自動調整本身參數的特殊維納濾波器,在設計時不需要預先知道關於輸入信號和雜訊的統計特性,它能夠在工作過程中逐步「了解」 或估計出所需的統計特性,並以此為依據自動調整自身的參數,以達到最佳濾波效果。一旦輸入信號的統計特性發生變化,它又能夠跟蹤這種變化,自動調整參數,使濾波器性能重新達到最佳。 自適應濾波器由參數可調的數字濾波器(或稱為自適應處理器)和自適應演算法兩部分組成,如圖7-3所示。參數可調數字濾波器可以是FIR數字濾波器或IIR數字濾波器,也可以是格型數字濾波器。輸入信號x(n)通過參數可調數字濾波器後產生輸出信號(或響應)y(n),將其與參考信號(或稱期望響應)d(n)進行比較,形成誤差信號e(n),並以此通過某種自適應演算法對濾波器參數進行調整,最終使e(n)的均方值最小。盡管自適應濾波器具有各種不同的演算法和結構,但是,其最本質特徵是始終不變的。這種最本質的特徵可以概括為:自適應濾波器依據用戶可以接受的准則或性能規范,在未知的而且可能是時變的環境中正常運行,而無須人為的干預。本章主要討論的是基於維納濾波器理論的最小均方(LMS)演算法,可以看到LMS演算法的主要優點是演算法簡單、運算量小、易於實現;其主要缺點是收斂速度較慢,而且與輸入信號的統計特性有關。 自適應線性濾波器是一種參數可自適應調整的有限沖激響應(FIR)數字濾波器,具有非遞歸結構形式。因為它的分析和實現比較簡單,所以在大多數自適應信號處理系統中得到了廣泛應用。如圖7-4所示的是自適應線性濾波器的一般形式。輸入信號矢量x(n)的L+1個元素,既可以通過在同一時刻對L+1個不同信號源取樣得到,也可以通過對同一信號源在n以前L+1個時刻取樣得到。前者稱為多輸入情況,如圖7-5所示,後者稱為單輸入情況如圖7-4所示,這兩種情況下輸入信號矢量都用x(n)表示,但應注意它們有如下區別。 單輸入情況: (7-18) 多輸入情況: (7-19) 單輸入情況下x(n)是一個時間序列,其元素由一個信號在不同時刻的取樣值構成;而多輸入情況下x(n)是一個空間序列,其元素由同一時刻的一組取樣值構成,相當於並行輸入。 對於一組固定的權系數來說,線性濾波器是輸出y(n)等於輸入矢量x(n)的各元素的線性加權之和。然而實際上權系數是可調的,調整權系數的過程叫做自適應過程。在自適應過程中,各個權系數不僅是誤差信號e(n)的函數,而且還可能是輸入信號的函數,因此,自適應線性濾波器的輸出就不再是輸入信號的線性函數。 輸入信號和輸出信號之間的關系為 單輸入情況: (7-20) 多輸入情況: (7-21) 如圖7-4所示的單輸入自適應線性濾波器,實際上是一個時變橫向數字濾波器,有時稱為自適應橫向濾波器。它在信號處理中應用很廣泛。自適應線性濾波器的L+1個權系數構成一個權系數矢量,稱為權矢量,用w(n)表示,即 (7-22) 這樣,輸出響應表示為 (7-23) 參考響應與輸出響應之差稱為誤差信號,用e(n)表示,即 (7-24) 自適應線性濾波器按照誤差信號均方值(或平均功率)最小的准則,即 (7-25) 來自動調整權矢量。
clear all
close all
%channel system order
sysorder = 5 ;
% Number of system points
N=2000;
inp = randn(N,1);
n = randn(N,1);
[b,a] = butter(2,0.25);
Gz = tf(b,a,-1);
%This function is submitted to make inverse Z-transform (Matlab central file exchange)
%The first sysorder weight value
%h=ldiv(b,a,sysorder)'
% if you use ldiv this will give h :filter weights to be
h= [0.0976;
0.2873;
0.3360;
0.2210;
0.0964;];
y = lsim(Gz,inp);
%add some noise
n = n * std(y)/(10*std(n));
d = y + n;
totallength=size(d,1);
%Take 60 points for training
N=60 ;
%begin of algorithm
w = zeros ( sysorder , 1 ) ;
for n = sysorder : N
u = inp(n:-1:n-sysorder+1) ;
y(n)= w' * u;
e(n) = d(n) - y(n) ;
% Start with big mu for speeding the convergence then slow down to reach the correct weights
if n < 20
mu=0.32;
else
mu=0.15;
end
w = w + mu * u * e(n) ;
end
%check of results
for n = N+1 : totallength
u = inp(n:-1:n-sysorder+1) ;
y(n) = w' * u ;
e(n) = d(n) - y(n) ;
end
hold on
plot(d)
plot(y,'r');
title('System output') ;
xlabel('Samples')
ylabel('True and estimated output')
figure
semilogy((abs(e))) ;
title('Error curve') ;
xlabel('Samples')
ylabel('Error value')
figure
plot(h, 'k+')
hold on
plot(w, 'r*')
legend('Actual weights','Estimated weights')
title('Comparison of the actual weights and the estimated weights') ;
axis([0 6 0.05 0.35])
% RLS 演算法
randn('seed', 0) ;
rand('seed', 0) ;
NoOfData = 8000 ; % Set no of data points used for training
Order = 32 ; % Set the adaptive filter order
Lambda = 0.98 ; % Set the fetting factor
Delta = 0.001 ; % R initialized to Delta*I
x = randn(NoOfData, 1) ;% Input assumed to be white
h = rand(Order, 1) ; % System picked randomly
d = filter(h, 1, x) ; % Generate output (desired signal)
% Initialize RLS
P = Delta * eye ( Order, Order ) ;
w = zeros ( Order, 1 ) ;
% RLS Adaptation
for n = Order : NoOfData ;
u = x(n:-1:n-Order+1) ;
pi_ = u' * P ;
k = Lambda + pi_ * u ;
K = pi_'/k;
e(n) = d(n) - w' * u ;
w = w + K * e(n) ;
PPrime = K * pi_ ;
P = ( P - PPrime ) / Lambda ;
w_err(n) = norm(h - w) ;
end ;
% Plot results
figure ;
plot(20*log10(abs(e))) ;
title('Learning Curve') ;
xlabel('Iteration Number') ;
ylabel('Output Estimation Error in dB') ;
figure ;
semilogy(w_err) ;
title('Weight Estimation Error') ;
xlabel('Iteration Number') ;
ylabel('Weight Error in dB') ;
處理的重要基礎。自適應濾波器可以不必事先給定信號及雜訊的自相關函數,它可以利用前一時刻已獲得的濾波器參數自動地調節現時刻的濾波器參數使得濾波器輸出和未知的輸入之間的均方誤差最小化,從而它可以實現最優濾波。
自適應濾波器的演算法有很多,有RLS(遞歸最小二乘法)和LMS(最小均方演算法)等。自適應LMS演算法是一種很有用且很簡單的估計梯度的方法,在信號處理中得到廣泛應用。
本論文主要研究了自適應濾波器的基本結構和原理,然後介紹了最小均方誤差演算法(LMS演算法),並完成了一種基於MATLAB平台的自適應LMS自適應濾波器的設計,同時實現了對信號進行初步的降噪處理。
通過模擬,我們實現了LMS自適應濾波演算法,並從結果得知步長和濾波器的階數是濾波器中很重要的兩個參數,並通過修改它們證實了這一點,其中步長影響著收斂時間,而且階數的大小也會大大地影響自適應濾波器的性能。
clear all
close all
N=10; %濾波器階數
sample_N=500; %采樣點數
A=1; %信號幅度
snr=10; %信噪比
t=1:sample_N;
length_t=100; %期望信號序列長度
d=A*sin(2*pi*t/length_t); %期望信號
M=length(d); %M為接收數據長度
x=awgn(d,snr); %經過信道(加雜訊)
delta=1/(10*N*(A^2)); %計算能夠使LMS演算法收斂的delta
y=zeros(1,M);
h=zeros(1,N); %LMS濾波器系數
h_normalized=zeros(1,N); %歸一化LMS濾波器系數
y1=zeros(1,N);
for n=N:M %系數調整LMS演算法
x1=x(n:-1:n-N+1);
%LMS演算法
y(n)=h*x1'
e(n)=d(n)-y(n);
h=h+delta*e(n)*x1;
%NLMS演算法
y_normalized(n)=h_normalized*x1'
e_normalized(n)=d(n)-y_normalized(n);
h_normalized=h_normalized+e_normalized(n)*x1/(x1*x1');
end
error=e.^2; %LMS演算法每一步迭代的均方誤差
error_normalized=e_normalized.^2; %NLMS演算法每一步迭代的均方誤差
for n=N:M %利用求解得到的h,與輸入信號x做卷積,得到濾波後結果
x2=x(n:-1:n-N+1);
y1(n)=h*x2'
y2(n)=h_normalized*x2'
end
subplot(411)
plot(t,d);
axis([1,sample_N,-2,2]);
subplot(412)
plot(t,x);
subplot(413)
plot(t,y);
subplot(414)
plot(t,y_normalized);
figure(2)
plot(t,error,'r',t,error_normalized,'b');
幫你在網路文庫里找到這個演算法,自適應雜訊抵消LMS演算法Matlab模擬,希望對你有幫助。如有問題,可以再討論解決。
裡面有些代碼有問題,可以參考,代碼還是自己寫:!
%基於RLS演算法的自適應線性預測
clc;
clear all;
N=300;
M=100;%計算的次數
w1=zeros(N,M);w2=zeros(N,M);I=eye(2);e1=zeros(N,M);
for k=1:M
%產生白雜訊
Pv=0.008;%定義白雜訊方差
a1=-0.195;a2=0.95;o=0.02;r=0.95;
m=5000;%產生5000個隨機數
v=randn(1,m);
v=v*sqrt(Pv);%產生均值為0,方差為Pv的白雜訊
%m=1:N;
v=v(1:N);%取出前1000個
%plot(m,v);title('均值為0,方差為0.0965的白雜訊');ylabel('v(n)');xlabel('n');
v=v'
%向量初使化
x=zeros(1,N);
x(1)=v(1);%x(0)=v(0)
x(2)=v(2)-a1*v(1);%x(1)=v(1)-a1*v(0)
w=zeros(2,N);
w(:,1)=[0 0]'%w(0)=[0 0]'
X=zeros(2,N);
X(:,2)=[v(1) 0]'%X(0)=[0 0]'X(1)=[v(0) 0]'
C=zeros(2,2*N);
C(:,1:2)=1/o.*I;%C(0)=1/o*I
e=zeros(1,N)'%定義誤差向量
u=zeros(1,N);
g=zeros(2,N);
%根據RLS演算法進行遞推
for n=1:N-2
x(n+2)=v(n+2)-a1*x(n+1)-a2*x(n);
X(:,n+2)=[x(n+1) x(n)]'
u(n)=X(:,n+1)'*C(:,2*n-1:2*n)*X(:,n+1);
g(:,n)=(C(:,2*n-1:2*n)*X(:,n+1))./(r+u(n));
w(:,n+1)=w(:,n)+g(:,n)*(x(n+1)-X(:,n+1)'*w(:,n));
C(:,2*n+1:2*(n+1))=1/r.*(C(:,2*n-1:2*n)-g(:,n)*X(:,n+1)'*C(:,2*n-1:2*n));
e(n)=x(n+1)-X(:,n+1)'*w(:,n);
w1(:,k)=w(1,:)' w2(:,k)=w(2,:)'%將每次計算得到的權矢量值儲存
e1(:,k)=e(:,1);%將每次計算得到的誤差儲存
end
end
%求權矢量和誤差的M次的平均值
wa1=zeros(N,1);wa2=zeros(N,1);en=zeros(N,1);
for k=1:M
wa1(:,1)=wa1(:,1)+w1(:,k);
wa2(:,1)=wa2(:,1)+w2(:,k);
en(:,1)=en(:,1)+e1(:,k);
end
n=1:N;
subplot(221)
plot(n,w(1,n),n,w(2,n));%作出單次計算權矢量的變化曲線
xlabel('n');ylabel('w(n)');title('w1(n)和w2(n)的單次變化曲線(線性預測,RLS)')
subplot(222)
plot(n,wa1(n,1)./M,n,wa2(n,1)./M);%作出100次計算權矢量的平均變化曲線
xlabel('n');ylabel('w(n)');title('w1(n)和w2(n)的100次平均變化曲線')
subplot(223)
plot(n,e(n,1).^2);%作出單次計算e^2的變化曲線
xlabel('n');ylabel('e^2');title('單次計算e^2的變化曲線');
subplot(224)
plot(n,(en(n,1)/M).^2);%作出M次計算e^2的平均變化曲線
xlabel('n');ylabel('e^2');title(颼次計算e^2的平均變化曲線');
⑹ C語言,「最優數字分配策略」 誰能給個思路
最佳適應演算法是從全部空閑區中找出能滿足作業要求的、且大小最小的空閑分區的一種計算方法,這種方法能使碎片盡量小。
最佳適應演算法(Best Fit):
它從全部空閑區中找出能滿足作業要求的、且大小最小的空閑分區,這種方法能使碎片盡量小。為適應此演算法,空閑分區表(空閑區鏈)中的空閑分區要按從小到大進行排序,自表頭開始查找到第一個滿足要求的自由分區分配。該演算法保留大的空閑區,但造成許多小的空閑區。
Best fit演算法等價於裝箱問題,舉例如下:
裝箱問題:有體積為V的箱子N個,體積為Vi的物品M個,求使得物品全部能夠裝入箱子,箱子數量的最小值。
假設 V=6 N=10,V1,V2,...,V10分別為:3 4 4 3 5 1 2 5 3 1。計算過程如下:
第一步按物品體積降序排序:5 5 4 4 3 3 3 2 1 1
第二步:取未裝箱的最大值5裝入第一個箱子。
第三步:判斷第一個箱子是否已滿,不滿且剩餘空間為1,搜尋剩下體積小於等於1的物品填入箱子1,箱子1填滿。
第四步:重復第二,第三步,直到所有物品裝入箱子為止,得到箱子數量為6.
6即時本例N的最小值。