使用MATLAB Function 时需要注意,在多个输入和多个输出时,可以采用以下方法
函数名默认为fcn
输出为sys;
然后定义输出的维数(比如输出为两个,可定义 sys = [0;0];)
然后在最后输出时,可以将输出的实际变量赋给sys, 比如你这个可以定义为 sys = [x1;x2];
我刚才测试过,完美运行。
你的问题可以这样解决:
function u=control(t,q)
t0=0;
tf=7;
h=001;
tt=t0:h:tf;
N = length(q);
t_div = t0:tf/(N-1):tf; % 把t=0~7分成200份,形成一个函数q=f(t_div);
u_all = interp1(t_div,q,tt,'nearest'); % 用nearest neighbor的方法插值,把对应于某一个时间t_div(n)的的值q(n)赋给包含t的那段函数的每一个点上,也就是tt上。
plot(tt,u_all,'')
data = [tt' u_all'];
u = data(data(:,1)==t,2); %找到当自变量为t,q时的u值
return
你可以这样来定义其函数。函数名 piecewise4()
function y=piecewise4(h)
for x=0:100
x=0:1:100;
k = (x>=h)x + (x<h)(x-(035-x)^2);
y=30pi(1/(k+0441));
end
在命令窗口下,输入
>> h=10;y=piecewise4(h) %回车
运行结果
我觉得应该这样:
function Y=danbianzhishu(X)
n=length(X);
Y=[];
for i=1:n
if X(i)>0
Y=[Y,exp(X(i))];
else
Y=[Y,0];
end
end
你写的程序,对于单个数值应该是正确的,输入参数如果是向量的话,是会错误的
点击至文库查看全文>
原发布者:bitian216
f(x)的定义如下:
1、写一个函数文件f(x)实现该函数,要求参数x可以是向量;2、作出该函数的图形;3、求出f(x)的零点与最值。解:(1)、编写M函数文件functiony=f(x)n=length(x);ifx=0&x<10&x~=2&x~=3y=x^2+5x+6;elsey=x^2-x-1;end(2)、把文件fm放置在搜索路径上(3)、运行指令令x=5,则在命令窗口输入指令y=f(5)得到答案:y=56(2)图形x1=(-5):001:0;y1=x1^2+x1-6;plot(x1,y1,'m-');holdonx2=0:001:10;y2=x2^2-5x2+6;plot(x2,y2,'r:');holdonx3=10:001:15;y3=x3^2-x3-1;plot(x3,y3);x4=-4;y4=x4^2-x4-1;plot(x4,y4,'p');holdonx5=2;y5=x5^2-x5-1;plot(x5,y5,'b');holdonx6=3;y6=x6^2-x6-1;plot(x6,y6,'g');title('函数f(x)的图形');text(-4,-20,'曲线f1(x)=x^2+x-6');text(2,40,'曲线f2(x)=x^2-5x+6');text(10,146,'曲线f3(x)=x^2-x-1');legend('f1(x)','f2(x)','f3(x)','x=-4','x=2','x=3');结果如图:
(2)f(x)的零点①当x>p1=[1,1,-6];>>x1=roots(p1);x1=-32由题意可知,x的取值范围在(-∞,0),所以x1=2舍去,即f(x)的零点之一为x1=-3②当x>=0&x>p2=[1,-5,6];>>x2=roots(p2)x2=
设已经定义好了函数 function y = sx(t)
下面是qx的定义:
function y = qx(t)
if m<t && t<n
y = sx(t);
else
y = 0;
end
实际上,从求积分的角度来说,qx甚至没必要单独定义出来。。。
另外,“表达式”和一个function文件有区别吗?
关键点:将自变量x定义为一个向量;对每个元素进行判断,以确定对应的y值
参考代码:
clcclear all
close all
x = 0:05:12;
y = zeros(1, length(x));
for i=1:length(x)
if(x(i)<=2)
y(i) = 8+2;
else
if(x(i)<=10)
y(i) = 8 + 19(x(i)-2) + 2;
else
y(i) = 8 + 198 + 285(x(i)-10) + 2;
end
end
end
figure
plot(x,y,'ro--');
grid on
xlabel('x');
ylabel('y');
效果图
--------------------------------------------------------
还可以用寻找自变量分界点下标的方式处理,效果相同
参考代码:
clcclear all
close all
x = 0:05:12;
y = zeros(1, length(x));
index_x_2 = find(x==2); % 找出x=2的位置
index_x_10 = find(x==10); % 找出x=10的位置
y(1:index_x_2) = 8 + 2;
y(index_x_2+1 : index_x_10) = 8 + 19(x(index_x_2+1 : index_x_10)-2) + 2;
y(index_x_10 : length(y)) = 8 + 198 + 285(x(index_x_10 : length(x))-10) + 2;
figure
plot(x,y,'ro--');
grid on
xlabel('x');
ylabel('y');
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)