『壹』 寫出求函數 的函數值的演算法,並畫出程序框圖。
解:該函數是分段函數,當x取不同范圍內的值時,函數解析式不同,因此當給出一個自變數x的值時,必須先判斷x 的范圍,然後確定利用哪一段的解析式求函數值,因為函數解析式分了三段,所以判斷框需要兩個,即進行兩次判斷, 於是,演算法如下: 第一步,輸入x; 第二步,如果x>0,那麼y=-1,否則如果x=0,那麼y= 0,否則y=1; 第三步,輸出函數值y。 程序框圖如圖所示: |
『貳』 MATLAB求分段函數,怎麼寫代碼呀
怎樣用matlab來定義分段函數,首先要根據分段函數建立自定義函數,然後在命令窗口調用或其他程序里調用。
現舉例說明:
1、建立自定義函數文件,piecewise1.m
function y=piecewise1(t)
%分段函數
n=length(t); %計算所輸入t的個數
for i=1:n
if t(i)>=2 %如果t>=2時,y=1
y(i)=1;
elseif t(i)>=-2 & t(i)<2%如果t[-2,2)時,y=t²
y(i)=t(i).^2;
else y(i)=-1; %如果t<-2時,y=-1
end
end
2、在命令窗口中調用
>>t=0:0.5:10;
>>y=piecewise1(t)
3、運行結果
其他類似的分段函數,可以參考上述來寫代碼。
『叄』 求助!!!---如下演算法,MATLAB求解分段函數最小值的問題---謝謝!!!
改正後的程序如下:
function f=f13(x)
h=0;g=0;a=5;k=100;m=4;
for i=1:29
h=h+(x(i)-1)^2*(1+(sin(3*pi*x(i+1)))^2);
end
for i=1:30
g=g+k*(x(i)>a|x(i)<-a)*(abs(x(i))-a)^m;
end
f=0.1*((sin(pi*3*x(1)))^2+ h+ (x(30)-1)^2*(1+(sin(2*pi*x(30)))^2))+g;
分段函數第二段函數值為0,所以只考慮其他兩段就行了。
還有一個問題就是你程序最後一行中(x(30)-1)^2與給出的函數不符,你自己注意一下。