怎样用matlab画一个二重积分(含两个未知数)关于f和两个未知数的三维图像

怎样用matlab画一个二重积分(含两个未知数)关于F和两个未知数的三维图像?

r和θ是未知参数 就是画出F、r、θ三者的三维图像?
我参照网上的例子写了一个,但总报错? 谁能帮我追加100分。
clear all; close all
syms n;
i = 1;
r = 0.01;
g = 0;
es = [0:0.001:0.01].'; % 变量e的采样序列
hs = [0:0.001:0.02].'; % 变量h的采样序列
[ES, HS] = meshgrid(es, hs); % 生成平面上的小矩形顶点坐标值的矩阵
YS=AS=BS=CS=DS=ES=FS=AA=A=BB=CC=DD=EE=FF=0*ES;
for g = 1:length(es) %length(es)es长度
e = es(g);
for k = 1:length(hs) %length(hs)hs长度
h = hs(k);
f= @(x,y)(1/((e*cosh-x*cosy)^2+(e*sinh-x*siny)^2+0.005^2)-1/((e*cosh-x*cosy)^2+(e*sinh-x*siny)^2+0.025^2))*(e*cosh-x*cosy)*x; %x=r1 y=o1 e=r h=0
AS(k,g) = -symsum(quad2d(f,n*pi/3-pi/12,n*pi/3+pi/12,0.09,0.14),0,5); %前两项是外层上下限
BS(k,g) = -symsum(quad2d(f,n*pi/3+pi/12,n*pi/3+pi/4,0.09,0.14),0,5); %前两项是外层上下限
YS(k, g) = AS(k,g)+BS(k,g);
end
end
YS = 8.2*e^4*YS;
surf(ES,HS,YS);
求和符号下面打错了,n从0到5

楼上两位的回答都很精彩,但也都存在一些问题:

1、chinasunsunsun的回答主要有以下问题(查了好半天才把问题查全):

(1)楼主给的公式有两项积分,但您只计算了一项,而且是把第一项的被积函数与第二项的积分限混在一起使用;

(2)楼主的n取值是0~5,您只取了0~4;

(3)画图的方式:很明显θ作为角度量,画图应该按照柱面坐标,但您是按照直角坐标画的(相应的,θ取值范围也不恰当)。

 

2、AliKsai回答的内容非常丰富,但楼主想要的是F对r、θ的三维图像而已,您前面的大量讨论都不能反映楼主的真正需求,最后的那张图似乎有那么点意思了,但终究还是难见全貌,正确性也可疑,而且过程过于繁琐。

 

以上点评纯粹出于技术探讨,希望不要介意。

我写的代码如下,如果有问题欢迎批评:

f1=@(t,r,t1,r1)(-1./((r*cos(t)-r1.*cos(t1)).^2+(r*sin(t)-r1.*sin(t1)).^2+0.005^2).^(3/2)+...
    1./((r*cos(t)-r1.*cos(t1)).^2+(r*sin(t)-r1.*sin(t1)).^2+0.025^2).^(3/2)).*(r*cos(t)-...
    r1.*cos(t1)).*r1;
f2=@(t,r,t1,r1)(1./((r*cos(t)-r1.*cos(t1)).^2+(r*sin(t)-r1.*sin(t1)).^2+0.005^2).^(3/2)-...
    1./((r*cos(t)-r1.*cos(t1)).^2+(r*sin(t)-r1.*sin(t1)).^2+0.025^2).^(3/2)).*(r*cos(t)-...
    r1.*cos(t1)).*r1;
An = @(n,t,r) 8.2e4*dblquad(@(r1,t1)f1(t,r,t1,r1),0.09,0.14,(n/3-1/12)*pi,(n/3+1/12)*pi) ...
    + 8.2e4*dblquad(@(r1,t1)f2(t,r,t1,r1),0.09,0.14,(n/3+1/12)*pi,(n/3+1/4)*pi);
F = @(t,r)sum(arrayfun(@(n)An(n,t,r),0:5));

r = linspace(0,.1,20);
t = linspace(0,2*pi,20);
[t,r]=meshgrid(t,r);
z = arrayfun(F,t,r);
[x,y,z]=pol2cart(t,r,z);
surf(x,y,z)

追问

其实我算的是如上图永磁体盘12块两种极性磁铁对导磁体盘产生的磁场强度,我把解析式子推导出来了,平时都用有限元仿真软件做,没解析做过,那两个式子分别是永磁体上端面和下端面对A点产生的磁场强度。r和θ变化相当于导磁体盘底部A点的变化,我需要画出A点在不同位置时(r和θ变化)的磁场强度。您的回答很专业,待我验证后给分,谢谢您的慷慨无私的回答!

追答

谢谢你对问题的背景做了说明。我回答过的问题当中,有不少不知道到底是什么应用背景,只是从数学或编程的角度给出求解方法。能对背景稍微有点了解会感觉具体了很多。

 

我现在取的点偏少,可以修改

    r = linspace(0,.1,20);
    t = linspace(0,2*pi,20);

    r = linspace(0,.1,30);
    t = linspace(0,2*pi,60);
得到的结果更平滑一些(当然,也可以取更多点,但会大大增加计算量)。

 

另外,对于磁场强度的表现,也可以考虑用伪彩图(pcolor),它是以色彩表示强度:

pcolor(x,y,z)
axis square
colorbar
shading interp

 

还有,你现在要表现的磁场强度只是一个标量,需要的话,可以同时计算出各处的磁力线方向,进而用三维的场图去表现。

追问

