matlab的参数积分编程

作者&投稿:慈祁 (若有异议请与网页底部的电邮联系)
用matlab怎么对下面积分编程,要详细的编程~

>> syms a b c t f; % a b c表示alpha,gama和z>> f = exp(c*t)*t^(a-1)*(1-t)^b-a-1;>> int(f,t,0,1)但是似乎没有显式的表达式

感觉不需要使用m文件,根据你给的代码,函数f(x)的参数x没有作用啊。具体需求是什么?
下面是求积分
f=@(x) exp(0.5*x).*sin(x+pi/6);s=quad(f,0,pi);

前几天写了这个问题的程序,因时间问题未能及时回答。现看到楼上已经回答,但代码以收费附件的方式提供,不便于交流,我谈谈自己的做法吧。

 

注意:以下列出几种方法的代码,是各自独立的,可以分别直接复制到命令窗口里面运行,或者保存成M文件之后运行。

 

方法1:符号积分

这种方法最为简单直接,很容易看懂。使用符号运算求积分,对于无法求出解析解的情况,有时候可以计算得到高精度数值解。

 

参考代码如下:

syms h
phi = atan(h/10.8);
alpha = int(sin(phi),0,h)/210;
T = linspace(0,400,20);
X = T*0;
Y = X;
for i=1:length(T)
    t = T(i);
    x = int(37.5*cos(phi+alpha),0,t);
    X(i) = double(x);
    y = int(37.5*sin(phi+alpha),0,t);
    Y(i) = double(y);
end
plot(X,Y)
axis equal
xlabel x; ylabel y

在有些版本中会提示“无法求出显式解”(Explicit integral could not be found)的警告信息,如果不希望看到警告,可以在代码前加一句

warning off symbolic:sym:int:warnmsg1

 

方法2:数值积分

这种方法通用性更强,对于一些很复杂的积分,使用符号运算可能会失败,而用数值方法一般不会有问题。

 

参考代码如下:

quadfun = @quadgk;
phi = @(h)atan(h/10.8);
alpha = @(H)arrayfun(@(h)quadfun(@(x)sin(phi(x)),0,h)/210,H);
H = linspace(0,2000,50);
X = arrayfun(@(h)quadfun(@(x)37.5*cos(phi(x)+alpha(x)),0,h),H);
Y = arrayfun(@(h)quadfun(@(x)37.5*sin(phi(x)+alpha(x)),0,h),H);
plot(X,Y)
axis equal
xlabel x; ylabel y

说明几点:

1、这里涉及到的知识主要包括匿名函数arrayfun和数值积分函数,如果看不明白,可以针对这几个方面查阅相关资料。

2、为了更清楚地了解x-y之间的关系,把h的取值范围适当放大了一些(0~2000)。

3、关于积分函数的选择:个人认为,使用quadgk进行积分是一个比较好的选择(该函数需2007b或更高版本)。如果使用2012a之后的版本,也可以用integral函数。如果是早期版本的MATLAB,可以用quadl之类的函数,但计算效率会低很多,而且可能产生关于最小步长的警告(可以用warning off MATLAB:quadl:MinStepSize关掉)。

 

关于补充问题

很明显,新图片里面的问题与原问题不同,其它系数是否一致姑且不论,最大的差别是,第一个式子原来是关于h的反正切函数,而现在是关于sin(h)的反正切。这个差别可能会导致方法1(使用符号运算)失效,而使用方法2(数值积分)求解的时间也远远超过原问题(就我这里测试的情况看,所需时间大约是40倍)。

 

有个系数R没有给出,我按照原问题对应的系数设置 R = 37.5*r0*i1 = 112.5000,参考代码如下(h取值范围0~2000,可自行修改):

r3 = 15; C = 33;
r0 = 10; i1 = 0.3;
i2 = 2; l = 90;
m = 190;
R = 37.5*r0*i1;
quadfun = @quadgk;
phi = @(h) atan( r3*sin(h/(r0*i1*i2)) / C );
alpha = @(H) arrayfun(@(h)quadfun(@(x)sin(phi(x)),0,h)/sqrt(l^2+m^2),H);
H = linspace(0,2000,50);
%x = quadl(@(x)37.5*cos(phi(x)+alpha(x)),0,1);
X = arrayfun(@(h)quadfun(@(x)R/(r0*i1)*cos(phi(x)+alpha(x)),0,h),H);
Y = arrayfun(@(h)quadfun(@(x)R/(r0*i1)*sin(phi(x)+alpha(x)),0,h),H);
plot(X,Y)

 



