Matlab Function输入为一个向量时,应该怎么在函数中引用向量中的元素呢?思索良久未果,望高人指点。

Matlab Function输入为一个向量时,应该怎么在函数中引用向量中的元素呢?思索良久未果,望高人指点。,第1张

使用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值

 

参考代码:

clc

clear 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');

效果图

--------------------------------------------------------

还可以用寻找自变量分界点下标的方式处理,效果相同

参考代码:

clc

clear 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');

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12181615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存