分段函式f(x)的段數為陣列a的長度減1,在表達f(x)時,不能直接使用a的長度5-1=4.
先計算每個間隔點的函式值f(a2),f(a3),f(a4),再迴圈表示f(x)。
f(x) = (2x+1).*(x>2&&x<=4)
+(f(4)+2x^2+2).*(x>4&&x<=6)
+(f(6)+2x^3+3).*(x>6&&x<=8)
+(f(8)+2x^4+4).*(x>8&&x<=10)
因為每段中的表示式有一定的規律,所以可以用迴圈進行表示。
**如下:
function y =f(x)
y = 0;
a = [2 4 6 8 10];
% gap vector is used to store f(a1),f(a2),...,f(a5)
gap = zeros(size(a));
for i = 2:length(a)
gap(i) = 2*(a(i)^(i-1))+(i-1);
endfor i = 2:length(a)
gap(i) = gap(i) + gap(i - 1);
end% the representation of piecewise function
for i = 1:length(a)-1
y = y + (gap(i) + 2*(x^i)+i).*(x>a(i)&&x<=a(i+1));
end
同方法1,先計算間隔點函式值f(a2),f(a3),f(a4),再使用插值函式判斷輸入的自變數x位於哪個區間,進而使用該區間上的表示式。
**如下:
function y = f(x)
a = [2 4 6 8 10];
% 計算每個區間的基數f(a2),f(a3),f(a4)
gap=zeros(size(a));
gap(1)=0;gap(end)=nan;
for i=2:length(a)-1
gap(i)=gap(i-1)+2*a(i)^(i-1)+(i-1);
end%使用插值函式計算x落在哪個區間上,num表示段數。
num=interp1(a,1:length(a),x);
num=ceil(num)-1;
num(isnan(num))=length(a); %處理超過陣列a範圍的值
num(num==0)=1; %處理第乙個x = a(1)
%計算函式值,每個分段上的基數加上該分段上的變數
y=gap(num)+2*x.^num+num;
同方法2,但不使用插值函式,使用find函式判斷輸入的自變數x位於哪個區間
**如下:
function y = f(x)
a = [2 4 6 8 10];
% 計算每個區間的基數f(a2),f(a3),f(a4)
gap=zeros(size(a));
gap(1)=0;gap(end)=nan;
for i=2:length(a)-1
gap(i)=gap(i-1)+2*a(i)^(i-1)+(i-1);
end%使用find函式計算x落在哪個區間上,num表示段數。
num=find(sort([a x]) == x);
num=num(1)-1; % 當a中某元素與x相同時,取第乙個。
num(isnan(num))=length(a); %處理超過陣列a範圍的值
num(num==0)=1; %處理第乙個x = a(1)
%計算函式值,每個分段上的基數加上該分段上的變數
y=gap(num)+2*x.^num+num;
使用matlab表示「段數不確定」的分段函式
分段函式f x 的段數為陣列a的長度減1,在表達f x 時,不能直接使用a的長度5 1 4.先計算每個間隔點的函式值f a2 f a3 f a4 再迴圈表示f x f x 2x 1 x 2 x 4 f 4 2x 2 2 x 4 x 6 f 6 2x 3 3 x 6 x 8 f 8 2x 4 4 x ...
java函式可變引數(不確定引數)的使用
當寫了一方方法後,想讓這個方法傳入不確定的引數值,就要用到可變引數 在jdk1.5加入了此方法,使用語法 資料型別 可變引數名稱 如 int data public class test public static int add int a return result 可變引數的本質是陣列,相當於...
使用union型別出現的程式結果不確定問題
剛從論壇上看到乙個問題 include int main void r r.i 0 0 r.i 1 2 printf d n r.k 沒有賦值所以值是不確定的 return 0 程式結果是什麼?這裡簡單解釋一下 由於union型別是共享記憶體,也就是說字元陣列i和int型別變數k共享這一記憶體的資料...