如何用matlab如何实现数值积分

如何用matlab如何实现数值积分,第1张

用matlab可以如下数值积分法,来求解定积分、二重积分、三重积分的数值解问题。

1、梯形数值积分计算 trapz()

X = 0:pi/100:pi

Y = sin(X)

Z = pi/100*trapz(Y)

2、自适应辛普森数值积分计算 quad()

F = @(x)1./(x.^3-2*x-5)

Q = quad(F,0,2)

3、自适应Lobatto积分计算 quadl()

function y = myfun(x)

y = 1./(x.^3-2*x-5)

end

Q = quadl(@myfun,0,2)

4、自适应Gauss Kronrod quadrature积分计算 quadgk()

function y = myfun(x)

y = exp(-x.^2).*log(x).^2

end

Q = quadgk(@myfun,0,Inf)

5、平面区域的二重积分的数值计算 quad2d()

fun = @(x,y) 1./( sqrt(x + y) .* (1 + x + y).^2 )

ymax = @(x) 1 - x

Q = quad2d(fun,0,1,0,ymax)

6、矩形区域的的二重积分数值计算 dblquad()

function z = integrnd(x, y)

z = y*sin(x)+x*cos(y)

end

Q = dblquad(@integrnd, pi, 2*pi, 0, pi)

7、三重积分数值计算 triplequad()

function f = integrnd(x, y, z)

f = y*sin(x)+z*cos(x)

end

Q = triplequad(@integrnd, 0, pi, 0, 1, -1, 1)

以上是最基本的求解数值积分方法。

H=(B-A)/N这一句不应该放在变量声明中,因为刚定义时,A,B,N没有赋值,是随机值

应该将

float A,B,N,H=(B-A)/N,sum=0

改为:

float A,B,N,H,sum=0

将H=(B-A)/N放在scanf ("%f",&N)后面。

#另外建议将int i放在主函数起始处。

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

更改后的程序:

#include<stdio.h>

float f(float x)

{

return 4/(x*x+1)

}

void main()

{

float A,B,N,H,sum=0

int i

printf ("请输入A值:")

scanf ("%f",&A)

printf ("请输入B值:")

scanf ("%f",&B)

printf ("请输入N值:")

scanf ("%f",&N)

H=(B-A)/N

for(i=1i<=Ni++)

{

sum+=(f(A)+f(A+H))*H/2

A=A+H

}

printf("%.5f\n",sum)

}


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

原文地址: http://outofmemory.cn/yw/12198245.html

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

发表评论

登录后才能评论

评论列表(0条)

保存