大家好,又见面了,我是你们的朋友全栈君。
本文介绍一个使用Matlab进行求分段函数积分值的方法。
首先介绍如何使用int()对连续函数进行积分的求解,然后介绍一个对分段函数进行求积分的例子。
Matlab中求积分的函数为int(),调用形式为int(func, ‘x’, a, b),其中func为被积函数,x为积分变量,[a, b]为被积区间。
如int(x^2, ‘x’, 1, 2)为求函数y=x^2在区间[1, 2]的积分值,结果为7/3。
注意:在使用int()进行积分时,需要将积分变量定义为系统变量(我使用具体的值的时候经常出现问题)。并且许多系统自带的函数不能用int()进行积分,实际上自己写的函数(即函数文件名)也不能写在func参数上,而直接将x^2写入就没问题。这个部分如果以后知道了原因或者具体的细节再进行补充。
对于分段函数,我们不能直接把整个函数直接写入func参数中(毕竟表达式都不一样,但是如果函数文件可以的话或许可以解决),我这里写一个参数可变的积分函数进行分段函数积分的求解,函数如下:
%myint.m
function [ out ] = myint(t, F1, L1, R1, F2, L2, R2, F3, L3, R3, F4, L4, R4)
% MYINT 分段函数积分
% 最多支持4段
% 第一个参数为积分变量
% 后面的参数格式为:函数func 区间左端点L 区间又端点R
if(nargin>=1) %一段
out=int(F1,t,L1,R1);
end
if(nargin>=5) %两段
out=out+int(F2,t,L2,R2);
end
if(nargin>=8) %三段
out=out+int(F3,t,L3,R3);
end
if(nargin>=11) %四段
out=out+int(F4,t,L4,R4);
end
end
这样的话就可以一次性把分段函数的多段传入进行求解,比如一个函数fx=2x+1,(x<0), fx=-2x+1 (x>0),则fx在区间[-0.5,0.5]的积分可以表达为: f1=2*x+1; f2=-2*x+1; myint(‘x’, f1, -0.5, 0, f2, 0, 0.5); 计算结果为1/2。
看到这里你可能会感到有些失望–这不就是把几个函数写一块了嘛?!的确是这样的(利用Matlab的多目表达式甚至可以一行就写完)。如果大家有更好的方法,烦请告知,欢迎留言。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133337.html原文链接:https://javaforall.cn