早教吧 育儿知识 作业答案 考试题库 百科 知识分享

请问matlab 分段函数如果分成100段,改如何表示?我知道,比如把函数分成三段,可以用if-elseif-else分别列举每一段来表示,但是如果是100段甚至更多,这样一来不能一一列举,该怎么表示呢?比如我要

题目详情
请问matlab 分段函数如果分成100段,改如何表示?
我知道,比如把函数分成三段,可以用if-elseif-else分别列举每一段来表示,但是如果是100段甚至更多,这样一来不能一一列举,该怎么表示呢?比如我要表示一个分段函数u=f(t,q) ,自变量是时间t和一个向量q,length(q)=200,t的范围tt=0:0.01:7,函数分成的段数为q的维数200,每一段恒等于对应的q的值.
比如输入q=1:1:200,t=1.45时,f(1.45,1:200)=42.
我自己想了一种方法,可是感觉很繁琐,由于涉及到矩阵的运算,代入到我论文的函数里后运算需要很长时间.下面是我的程序:
function u=control(t,q)
t0=0;
tf=7;
h=0.01;
tt=t0:h:tf;
k=tf/length(q);
N1=length(tt);
N2=length(q);
U=zeros(N2,length(tt));
u_all=zeros(size(tt));
for j=1:N2
for i=1:N1
if tt(i)>=(j-1)*k & tt(i)
▼优质解答
答案和解析
你的问题可以这样解决:
function u=control(t,q)
t0=0;
tf=7;
h=0.01;
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