输出图形为

代码见附件




津南区15672672796: 在matlab中怎样求带有参数的定积分 -
茶鸿阿南:[答案] 设被积函数为f=ax+b,积分区间为(c,d) MATLAB代码如下: syms a b c d x; f=a*x+b; answer=int(f,x,c,d).

津南区15672672796: 在matlab中怎样求带有参数的定积分 -
茶鸿阿南: 设被积函数为f=ax+b,积分区间为(c,d) MATLAB代码如下:syms a b c d x; f=a*x+b; answer=int(f,x,c,d).

津南区15672672796: Matlab 求带参数的积分 -
茶鸿阿南: >> syms x a >> b=int(a*exp(-a*x),x,0,10)b =1 - 1/exp(10*a)>> aa=solve(b-1)%题有问题,若积分值为1,则a无穷大,所以无解 Warning: Explicit solution could not be found. > In solve at 81aa =[ empty sym ]>> aa=solve(b-2)aa =(pi*i)/10>> aa=solve(b-0.5)aa =log(2)/10

津南区15672672796: 求助:怎样用matlab求带参数的积分,积分函数较复杂! -
茶鸿阿南: a=((17.5+7.5*cos(m)+10.5*cos(n)+2.5*cos(m+n))*g+(3.75+5.25*cos(n)+2.5*cos(m+n))*h)/(32.5+15*cos(m)+10.5*cos(n)+5*cos(m+n));b=int(a,t,0,8)

津南区15672672796: matlab怎么表示含参变量的积分
茶鸿阿南: function F=g(a) F=quad(@myfun,0,a);%调用匿名函数, %子函数 function f=myfun(a,x) f=....... 积分一般用quad比较多,还有其他几个函数,基本原理都差不多,结果好像也差不多. ------------------------------------------------- 是在别的函数或脚本里调用g...

津南区15672672796: matlab编程 急求,如式,如何编程含有符号参数的积分表达式,希望有大神帮帮那
茶鸿阿南: close all clear,clc % 积分下界 [-1.5 1.5] d1 = linspace(-1.5,1.5,20); dlength = length(d1); for j = 1:dlength % d = d1(j); fvz = @(x) (x-d).^1.5.*exp(-x.^2); fz(j) = quadgk(fvz,d,inf); dy(j) = d; end figure plot(dy,fz) xlabel( '积分下界' ); title(['积分下界:',num2str(d1(1)),'至',num2str(d1(dlength))])

津南区15672672796: matlab中如何求积分表达式中的参数,注已知很多变量和结果 -
茶鸿阿南: 给你一个最简单的例子:求解 x^k从0到2积分等于3的k值,利用fzero函数,初值为0 fzero(@(k) quadl(@(x)x.^k,0,2)-3,0)

津南区15672672796: 如何用matlab求积分的程序 -
茶鸿阿南: 程序: fun=sin(0.5*pi*x./y);%% a=int(int(fun,y,sqrt(x),x),x,1,2); b=simple(a) %化简 I=vpa(b,4) %得到4位近似解,也可以任意N位解 结果: I = 0.2719

津南区15672672796: matlab中怎么计算变参数积分?比如对f=ax,a是一组数,求解f在0到5上的积分 -
茶鸿阿南: clear;clc syms a x f=a*x; I=int(f,x,0,5) a=0:0.5:5; subs(I)

津南区15672672796: 如何用matlab计算带有参数的数值积分? -
茶鸿阿南: 我,本人, 也学这个,现在看这个问题,我都有点迷惑了哦. 让我想想想哦! syms a b x y %定义符号变量 fxy=(a*x-b)^2+y; %生成符号函数 int(fxy, x) %符号函数fxy对x求积分 你用这个试试,看可以吗?.如果不可以在告诉哦...还有MATLAB好象很难安装哦.我安了几次,都没有安上哦

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网