您好,您的回答对我启迪很大,还要麻烦您看下下面的式子。和我按您的程序改的,画出的图有点奇怪,您看下我写的是否正确,还请不吝赐教,谢谢!由于字数限制,我只好截图。

追答

本来想请把你现在写的代码发给我(如果这里受字数限制,可通过网盘或私信),一来避免我重新录入,二来看看你现在的图到底什么样,有问题的话也好查原因。但等了很久也没等到,所以还是自己改了一下代码。

 

如果按照我原来的取值范围,即r=0~0.1,θ=0~2*pi,结果如下(看上去似乎和你的磁铁布局更吻合了):

如果按照你代码中的取值范围,即r=0~0.2,θ=0~pi/3,结果如下:

你画出的图是这样的吗?具体的物理概念我没仔细想,但看上去似乎没什么太奇怪的啊?

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-15
rr= [0:0.001:0.01];
tt= [0:0.001:0.02];
f=@(r,t,r0,t0) (-1./((r0*cos(t0)-r.*cos(t)).^2+(r0*sin(t0)-r.*sin(t)).^2+.005^2).^1.5+1./((r0*cos(t0)-r.*cos(t)).^2+(r0*sin(t0)-r.*sin(t)).^2+.025^2).^1.5).*(r0*cos(t0)-r.*cos(t)).*r;
Y=zeros(length(rr),length(tt));
for i=1:length(rr)
for j=1:length(tt)
for k=0:4
Y(i,j)=Y(i,j)+dblquad(@(r,t)f(r,t,rr(i),tt(j)),0.09,0.14,pi/12+k*pi/3,pi/4+k*pi/3);
end
end
end
Y=Y*8.2*10^4;
surf(tt,rr,Y)

怎样用matlab画一个二重积分(含两个未知数)关于f和两个未知数的三维图像...
(1)楼主给的公式有两项积分,但您只计算了一项,而且是把第一项的被积函数与第二项的积分限混在一起使用;(2)楼主的n取值是0~5,您只取了0~4;(3)画图的方式:很明显θ作为角度量,画图应该按照柱面坐标,但您是按照直角坐标画的(相应的,θ取值范围也不恰当)。2、AliKsai回答的内容...

Matlab如何绘制二重积分的三维图像
可这样:先画出原函数的形状,再画出积分曲线的某个区域,比如0--10内的图形:syms x y f=2*exp(-2*x-y);ezsurf(f)a=0:10;b=0:10;for ii=1:length(a)for jj=1:length(b)z(ii,jj)=int(int(f,x,0,a(ii)),y,0,b(jj));end end figure,plot3(a,b,z)...

怎么用matlab求这两个二重和三重积分
用matlab计算二重积分和三重积分,一般可以用quad2d函数(老版本), integral2函数(高版本)计算二重积分 ,用integral3函数计算三重积分,也可以用trapz函数计算。根据题主给出的问题,可以这样来计算(例1):第一步,自定义被积函数,即 fun = @(x,y) x.^2+y.^2-x;第二步,自定义y的上...

用matlab画二重积分的图形的代码 ,函数z=x^2+y^2; x=[0.1],y=[0,x^...
>> ylabel('y')>> xlabel('x')>> zlabel('z')>> view(75,25) 能画出满足条件的图像

如何用matlab的for 循环语句求一个 含参数的 二重积分的 数值积分...
clear all;clc;syms a b x y f=(a^2+x^2-2*a*x*cos(b-y))*exp(j*2*b)*exp(-a^2)*(a\/2)^2 *a;jf=int(int(f,y),x)jf = 1\/4*exp(2*i*b)*exp(-a^2)*a^3*(a^2*y*x+1\/3*x^3*y-a*x^2*sin(-b+y))

用matlab计算含参变量的二重积分
但可以借助于数值方法来求。比如,对于z取某个范围的值,可以分别计算出相应的P(z)来,但需要明确两个条件:1、z的范围(必须是有限的);2、关于积分下限:现在的下限是0,但被积函数表达式中z出现在分母,这在数值计算时会造成问题。把下限换成一个比较小的数(比如eps)是否允许?

设计一个matlab程序 计算圆域上的二重积分
这个可以用matlab的符号积分或者数值积分解决,下面提供4种方法:1、直角坐标系符号积分 syms x yint_y = int(sin(pi*(x^2+y^2)),y,-sqrt(1-x^2),sqrt(1-x^2)); % 先对y积分I = vpa(int(int_y,x,-1,1)) I = 2.0 2、极坐标系符号积分 syms rI = 2*pi*int(r*sin(pi*...

大家帮忙用matlab计算一个数值积分,并列出命令行
用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...

大神帮我看看这个MATLAB二重积分程序哪里有错啊
建议以后遇到复杂的表达式尽量分成几个来写,以避免出错,例如 >> syms y z>> f=2*0.89*sqrt(1-(y-0.6)^2\/0.36);>> y1=2.45*0.41129\/2.05;>> y2=2.45*0.41129\/2.05-z*tan(deg2rad(4.1));>> z1=0;>> z2=2.45;>> fz=int(f,y,y1,y2);>> r=int(fz,z,z1...

如何用matlab求二重积分
第二重是积x:ans = 27135\/32最后一个double是将符号变成数值:ans = 847.9688 本回答由提问者推荐 举报| 评论(2) 12 10 pantan 采纳率:83% 来自团队:MATLAB技术论坛 擅长: 其他编程语言 工程技术科学 考研 数据结构及算法 为您推荐: matlab计算二重积分 matlab求定积分 用matlab求二重积分 matlab二重...

相似回答