『壹』 写出求函数 的函数值的算法,并画出程序框图。
解:该函数是分段函数,当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与给出的函数不符,你自己注意一下。